EMA_5_10_34_Signal_v1

Download script
Author: Copyright � 2005, Jason Robinson (jnrtrading)
EMA_5_10_34_Signal_v1

This tool is designed to help traders identify specific momentum shifts in the market by tracking the interaction between three different Moving Averages (Fast, Medium, and Slow). Instead of cluttering your chart with lines that might become difficult to see during high volatility or when zoomed out, this script identifies the exact moment a "crossover" occurs and marks it clearly on your screen.

How the Logic Works

1. Multi-Layer Trend Analysis The tool monitors three distinct price averages simultaneously. By comparing these different timeframes—Fast, Medium, and Slow—the script attempts to filter out minor market "noise" and focus on meaningful trend changes. It looks for a specific mathematical alignment where the shorter-term trends move in harmony relative to the longer-term trend.

2. Identifying the "Crossover" The core logic focuses on the relationship between the Medium Moving Average and the Slow Moving Average.

  • Bullish Signals: The script looks for a moment where both the Fast and Medium averages are positioned above the Slow average, but specifically when the Medium average was previously below it. This suggests upward momentum is gaining strength.
  • Bearish Signals: Conversely, it looks for moments where both the Fast and Medium averages drop below the Slow average, following a point where they were previously above it. This suggests downward momentum is taking over.

3. Dynamic Visual Markers Rather than just drawing lines that might overlap with price candles, the script generates visual icons (arrows) at the precise point of the crossover:

  • Upward Arrows: Placed slightly below the price candle to signal a potential move upward.
  • Downward Arrows: Placed slightly above the price candle to signal a potential move downward.

4. Intelligent Spacing To ensure these markers are easy to read and don't overlap with the candles, the script calculates the "Average Range" of the market (the typical distance between highs and lows over the last 10 bars). It then uses this measurement to automatically offset the arrows, ensuring they remain visible and distinct from the price action.

Summary for the User

This tool simplifies your technical analysis by acting as a filter. It scans the data in the background, watches how different moving averages interact with one another, and alerts you visually only when specific trend conditions are met. This allows you to quickly spot potential entry or exit points without having to manually interpret multiple overlapping lines on your chart.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
7 Views
0 Downloads
0 Favorites
EMA_5_10_34_Signal_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                         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 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2

double CrossUp[];
double CrossDown[];
extern int FasterMA = 5;
extern int FasterMode  =    1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int MediumMA = 10;
extern int MediumMode  =    1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int SlowerMA = 34;
extern int SlowerMode  =    1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma

double Range, AvgRange;
double fasterMAnow, fasterMAprevious;
double mediumMAnow, mediumMAprevious;
double slowerMAnow, slowerMAprevious;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
   SetIndexEmptyValue(1,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int limit, i, counter;
   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);

      mediumMAnow      = iMA(NULL, 0, MediumMA, 0, MediumMode, PRICE_CLOSE, i);
      mediumMAprevious = iMA(NULL, 0, MediumMA, 0, MediumMode, PRICE_CLOSE, i+1);

      slowerMAnow = iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_CLOSE, i);
      slowerMAprevious = iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_CLOSE, i+1);
      
      CrossUp[i] = 0.0;
      CrossDown[i] = 0.0;
      if ((fasterMAnow > slowerMAnow) && (mediumMAnow > slowerMAnow) && (mediumMAprevious < slowerMAprevious) ) {
         CrossUp[i] = Low[i] - Range*0.5;
      }
      else if ((fasterMAnow < slowerMAnow) && (mediumMAnow < slowerMAnow) && (mediumMAprevious > slowerMAprevious) ) {
         CrossDown[i] = High[i] + Range*0.5;
      }
   }
   return(0);
}

Comments