//compile// //+------------------------------------------------------------------+ //| MACD_ColorHist_Alert.mq4 | //| Copyright © 2006, Robert Hill | //| | //Could you give me a price for taking your MACD Color Hist Alert (attached) // and changing it so that the histogram bars change color when they // switch from expanding to contracting (and visa versa) // and also popup an alert that this has happened, // as well as add an extra alert (popup and email) when the signal line // goes thru 0 along with a text message on the chart // that says "the trend has changed to up/down" as the case may be. //The attached JRSX histograms change color the way I like. // Perhaps you could add the same alerts as per above to this one as well. //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Robert Hill" //---- indicator settings #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Aqua #property indicator_color2 Red #property indicator_color3 Green #property indicator_color4 Red //---- indicator parameters extern bool SoundON=true; extern bool EmailON=false; extern int FastEMA=12; extern int SlowEMA=26; extern int SignalSMA=9; //---- indicator buffers double MACD_buffer[]; double Signal_buffer[]; double HistogramBufferUp[]; double HistogramBufferDown[]; bool HistAboveZero = false; bool HistBelowZero = false; bool MACDAboveZero = false; bool MACDBelowZero = false; //---- variables //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings // IndicatorBuffers(3); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID); SetIndexBuffer(0,MACD_buffer); SetIndexDrawBegin(0,SlowEMA); SetIndexStyle(1,DRAW_LINE,STYLE_DOT); SetIndexBuffer(1,Signal_buffer); SetIndexDrawBegin(1,SignalSMA); SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID); SetIndexBuffer(2,HistogramBufferUp); SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID); SetIndexBuffer(3,HistogramBufferDown); // SetIndexDrawBegin(2,SlowEMA + SignalSMA); //---- name for DataWindow and indicator subwindow label IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")"); SetIndexLabel(0,"MACD"); SetIndexLabel(1,"Signal"); SetIndexLabel(2,"Histogram"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Moving Averages Convergence/Divergence | //+------------------------------------------------------------------+ int start() { int limit; double current, prev; 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; //---- macd counted in the 1-st buffer for(int i=0; i<limit; i++) MACD_buffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); //---- signal line counted in the 2-nd buffer for(i=0; i<limit; i++) Signal_buffer[i]=iMAOnArray(MACD_buffer,Bars,SignalSMA,0,MODE_SMA,i); for(i=0; i<limit; i++) { HistogramBufferUp[i] = 0; HistogramBufferDown[i] = 0; current = MACD_buffer[i] - Signal_buffer[i]; prev = MACD_buffer[i+1] - Signal_buffer[i+1]; if (current > prev) { HistogramBufferUp[i] = current; HistogramBufferDown[i] = 0.0; } else { HistogramBufferDown[i] = current; HistogramBufferUp[i] = 0.0; } if (MACDAboveZero) Comment ("\nThe trend has changed to UP"); if (MACDBelowZero) Comment ("\nThe trend has changed to DOWN"); if (i == 1) { // Check for Histogram crossing 0 line if (HistogramBufferUp[i] > 0 && HistogramBufferDown[i + 1] < 0) { // Cross up if (HistAboveZero == false) { HistAboveZero=true; HistBelowZero=false; if (SoundON) Alert("MACD Histogram Crossed up","\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()); if (EmailON) SendMail("MACD Histogram Crossed up", "MACD Crossed up, Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()); } } else if (HistogramBufferDown[i] < 0 && HistogramBufferUp[i + 1] > 0) { // Cross down if (HistBelowZero == false) { HistBelowZero=true; HistAboveZero=false; if (SoundON) Alert("MACD Histogram Crossed down","\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()); if (EmailON) SendMail("MACD Histogram Crossed down","MACD Crossed Down, Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()); } } // Check for MACD Signal line crossing 0 line if (Signal_buffer[i] > 0 && Signal_buffer[i + 1] < 0) { // Cross up if (MACDAboveZero == false) { MACDAboveZero=true; MACDBelowZero=false; if (SoundON) Alert("MACD Signal line Crossed up","\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()); if (EmailON) SendMail("MACD Signal line Crossed up", "MACD Crossed up, Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()); } } else if (Signal_buffer[i] < 0 && Signal_buffer[i + 1] > 0) { // Cross down if (MACDBelowZero == false) { MACDBelowZero=true; MACDAboveZero=false; if (SoundON) Alert("MACD Signal line Crossed down","\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()); if (EmailON) SendMail("MACD Signal line Crossed down","MACD Crossed Down, Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()); } } } } //---- done return(0); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_HISTOGRAM
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen
It sends emails