//+------------------------------------------------------------------+ //| eSignal.mq4 | //| Copyright © 2007, Hartono Setiono | //| http://www.mitrakom.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, Hartono Setiono" #property link "http://www.mitrakom.com" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_width1 4 #property indicator_color2 Lime #property indicator_width2 4 #property indicator_color3 Blue #property indicator_width3 4 //#property indicator_color4 Silver //#property indicator_width4 1 //---- input parameters extern int TimeFrame=0; extern int EMA_Period=13; extern int MACD_FastPeriod=12; extern int MACD_SlowPeriod=26; extern int MACD_SignalPeriod=9; extern bool UseMT4MACD=false; extern int DisplayType=1; extern string N1="DisplayType Setting:"; extern string N2="1:Bar/Histogram Only"; extern string N3="2:Bar as MACD Histogram"; extern string N4="3:Bar as OSMA Histogram"; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double MACDLineBuffer[]; double MACDSignalLineBuffer[]; double MACDHistogramBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; IndicatorBuffers(6); //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); //SetIndexArrow(0,110); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); //SetIndexArrow(1,110); SetIndexBuffer(1,ExtMapBuffer2); SetIndexStyle(2,DRAW_HISTOGRAM); //SetIndexArrow(2,110); SetIndexBuffer(2,ExtMapBuffer3); /* if(DisplayType==2) { SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,MACDSignalLineBuffer); } */ SetIndexEmptyValue(3,0.0); SetIndexBuffer(3,MACDSignalLineBuffer); SetIndexEmptyValue(4,0.0); SetIndexBuffer(4,MACDLineBuffer); SetIndexEmptyValue(5,0.0); SetIndexBuffer(5,MACDHistogramBuffer); switch(TimeFrame) { case 1 : short_name="Period_M1"; break; case 5 : short_name="Period_M5"; break; case 15 : short_name="Period_M15"; break; case 30 : short_name="Period_M30"; break; case 60 : short_name="Period_H1"; break; case 240 : short_name="Period_H4"; break; case 1440 : short_name="Period_D1"; break; case 10080 : short_name="Period_W1"; break; case 43200 : short_name="Period_MN1"; break; default : {short_name="Current Timeframe"; TimeFrame=0;} } short_name="Impulse Indicator("+short_name+", "+EMA_Period+":"+MACD_FastPeriod+","+MACD_SlowPeriod+","+MACD_SignalPeriod+")"; IndicatorShortName(short_name); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL); SetIndexLabel(3,NULL); //SetIndexLabel(4,NULL); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,limit,y=0,counted_bars=IndicatorCounted(); double ema1, main1, signal1, ema0, main0, signal0, macd1, macd0, main; double alpha = 2.0 / (MACD_SignalPeriod + 1.0); double alpha_1 = 1.0 - alpha; double BarValue; limit=Bars-counted_bars; for(i=limit-1; i >= 0; i--) { y = iBarShift(NULL,TimeFrame,Time[i]); ema0=iMA(NULL,TimeFrame,EMA_Period,0,MODE_EMA,PRICE_CLOSE,y); ema1=iMA(NULL,TimeFrame,EMA_Period,0,MODE_EMA,PRICE_CLOSE,y+1); if(UseMT4MACD) { main0=iMACD(NULL, TimeFrame, MACD_FastPeriod, MACD_SlowPeriod, MACD_SignalPeriod, PRICE_CLOSE,0,y); main1=iMACD(NULL, TimeFrame, MACD_FastPeriod, MACD_SlowPeriod, MACD_SignalPeriod, PRICE_CLOSE,0,y+1); signal0=iMACD(NULL, TimeFrame, MACD_FastPeriod, MACD_SlowPeriod, MACD_SignalPeriod, PRICE_CLOSE,1,y); signal1=iMACD(NULL, TimeFrame, MACD_FastPeriod, MACD_SlowPeriod, MACD_SignalPeriod, PRICE_CLOSE,1,y+1); main=main0; macd0=main0-signal0; macd1=main1-signal1; } else { MACDLineBuffer[y] = iMA(NULL,TimeFrame,MACD_FastPeriod,0,MODE_EMA,PRICE_CLOSE,y)- iMA(NULL,TimeFrame,MACD_SlowPeriod,0,MODE_EMA,PRICE_CLOSE,y); MACDSignalLineBuffer[y]=(alpha*MACDLineBuffer[y]) + (alpha_1*MACDSignalLineBuffer[y+1]); MACDHistogramBuffer[y]=MACDLineBuffer[y]-MACDSignalLineBuffer[y]; main=MACDLineBuffer[y]; macd0=MACDHistogramBuffer[y]; macd1=MACDHistogramBuffer[y+1]; } switch(DisplayType) { case 1:BarValue=1; break; case 2:BarValue=main; break; case 3:BarValue=macd0; break; } if(ema0<ema1 && macd0<macd1) //both down { ExtMapBuffer1[i]=BarValue; ExtMapBuffer2[i]=0; ExtMapBuffer3[i]=0; } else if(ema0>ema1 && macd0>macd1) //both up { ExtMapBuffer1[i]=0; ExtMapBuffer2[i]=BarValue; ExtMapBuffer3[i]=0; } else //otherwise { ExtMapBuffer1[i]=0; ExtMapBuffer2[i]=0; ExtMapBuffer3[i]=BarValue; } } return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_LINE
Indicators Used:
Moving average indicator
MACD Histogram
Custom Indicators Used:
Order Management characteristics:
Other Features: