//+------------------------------------------------------------------+ //| MACDBars.mq4 modified from | //| mtt-ErgodicMACD.mq4 | //| Copyright © 2004-07, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004-07, mietectec" #property link "" //---- indicator settings #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red #property indicator_width1 4 #property indicator_width2 4 #property indicator_minimum 0 #property indicator_maximum 1 // MACD extern string note1 = "Chart Time Frame"; extern string note2 = "0=current time frame"; extern string note3 = "1=M1, 5=M5, 15=M15, 30=M30"; extern string note4 = "60=H1, 240=H4, 1440=D1"; extern string note5 = "10080=W1, 43200=MN1"; extern int TimeFrame = 0; extern string note6 = "MACD settings"; extern int FastEma = 12; extern int SlowEma = 26; extern int SignalSMMA = 9; extern string note7 = "0=Close,1=Open,2=High,3=Low"; extern string note8 = "4=Median Price,5=Typical Price"; extern string note9 = "6=Weighted Price"; extern int PriceField = 0; //extern string note10 = "Alert when cross over or down zero"; bool PopUpAlert=true; bool EmailAlert=false; extern string note11 = "Numbers of bars to calculate"; extern int MaximumBars=196; //---- indicator buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; string AlertPrefix; string GetTimeFrameStr() { switch(TimeFrame) { case 1 : string TimeFrameStr="M1"; break; case 5 : TimeFrameStr="M5"; break; case 10 : TimeFrameStr="M10"; break; case 15 : TimeFrameStr="M15"; break; case 30 : TimeFrameStr="M30"; break; case 60 : TimeFrameStr="H1"; break; case 120 : TimeFrameStr="H2"; break; case 240 : TimeFrameStr="H4"; break; case 480 : TimeFrameStr="H8"; break; case 1440 : TimeFrameStr="D1"; break; case 10080 : TimeFrameStr="W1"; break; case 43200 : TimeFrameStr="MN1"; break; default : TimeFrameStr=Period(); break; } return (TimeFrameStr); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,4,indicator_color1); SetIndexBuffer(0,ExtMapBuffer1); SetIndexLabel(0,"BuyZone"); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,4,indicator_color2); SetIndexBuffer(1,ExtMapBuffer2); SetIndexLabel(1,"SellZone"); if (TimeFrame == 0) TimeFrame = Period(); IndicatorShortName(GetTimeFrameStr() + " MACD ("+FastEma+","+SlowEma+","+SignalSMMA+")"); IndicatorDigits(0); AlertPrefix=Symbol()+" ("+GetTimeFrameStr()+"): "; return(0); } //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ /* bool NewBar() { static datetime lastbar; datetime curbar = Time[0]; if(lastbar!=curbar) { lastbar=curbar; return (true); } else { return(false); } } */ //+------------------------------------------------------------------+ int start() { datetime TimeArray[]; int i, banzai, crossupzero, crossdownzero; crossupzero =0; crossdownzero=0; for (i=0, banzai=0; i<MaximumBars; i++) { ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); if (Time[i]<TimeArray[banzai]) banzai++; double indMacdMain0 = iMACD(NULL,TimeFrame,FastEma, SlowEma, SignalSMMA,PriceField,0,banzai); double indMacdSignal0 = iMACD(NULL,TimeFrame,FastEma, SlowEma, SignalSMMA,PriceField,1,banzai); if (indMacdMain0 >= indMacdSignal0) { ExtMapBuffer1[i] = 1; ExtMapBuffer2[i] = 0; crossupzero = crossupzero + 1; crossdownzero=0; } else if (indMacdMain0 < indMacdSignal0 ) { ExtMapBuffer2[i] = 1; ExtMapBuffer1[i] = 0; crossdownzero = crossdownzero + 1; crossupzero =0; } /* if (PopUpAlert && NewBar ()) { if (crossupzero == 1 && NewBar ()) Alert(crossupzero+AlertPrefix+" MACD ("+FastEma+","+SlowEma+","+SignalSMMA+") crosses UP zero\nBUY signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime())); if (crossdownzero == 1 && NewBar ()) Alert(AlertPrefix+" MACD ("+FastEma+","+SlowEma+","+SignalSMMA+") crosses DOWN zero\nSELL signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime())); } if (EmailAlert) { if (crossupzero == 1) Alert(AlertPrefix+" MACD ("+FastEma+","+SlowEma+","+SignalSMMA+") crosses UP zero\nBUY signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime())); if (crossdownzero == 1) Alert(AlertPrefix+" MACD ("+FastEma+","+SlowEma+","+SignalSMMA+") crosses DOWN zero\nSELL signal @ Ask = $",Ask,"; Bid = $",Bid,"\nDate & Time = ",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime())); } */ } 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
Indicators Used:
MACD Histogram
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen