Doda-EMA
Download scriptThis script is a technical analysis tool designed for the MetaTrader platform to help traders identify potential entry and exit points in financial markets. It operates by monitoring the relationship between three different Exponential Moving Averages (EMA) of varying timeframes: the 7-period, 14-period, and 21-period averages.
Core Logic Overview
The script functions by analyzing the "stacking" or "crossover" order of these three moving averages to determine market momentum. Instead of looking at just one price point, it looks at how fast and slow trends are interacting with one another.
Market Signals
The tool translates specific mathematical alignments into four distinct types of alerts:
- Buy Signals (Long): The script looks for a bullish trend where the fastest moving average (7) is higher than the medium (14), and the medium is higher than the slowest (21). This indicates accelerating upward momentum.
- Sell Signals (Short): Conversely, it identifies bearish trends when the slowest moving average (21) is the highest, followed by the medium (14), with the fastest (7) at the bottom. This suggests downward momentum.
- Exit Signals: The script also monitors for "exhaustion" or trend shifts. It provides specific instructions to close a long position when the averages begin to converge or flip order in a bearish direction, and it provides a similar instruction to close a short position when the averages begin to align in a bullish direction.
Visual and Audio Notifications
To ensure the trader doesn't miss these opportunities, the script performs several actions automatically:
- Real-Time Alerts: When the specific conditions for a Buy, Sell, or Exit are met, the script triggers a pop-up alert on the trading screen, clearly stating the action to take and the current price.
- On-Screen Display: It creates text labels directly on the chart to show the status of the last signal (e.g., "Go Long" or "Exit Short") along with the specific price point.
- Dynamic Chart Markers: When a primary signal is triggered, the script draws horizontal and vertical dotted lines on the chart. These markers act as visual anchors, highlighting the exact price and time where the trend shift was first detected.
- Color Coding: The script uses a color-coded system to make information easy to read at a glance: Green is utilized for bullish/long actions, Red for bearish/short actions, and Indigo for exit instructions.
In summary, this tool automates the tedious process of watching multiple moving average lines simultaneously, converting complex trend data into clear "Buy," "Sell," and "Exit" notifications with visual markers on your chart.
//+------------------------------------------------------------------+
//| Doda-EMA.mq4 |
//| Copyright © 2010, Gopal Krishan Doda |
//| http://www.DodaCharts.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Gopal Krishan Doda"
#property link "http://www.DodaCharts.com"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
//extern int 0 = 0;
double myadxvalue;
double ema7, ema14, ema21;
string emaresult, emaresultexit;
bool EMABuyAlert=false, EMASellAlert=false, EMAExitLong=false, EMAExitShort=false, EMABuy = false, EMASell = false, EMABuyExit=False, EMASellExit=False;
double myatr, mystd,EMAtempvar,EMAtempvarexit;
string atrresult;
int counted_bars;
int ii;
int EMALastSignal;
double mainvar;
datetime adxtime;
int init()
{
//---- indicators
//----
ObjectCreate("myema",OBJ_LABEL,0,0,0);
ObjectCreate("myemaexit",OBJ_LABEL,0,0,0);
ObjectCreate("mywebsite",OBJ_LABEL,0,0,0);
//ObjectCreate("myatr",OBJ_LABEL,0,0,0);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("myema");
ObjectDelete("myemaexit");
ObjectDelete("mywebsite");
//ObjectDelete("myatr");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
string MyMessage1 = Symbol()+" M"+Period();
int counted_bars=IndicatorCounted();
//----
counted_bars=IndicatorCounted();
ii = Bars - 1;
counted_bars = IndicatorCounted();
if ( counted_bars > 1 )
ii = Bars - counted_bars - 1;
while ( ii >= 1 )
{
ema7 = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,ii);
ema14 = iMA(NULL,0,14,0,MODE_EMA,PRICE_CLOSE,ii);
ema21 = iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,ii);
//mainvar = iStochastic(NULL,PERIOD_M30,20,10,20,MODE_SMMA,1,MODE_SIGNAL,ii);
if ( ema7 > ema14 && ema7 > ema21 && ema14 > ema21 && EMABuy==False )
{
emaresult = "Go Long @";
EMAtempvar = iClose(NULL,0,ii);
adxtime = iTime(NULL,0,ii);
EMALastSignal = 1;
EMABuy = True;
EMASell = False;
}
////
/// when to exit long
if ( ema14 > ema7 && ema14 > ema21 && ema21 > ema7 && EMABuyExit==False )
{
emaresultexit = "Exit long @";
EMAtempvarexit = iClose(NULL,0,ii);
EMALastSignal = 11;
EMABuyExit = True;
EMASellExit = False;
}
///
// when to go short
if ( ema21 > ema7 && ema21 > ema14 && ema14 > ema7 && EMASell==False )
{
emaresult = "Go Short @";
EMAtempvar = iClose(NULL,0,ii);
adxtime = iTime(NULL,0,ii);
EMALastSignal = 2;
EMASell = True;
EMABuy = False;
}
//
//when to exit short
if ( ema7 > ema14 && ema7 < ema21 && EMASellExit==False )
{
emaresultexit = "Exit short @";
EMAtempvarexit = iClose(NULL,0,ii);
EMALastSignal = 22;
EMASellExit = true;
EMABuyExit = False;
}
ii--;
} //end of while loop
/// when to go long
if (EMALastSignal==1 && EMABuyAlert==false)
{
Alert(MyMessage1+" :Doda-EMA Says Buy"+" at "+DoubleToStr(EMAtempvar ,Digits));
EMABuyAlert=true;
EMASellAlert=false;
EMAExitLong=false;
EMAExitShort=false;
}
if (EMALastSignal==11 && EMAExitLong==false)
{
Alert(MyMessage1+" :Doda-EMA Says Exit Buy"+" at "+DoubleToStr(EMAtempvarexit,Digits));
EMABuyAlert=false;
EMASellAlert=false;
EMAExitLong=true;
EMAExitShort=false;
}
if (EMALastSignal==2 && EMASellAlert==false )
{
Alert(MyMessage1+" :Doda-EMA Says Sell"+" at "+DoubleToStr(EMAtempvar,Digits));
EMABuyAlert=false;
EMASellAlert=true;
EMAExitLong=false;
EMAExitShort=false;
}
if (EMALastSignal==22 && EMAExitShort==false )
{
Alert(MyMessage1+" :Doda-EMA Says Exit Sell"+" at "+DoubleToStr(EMAtempvarexit,Digits));
EMABuyAlert=false;
EMASellAlert=false;
EMAExitLong=false;
EMAExitShort=true;
}
if (EMALastSignal ==1)
{
ObjectSetText("myema",StringConcatenate("EMA: ", emaresult, " ", DoubleToStr(EMAtempvar ,Digits)," (", ((Close[0]-EMAtempvar)/Point)/10, ")" ), 10, "Arial", Green);
ObjectDelete("myHline3");
ObjectDelete("myVline3");
ObjectCreate("myHline3", OBJ_HLINE, 0, adxtime, EMAtempvar, 0, 0);
ObjectCreate("myVline3", OBJ_VLINE, 0, adxtime, EMAtempvar, 0, 0);
ObjectSet("myHline3", OBJPROP_COLOR, Lime);
ObjectSet("myVline3", OBJPROP_COLOR, Lime);
ObjectSet("myVline3", OBJPROP_STYLE, STYLE_DOT);
ObjectSet("myHline3", OBJPROP_STYLE, STYLE_DOT);
}
if (EMALastSignal ==2)
{
ObjectSetText("myema",StringConcatenate("EMA: ", emaresult, " ", DoubleToStr(EMAtempvar ,Digits)," (", ((EMAtempvar-Close[0])/Point)/10, ")" ), 10, "Arial", Red);
ObjectDelete("myHline3");
ObjectDelete("myVline3");
ObjectCreate("myHline3", OBJ_HLINE, 0, adxtime, EMAtempvar, 0, 0);
ObjectCreate("myVline3", OBJ_VLINE, 0, adxtime, EMAtempvar, 0, 0);
ObjectSet("myHline3", OBJPROP_COLOR, Red);
ObjectSet("myVline3", OBJPROP_COLOR, Red);
ObjectSet("myHline3", OBJPROP_STYLE, STYLE_DOT);
ObjectSet("myVline3", OBJPROP_STYLE, STYLE_DOT);
}
ObjectSet("myema",OBJPROP_XDISTANCE,2);
ObjectSet("myema",OBJPROP_YDISTANCE,68);
ObjectSet("myema", OBJPROP_CORNER, 3);
ObjectSetText("myemaexit",StringConcatenate("EMA: ", emaresultexit, " ", DoubleToStr(EMAtempvarexit ,Digits)), 10, "Arial", Indigo);
ObjectSet("myemaexit",OBJPROP_XDISTANCE,2);
ObjectSet("myemaexit",OBJPROP_YDISTANCE,86);
ObjectSet("myemaexit", OBJPROP_CORNER, 3);
ObjectSetText("mywebsite","Doda-EMA by www.DodaCharts.com", 10, "Arial", Navy);
ObjectSet("mywebsite",OBJPROP_XDISTANCE,2);
ObjectSet("mywebsite",OBJPROP_YDISTANCE,104);
ObjectSet("mywebsite", OBJPROP_CORNER, 3);
//----
return(0);
}
//+------------------------------------------------------------------+
Comments