dzani9_Elliotwave_confirmation

Download script
Author: dzani9@yahoo.co.uk
dzani9_Elliotwave_confirmation

This tool is designed to provide visual confirmation for price trends by identifying specific "crossover" moments between two moving averages. It acts as a signaling system that helps traders spot when momentum is shifting from one direction to another.

How it Works

The logic operates by monitoring two different mathematical averages of the market price (a "Faster" average and a "Slower" average). By comparing these two lines, the script identifies the exact moment they intersect:

  • Trend Shifts: The tool looks for the precise point where the faster moving average moves from being below the slower average to above it (or vice versa).
  • Momentum Confirmation: To ensure the signal is reliable and not just a momentary flicker, the script validates the movement by checking the positions of the averages before and after the current price point. It confirms that a definitive "cross" has occurred.

Visual Signals

When the logic detects these shifts, it places visual markers directly on your chart:

  • Upward Signal: When the faster average crosses above the slower average, indicating potential upward momentum, a green arrow appears below the price candles.
  • Downward Signal: When the faster average crosses below the slower average, indicating potential downward momentum, a red arrow appears above the price candles.

Smart Positioning

The script doesn't just place these markers randomly; it calculates the "range" (the typical distance between high and low prices over the last 10 bars). It uses this measurement to ensure that the arrows are displayed at a consistent, readable distance from the candles, keeping your chart clean and easy to interpret.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
7 Views
0 Downloads
0 Favorites
dzani9_Elliotwave_confirmation
//+------------------------------------------------------------------+
//|                               dzani9_Elliotwave_confirmation.mq4 |
//|                                               dzani9@yahoo.co.uk |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "dzani9@yahoo.co.uk"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 SpringGreen
#property indicator_color2 Red

double CrossUp[];
double CrossDown[];
extern int FasterEMA = 5;
extern int SlowerEMA = 6;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   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 fasterEMAnow, slowerEMAnow, fasterEMAprevious, slowerEMAprevious, fasterEMAafter, slowerEMAafter;
   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;
       
      fasterEMAnow = iMA(NULL, 0, FasterEMA, 0, MODE_LWMA, PRICE_CLOSE, i);
      fasterEMAprevious = iMA(NULL, 0, FasterEMA, 0, MODE_LWMA, PRICE_CLOSE, i+1);
      fasterEMAafter = iMA(NULL, 0, FasterEMA, 0, MODE_LWMA, PRICE_CLOSE, i-1);

      slowerEMAnow = iMA(NULL, 0, SlowerEMA, 0, MODE_LWMA, PRICE_CLOSE, i);
      slowerEMAprevious = iMA(NULL, 0, SlowerEMA, 0, MODE_LWMA, PRICE_CLOSE, i+1);
      slowerEMAafter = iMA(NULL, 0, SlowerEMA, 0, MODE_LWMA, PRICE_CLOSE, i-1);
      
      if ((fasterEMAnow > slowerEMAnow) && (fasterEMAprevious < slowerEMAprevious) && (fasterEMAafter > slowerEMAafter)) {
         CrossUp[i] = Low[i] - Range*0.5;
      }
      else if ((fasterEMAnow < slowerEMAnow) && (fasterEMAprevious > slowerEMAprevious) && (fasterEMAafter < slowerEMAafter)) {
         CrossDown[i] = High[i] + Range*0.5;
      }
   }
   return(0);
}

Comments