3 ma cross email_alert
Download scriptThis tool is designed for traders who use Moving Averages (MA) to identify trends in the financial markets. It simplifies a complex visual process by automatically identifying specific "crossover" moments where multiple trend lines align, providing clear signals on the chart and via real-time notifications.
Core Logic Overview
The script monitors three different Moving Averages simultaneously: a Fast line (reacts quickly to price changes), a Medium line, and a Slow line (represents the long-term trend). Instead of just looking for one line to cross another, this tool looks for a specific "confluence" or agreement between these three lines.
How the Signals Work
The indicator triggers a signal only when two specific conditions are met regarding the relationship between the Faster, Medium, and Slower averages:
-
Bullish Signal (Upward Trend): The tool looks for a moment where the Fast line crosses above the Slow line. However, to filter out "false" signals, it also checks that the Medium line is also positioned above the Slow line. Essentially, it confirms that both the short-term and medium-term momentum are moving in the same upward direction relative to the long-term trend.
-
Bearish Signal (Downward Trend): Conversely, for a downward signal, the tool identifies when the Fast line crosses below the Slow line, provided that the Medium line is also situated below the Slow line. This confirms that both faster speeds of price movement are cooperating in a downward direction.
Visual and Audible Feedback
To make these movements easy to see and act upon, the script performs three main actions:
- Visual Markers: It places specific arrows on your chart. These arrows appear at a calculated distance from the price candles (based on recent market volatility) so they do not overlap with the bars, making them easy to spot instantly.
- Real-Time Alerts: When a confirmed crossover happens in real-time, the script can trigger an audible sound alert directly on your trading platform.
- Email Notifications: If enabled, the tool can send an automated email notification to your registered device. These messages include the specific time of the cross and the name of the currency or asset being traded, allowing you to stay informed even when you are away from your computer.
Summary for the User
Instead of forcing you to watch three different lines constantly to see if they align, this script does the "heavy lifting" for you. It scans the history and the live market to find the exact moment where the faster trends "open up" above or below the slowest trend, marking those moments with arrows and notifying you immediately so you can make informed decisions faster.
// This is Not Tested , Use At Your Own Risk !
//+--------------------------------------------------------------------------+
//| 3 MA Cross w_Alert v2.mq4 |
//| Copyright © 2005, Jason Robinson (jnrtrading) |
//| http://www.jnrtading.co.uk |
//| 3 ma conversion and Alert , David Honeywell , transport.david@gmail.com |
//| http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/ |
//+--------------------------------------------------------------------------+
/*
+-------------------------------------------------------------------------------+
| Allows you to enter 3 ma periods and it will then show you and alert you at |
| which point the 2 faster ma's "OPEN" are both above or below the Slowest ma . |
+-------------------------------------------------------------------------------+
*/
#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 Aqua
#property indicator_color2 Coral
double CrossUp[];
double CrossDown[];
double prevtime;
double Range, AvgRange;
double fasterMAnow, fasterMAprevious, fasterMAafter;
double mediumMAnow, mediumMAprevious, mediumMAafter;
double slowerMAnow, slowerMAprevious, slowerMAafter;
extern int FasterMA = 5;
extern int FasterShift = -5;
extern int FasterMode = 1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int MediumMA = 20;
extern int MediumShift = -5;
extern int MediumMode = 1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int SlowerMA = 34;
extern int SlowerShift = 0;
extern int SlowerMode = 1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int SoundAlert = 1; // 0 = disabled
extern int EmailAlert = 1;
//+------------------------------------------------------------------+
//| 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;
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, FasterShift, FasterMode, PRICE_CLOSE, i+1);
fasterMAprevious = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i+2);
fasterMAafter = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i-1);
mediumMAnow = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i+1);
mediumMAprevious = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i+2);
mediumMAafter = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i-1);
slowerMAnow = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i+1);
slowerMAprevious = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i+2);
slowerMAafter = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i-1);
if ((fasterMAnow > slowerMAnow &&
fasterMAprevious <= slowerMAprevious &&
fasterMAafter > slowerMAafter &&
mediumMAnow > slowerMAnow )
||
(fasterMAnow > slowerMAnow &&
mediumMAnow > slowerMAnow &&
mediumMAprevious <= slowerMAprevious &&
mediumMAafter > slowerMAafter ))
{
CrossUp[i] = Low[i] - Range*0.5;
}
if ((fasterMAnow < slowerMAnow &&
fasterMAprevious >= slowerMAprevious &&
fasterMAafter < slowerMAafter &&
mediumMAnow < slowerMAnow )
||
(fasterMAnow < slowerMAnow &&
mediumMAnow < slowerMAnow &&
mediumMAprevious >= slowerMAprevious &&
mediumMAafter < slowerMAafter ))
{
CrossDown[i] = High[i] + Range*0.5;
}
}
if ((CrossUp[0] > 2000) && (CrossDown[0] > 2000)) { prevtime = 0; }
if ((CrossUp[0] == Low[0] - Range*0.5) && (prevtime != Time[0]))
{
prevtime = Time[0];
if (SoundAlert != 0)Alert(Symbol()," 3 MA Cross Up @ Hour ",Hour()," Minute ",Minute());
if (EmailAlert != 0) SendMail("BUY Alert for " + Symbol(), " 3 MA Cross Up @ Hour " + Hour() + " Minute " + Minute());
}
if ((CrossDown[0] == High[0] + Range*0.5) && (prevtime != Time[0]))
{
prevtime = Time[0];
if (SoundAlert != 0)Alert(Symbol()," 3 MA Cross Down @ Hour ",Hour()," Minute ",Minute());
if (EmailAlert != 0) SendMail("SELL Alert for " + Symbol(), " 3 MA Cross Down @ Hour " + Hour() + " Minute " + Minute());
}
//Comment(" CrossUp[0] ",CrossUp[0]," , CrossDown[0] ",CrossDown[0]," , prevtime ",prevtime);
//Comment("");
return(0);
}
Comments