EMA Crossover Signal+Email
Download scriptThis tool is designed to simplify market analysis by identifying specific moments when two different moving averages—commonly known as Exponential Moving Averages (EMAs)—cross paths. In trading, these crossovers are often used as signals to identify changes in trend direction.
Core Functionality
The script monitors two distinct speed settings for moving averages: a "Faster" average and a "Slower" average. By comparing these two lines, the tool detects exactly when the faster line moves from below the slower line to above it (indicating potential upward momentum), or from above the slower line to below it (indicating potential downward momentum).
Key Features
- Visual Signal Mapping: Instead of requiring you to squint at moving average lines that might overlap with price candles or become difficult to see when zoomed out, the script places clear visual markers (arrows) directly on your chart at the exact point of the crossover.
- Dynamic Positioning: The script calculates the recent volatility of the market to place these markers intelligently. It ensures the arrows appear slightly above or below the current price action so they remain clearly visible and do not obstruct the candles.
- Automated Alerts: To ensure you don't have to watch the charts constantly, the tool provides real-time notifications. When a crossover occurs on the most recent completed bar, it can trigger:
- Audio Alerts: An immediate sound notification through your platform.
- Email Notifications: A direct message sent to your registered email address, notifying you of the specific trend change and the currency pair involved.
Practical Use
The primary goal of this script is to remove the guesswork from technical analysis. By highlighting these transitions automatically, it allows traders to quickly identify entries or exits without having to manually track every movement of the moving average lines, making it particularly useful for those who prefer a clean chart layout.
//+------------------------------------------------------------------+
//| EMA-Crossover_Signal+Email.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 SeaGreen
#property indicator_color2 Red
double CrossUp[];
double CrossDown[];
extern int FasterEMA = 5;
extern int SlowerEMA = 50;
extern bool SoundON=true;
extern bool EmailON=true;
double alertTag;
double control=2147483647;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
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;
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_EMA, PRICE_CLOSE, i);
fasterEMAprevious = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
slowerEMAnow = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMAprevious = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
if ((fasterEMAnow > slowerEMAnow) && (fasterEMAprevious < slowerEMAprevious)) {
CrossUp[i] = Low[i] - Range*0.5;
if (i==1)
{
if (SoundON==true) Alert("EMA Cross Trend going Up on ",Symbol()," ",Period());
if (EmailON==true && alertTag!=Time[0]){
SendMail("EMA Cross Trend going Up on "+Symbol()+" ",Period());
alertTag = Time[0];
}
}
}
else if ((fasterEMAnow < slowerEMAnow) && (fasterEMAprevious > slowerEMAprevious)) {
CrossDown[i] = High[i] + Range*0.5;
if (i==1)
{
if (SoundON==true) Alert("EMA Cross Trend going Down on ",Symbol()," ",Period());
if (EmailON==true && i==1 && CrossUp[i] < CrossDown[i] && alertTag!=Time[0]){
SendMail("EMA Cross Trend going Up on "+Symbol()+" ",Period());
alertTag = Time[0];
}
}
}
}
return(0);
}
Comments