MA_Crossover_Signal_With_wav_v3
Download scriptThis tool is designed for traders who use Moving Averages (MA) to identify trends in the financial markets. Its primary purpose is to automatically detect and highlight the exact moment when two different moving averages cross paths, which often signals a potential shift in market momentum.
Core Functionality
The script tracks two distinct moving averages simultaneously: a "Faster" one and a "Slower" one. Because these lines can sometimes be difficult to see clearly on a busy chart—especially when zoomed out or obscured by price candles—this tool serves as a visual confirmation system. It identifies the specific point of intersection and places clear markers on your chart so you don't have to guess where the crossover occurred.
How the Logic Works
The script constantly monitors the relationship between the two moving averages by looking at three consecutive data points: the current bar, the previous bar, and the next bar in the sequence.
- Buy Signals (Bullish Cross): The tool looks for a specific pattern where the Faster Moving Average moves from below the Slower Moving Average to above it. When this happens, the script places a visual marker below the price candle and triggers an audible alert and a popup notification.
- Sell Signals (Bearish Cross): Conversely, if the Faster Moving Average moves from above the Slower Moving Average to below it, the tool recognizes this as a downward shift. It then places a visual marker above the price candle along with the corresponding alert.
Key Features for Traders
- Dynamic Positioning: To ensure the markers are always visible and don't overlap with the candles, the script calculates the average range of recent price movement (the distance between highs and lows). It uses this data to place the Buy and Sell arrows at a consistent, professional distance from the price.
- Smart Notifications: The logic includes a "tagging" system that ensures you are only alerted once per crossover event. This prevents the script from sending multiple redundant alerts for the same signal during a single time period.
- Customizable Smoothing: While the script provides default settings, it is built to be flexible, allowing users to choose between different types of moving averages (such as Simple, Exponential, or Weighted) to suit their specific trading style.
In essence, this tool acts as an automated "scout," scanning your chart to highlight trend changes instantly, allowing you to make faster decisions without having to manually watch the lines for every minor movement.
/*-----------------------------+
| |
| 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 Lime
#property indicator_color2 Red
double CrossUp[];
double CrossDown[];
extern int FasterMode = 1; //0=sma, 1=ema, 2=smma, 3=lwma
extern int FasterMA = 13;
extern int SlowerMode = 1; //0=sma, 1=ema, 2=smma, 3=lwma
extern int SlowerMA = 25;
double alertTag;
//+------------------------------------------------------------------+
//| 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 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, 0, SlowerMode, PRICE_CLOSE,
i);
slowerMAprevious = iMA(NULL, 0, SlowerMA, 0, SlowerMode,
PRICE_CLOSE, i+1);
slowerMAafter = iMA(NULL, 0, SlowerMA, 0, SlowerMode,
PRICE_CLOSE, 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