JuiceLevelsAlertNew

Download script
JuiceLevelsAlertNew

The Juice indicator is a specialized market analysis tool designed to categorize and visualize market volatility based on standard deviation calculations. Instead of simply showing raw price movements, this script interprets the "energy" or "juice" of the market to help traders identify different states of activity.

Core Logic and Functionality

The tool operates by measuring the Standard Deviation of price—a common statistical measure used to determine how much a price fluctuates from its average. It then sorts these fluctuations into three distinct categories, represented visually as colored histograms in a separate window:

  • Good Juice (High Volatility): When the market activity exceeds a specific high-energy threshold defined by the user, the indicator registers this as "Good Juice." This represents significant movement or strong momentum.
  • So-So Juice (Moderate Volatility): If the market activity stays within a middle range (above a low floor but below the high ceiling), it is categorized as "So-So Juice." This indicates a neutral, steady state of market behavior.
  • Bad Juice (Low Volatility): When market activity falls below a predetermined minimum level, the indicator flags this as "Bad Juice," signaling a period of stagnation or very low price movement.

Visual Elements and Customization

To help traders navigate these different states, the script includes several customizable features:

  • Dynamic Level Lines: Users can choose to display horizontal reference lines. These act as visual milestones, allowing you to see exactly where the transition points between "Good," "So-So," and "Bad" juice occur on your chart.
  • Customizable Sensitivity: The logic is highly adjustable. You can modify the lookback period (how much historical data the tool considers), the specific numerical thresholds for the alerts, and the spacing of the visual level lines to suit different currency pairs or trading styles.

Alert System

The script features a built-in notification system designed to keep traders informed without requiring constant manual monitoring. It is specifically programmed to trigger a pop-up alert when "Good Juice" (high volatility) is detected.

Notably, the script includes a built-in check for the timeframe; it identifies that its primary logic is optimized for the 15-minute chart. If used on other timeframes, it will notify the user of this recommendation to ensure the data remains as accurate as intended by the developer.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
12 Views
0 Downloads
0 Favorites
JuiceLevelsAlertNew
//+------------------------------------------------------------------+
//|                                                        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  LawnGreen
#property  indicator_color2  OrangeRed
#property indicator_color3 Yellow
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- indicator parameters
extern bool DoAlerts = true;
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;
double Juice;
double last;


//+------------------------------------------------------------------+
//| 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();
   static datetime lastPriceAlertedBar=0;
   int barToCheck;
   
//---- 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(last == 0 && Period() != 15) {Alert("Please note, Juice Alert only works with timeframe 15");last=1;}
      if (last !=Juice && Juice >= thresholdLevelPoint && Period() == 15 && lastPriceAlertedBar != iTime(NULL,0,barToCheck))
      {
            Alert("Juice above ",thresholdLevel," for ", Symbol()," on ",Period());
            lastPriceAlertedBar = iTime(NULL,0,barToCheck);
            last=Juice;
      }
   }
      
//---- done
   return(0);
  }
//+------------------------------------------------------------------+

Comments