JuiceLevelsAlertNew_v4

Download script
JuiceLevelsAlertNew_v4

This technical tool is designed to help traders visualize market volatility and momentum by categorizing price action into three distinct "quality" zones. Rather than showing raw numbers, it translates complex mathematical data into a color-coded histogram that identifies whether the current market environment is favorable for trading.

Core Logic & Functionality

The script operates by analyzing the Standard Deviation of price movements over a specific timeframe. Standard deviation is a measure of how much prices are deviating from their average; in simpler terms, it measures the "intensity" or "stretch" of the market's movement.

The tool processes this data and sorts it into three visual categories based on pre-defined intensity thresholds:

  • High Intensity (Good Juice): When the market volatility exceeds a high threshold, the indicator highlights this as a strong signal (Lime Green). This identifies periods where price movement is significant enough to be of interest to the trader.
  • Neutral/Moderate Intensity (SoSo Juice): When volatility stays within a middle range, the indicator classifies it as "SoSo" (Yellow). This represents a calmer market state where movements are neither extreme nor stagnant.
  • Low Intensity (Bad Juice): When price movement falls below a specific low level, the indicator marks it as "Bad" (FireBrick). This suggests a lack of momentum or a "dead" market where significant action is currently missing.

Key Features for the User

Visual Reference Levels The script can project horizontal dashed lines on your chart. These act as visual guides, helping you see exactly how close the current market activity is to reaching a "Juice" level. You can customize how many of these levels appear and their specific spacing.

Customizable Sensitivity Traders can fine-tune the tool to match their specific trading style:

  • Period: Adjusts how much historical data the script looks at to calculate volatility.
  • Threshold Levels: Allows you to define exactly what constitutes "High," "Moderate," or "Low" activity for your preferred asset.

Alert System To ensure traders don't have to watch the screen constantly, the script includes an optional notification system. It can trigger a visual alert and a sound notification when the market volatility crosses a specific pip threshold, signaling that the "Juice" has reached a level worthy of attention.

Summary

In essence, this script acts as a filter for market noise. By categorizing volatility into three distinct colors, it allows you to quickly identify high-energy price action while ignoring periods where the market may be too stagnant to provide profitable opportunities.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt plays sound alerts
11 Views
0 Downloads
0 Favorites
JuiceLevelsAlertNew_v4
//+------------------------------------------------------------------+
//|                                                        Juice.mq4 |
//|                                                          Perky_z |
//|                              http://fxovereasy.atspace.com/index |
//+------------------------------------------------------------------+
#property  copyright "perky"
#property  link      "http://fxovereasy.atspace.com/index"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  LimeGreen
#property  indicator_color2  FireBrick
#property indicator_color3 Yellow
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- indicator parameters
extern bool DoAlerts = false;
extern int AlertFromPips = 8;
extern int Periyod=7;
extern int thresholdLevel=8;
extern int sosoLevel = 4;
extern bool JuiceLevelsVisible = true;
extern int JuiceStartPips = 4;
extern int JuiceStepPips = 4;
extern int JuiceLevelsNumber = 3;
extern color JuiceLevelColor = Silver;

double thresholdLevelPoint;
double sosoLevelPoint;

//---- indicator buffers
double GoodJuice[];
double BadJuice[];
double SoSoJuice[];
double currentJuiceLevel;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 3 additional buffers are used for counting.
   IndicatorBuffers(3);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexDrawBegin(0,Periyod);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);
//---- 2 indicator buffers mapping
   if(!SetIndexBuffer(0,GoodJuice) &&
      !SetIndexBuffer(1,BadJuice) &&
      !SetIndexBuffer(2,SoSoJuice))
      Print("cannot set indicator buffers!");
      
   IndicatorDigits(4);
   
   thresholdLevelPoint = thresholdLevel*Point;
   sosoLevelPoint = sosoLevel*Point;
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Juice("+Periyod+","+thresholdLevel+")");

//---- initialization done
   return(0);
  }

int SetLevelLines()
{
   string levelLabel;
   if(JuiceLevelsVisible)
   {
      SetLevelStyle(STYLE_DASH,1,JuiceLevelColor);
      for(int i=1; i<= JuiceLevelsNumber; i++)
      {
         
         currentJuiceLevel = (JuiceStartPips + (i-1)*JuiceStepPips);
         SetLevelValue(i,currentJuiceLevel);
         levelLabel = "Level "+i+": "+currentJuiceLevel;
         SetIndexLabel(i,levelLabel);
      }
   }else
   {
      for(i=1; i<= JuiceLevelsNumber; i++)
      {
         
         SetLevelValue(i,0.0);
         
      }
   }
}

//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int start()
{
//if ( Period != 15)  Alert ("Juice Is Recommended for 15 Min Chart only!!");
   int limit,i;
   int counted_bars=IndicatorCounted();
   double Juice;
   bool TurnOnAlert = true;
   
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
  
   SetLevelLines();
 
//---- main loop
   for(i=0; i<limit; i++)
   {
      Juice=iStdDev  (NULL,0,Periyod,MODE_EMA,0,PRICE_CLOSE,i);
      if(Juice>=thresholdLevelPoint){
         GoodJuice[i]=Juice/Point;
         BadJuice[i]=0;
         SoSoJuice[i]=0;
      }else if(Juice<sosoLevelPoint){
         BadJuice[i]=Juice/Point;
         GoodJuice[i]=0;
         SoSoJuice[i] = 0;
      }else{
         SoSoJuice[i] = Juice/Point;
         BadJuice[i]=0;
         GoodJuice[i]=0;
      }
   }
   
   if (DoAlerts)
   {
      if (Juice > AlertFromPips && Period() == 5)
      {
         if (TurnOnAlert)
         {
            Alert("Juice above ",AlertFromPips," for ", Symbol());
            PlaySound("Tick.wav");
            TurnOnAlert = false;
         }
      }
      else
      {
         TurnOnAlert = true;
      }
   }
      
//---- done
   return(0);
  }
//+------------------------------------------------------------------+

Comments