2x5 MA CROSS WITH SOUND

Download script
Author: Copyright � 2005, Jason Robinson (jnrtrading)
2x5 MA CROSS WITH SOUND

This tool is designed to streamline the way traders identify trend reversals by highlighting specific "crossover" moments between two moving averages. While many traders use moving averages to smooth out price action, these lines can sometimes become cluttered or difficult to read when zoomed out or on busy charts. This script solves that problem by providing clear visual markers and instant notifications.

How the Logic Works

The core functionality of this tool revolves around monitoring the relationship between two different moving average types: a "Faster" average and a "Slower" average. By comparing these two indicators, the script identifies the exact moment their paths intersect.

Key features of the logic include:

  • Dynamic Crossover Detection: The script constantly scans historical price data to find points where the Faster moving average passes through the Slower moving average.
    • Bullish Signal (Buy): When the Faster moving average moves from below to above the Slower moving average, the script identifies a potential upward trend.
    • Bearish Signal (Sell): When the Faster moving average drops from above to below the Slower moving average, it identifies a potential downward trend.
  • Visual Mapping: Instead of making you squint at overlapping lines, the script places clear symbols (arrows) directly on your chart at the precise point of the crossover. These are positioned slightly above or below the price candles to ensure they remain visible and easy to spot.
  • Intelligent Alerting: To ensure you don't miss an opportunity, the script includes an automated notification system. When a crossover occurs in real-time, it triggers a pop-up alert on your trading platform. It is programmed with "smart" logic to ensure that it only notifies you once per candle, preventing repetitive alerts during high-volatility moments.
  • Adaptive Spacing: The tool calculates the average range of recent price movement (the distance between highs and lows) to determine exactly where to place its markers. This ensures that the visual signals are perfectly spaced relative to how much the market is currently moving.

Summary for the Trader

Essentially, this tool acts as a high-precision "scout." It watches the technical interaction between two different mathematical averages and pings you the moment they cross paths, allowing you to identify potential entry points quickly without having to manually track every price movement on your screen.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
12 Views
0 Downloads
0 Favorites
2x5 MA CROSS WITH SOUND
//+------------------------------------------------------------------+
//|                                         EMA-Crossover_Signal.mq4 |
//|         Copyright © 2005, Jason Robinson (jnrtrading)            |
//|                   http://www.jnrtading.co.uk                     |
//+------------------------------------------------------------------+

/*
  +------------------------------------------------------------------+
  | Allows you to enter two ema periods and it will then show you at |
  | Which point they crossed over. It is more usful on the shorter   |
  | periods that get obscured by the bars / candlesticks and when    |
  | the zoom level is out. Also allows you then to remove the emas   |
  | from the chart. (emas are initially set at 5 and 6)              |
  +------------------------------------------------------------------+
*/   
#property copyright "Copyright © 2005, Jason Robinson (jnrtrading)"
#property link      "http://www.jnrtrading.co.uk"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red

double CrossUp[];
double CrossDown[];
extern int FasterMode = 3; //0=sma, 1=ema, 2=smma, 3=lwma
extern int FasterMA =   2;
extern int SlowerMode = 3; //0=sma, 1=ema, 2=smma, 3=lwma
extern int SlowerMA =   5;
 double alertTag;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW,0,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);

   SetIndexStyle(1, DRAW_ARROW,0,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int limit, i, counter;
   double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, 
fasterMAafter, slowerMAafter;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
//---- 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;
   
   for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
       
      fasterMAnow =      iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);
      fasterMAprevious = iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);
      fasterMAafter =    iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);

      slowerMAnow =      iMA(NULL, 0, SlowerMA, 1, SlowerMode, PRICE_OPEN, i);
      slowerMAprevious = iMA(NULL, 0, SlowerMA, 1, SlowerMode, PRICE_OPEN, i+1);
      slowerMAafter =    iMA(NULL, 0, SlowerMA, 1, SlowerMode, PRICE_OPEN, i-1);
      
      if ( (fasterMAnow > slowerMAnow) && (fasterMAprevious < slowerMAprevious) && (fasterMAafter > slowerMAafter)) 
      {
         CrossUp[i] = Low[i] - Range*0.5;
         if ( alertTag!=Time[0])
         {
          //PlaySound("news.wav");// buy wav
          Alert(Symbol(),"  M",Period()," MA cross BUY");
         }
          alertTag = Time[0];
      }
      else if ((fasterMAnow < slowerMAnow) && (fasterMAprevious > slowerMAprevious) && (fasterMAafter < slowerMAafter)) 
      {
         CrossDown[i] = High[i] + Range*0.5;
         if ( alertTag!=Time[0])
         {
          //PlaySound("news.wav"); //sell wav
           Alert(Symbol(),"  M",Period()," MA cross SELL");
         }
          alertTag = Time[0];
      }
   }
   return(0);
}


       

Comments