JuiceLevelsAlertNew_v1

Download script
JuiceLevelsAlertNew_v1

This tool is designed as a visual momentum and volatility tracker for trading platforms. It analyzes price action to help traders identify different "quality" levels of market movement by categorizing current market activity into three distinct categories.

Core Logic and Functionality

The script works by calculating the statistical deviation of the market price over a specific moving average period. Instead of just showing a single line, it evaluates these fluctuations and sorts them into three visual categories represented by different colors:

  • High-Quality Momentum (Lime Green): This category identifies periods where volatility exceeds a user-defined high threshold. It highlights strong, significant movements in the market.
  • Neutral/Average Activity (Yellow): This represents "middle-ground" market behavior. When the market is moving but doesn't meet the intensity of the high threshold or fall into the low category, it is classified as "SoSo" activity.
  • Low/Weak Momentum (FireBrick): This identifies periods where volatility falls below a specific low level, highlighting sluggish or stagnant price action.

Visual Features

To make the data easier to interpret, the tool includes several visual aids:

  • Histogram Display: The data is displayed in a separate window as a histogram, making it easy to see at a glance which "zone" the market currently occupies.
  • Reference Levels: The script can draw horizontal dashed lines on the indicator window. These serve as visual benchmarks, allowing traders to see exactly how close the current price action is to crossing into a different category of momentum.
  • Customizable Sensitivity: Users can adjust several parameters, including the look-back period (how much historical data to consider), the specific thresholds for "High" and "Low" activity, and the spacing of the visual reference lines.

Alert System

For active traders, the script includes an optional notification system. If the market crosses above a specific intensity threshold on a designated timeframe, the software can trigger an audible sound and a pop-up alert. This is intended to capture the user's attention the moment the market shifts into a high-volatility state.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt plays sound alerts
11 Views
0 Downloads
0 Favorites
JuiceLevelsAlertNew_v1
//+------------------------------------------------------------------+
//|                                                        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 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;
   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 (Juice >= thresholdLevelPoint && Period() == 5 && lastPriceAlertedBar != iTime(NULL,0,barToCheck))
      {
            Alert("Juice above ",thresholdLevel," for ", Symbol());
            PlaySound("Tick.wav");
            lastPriceAlertedBar = iTime(NULL,0,barToCheck);
      }
   }
      
//---- done
   return(0);
  }
//+------------------------------------------------------------------+

Comments