Hi, this is a heiken ashi alert indicator, which alerts after the candle has changed color, can anyone please make it to alert on current bar when color changes. Thanks in advance. Here is the code
//±-----------------------------------------------------------------+
//| Heiken Ashi.mq4 |
//| Copyright c 2004, MetaQuotes Software Corp. |
//| MetaTrader 5 Trading Platform / MetaQuotes Software Corp. |
//±-----------------------------------------------------------------+
//| For Heiken Ashi we recommend next chart settings ( press F8 or |
//| select on menu ‘Charts’->‘Properties…’): |
//| - On ‘Color’ Tab select ‘Black’ for ‘Line Graph’ |
//| - On ‘Common’ Tab disable ‘Chart on Foreground’ checkbox and |
//| select ‘Line Chart’ radiobutton |
//±-----------------------------------------------------------------+
#property copyright “Copyright © 2004, MetaQuotes Software Corp.”
#property link “http://www.metaquotes.net”#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Red
#property indicator_color4 White
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3//----
extern bool AlertSignal=true;
extern bool EmailMessage=true;extern color color1 = Red;
extern color color2 = White;
extern color color3 = Red;
extern color color4 = White;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//----
int ExtCountedBars=0;
datetime Timee;
//±-----------------------------------------------------------------+
//| Custom indicator initialization function |
//|------------------------------------------------------------------|
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexStyle(2,DRAW_HISTOGRAM, 0, 3, color3);
SetIndexBuffer(2, ExtMapBuffer3);
SetIndexStyle(3,DRAW_HISTOGRAM, 0, 3, color4);
SetIndexBuffer(3, ExtMapBuffer4);
//----
SetIndexDrawBegin(0,10);
SetIndexDrawBegin(1,10);
SetIndexDrawBegin(2,10);
SetIndexDrawBegin(3,10);
//---- indicator buffers mapping
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexBuffer(3,ExtMapBuffer4);
//---- initialization done
return(0);
}
//±-----------------------------------------------------------------+
//| Custom indicator deinitialization function |
//±-----------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here//----
return(0);
}
//±-----------------------------------------------------------------+
//| Custom indicator iteration function |
//±-----------------------------------------------------------------+
int start()
{
double haOpen, haHigh, haLow, haClose;
if(Bars<=10) return(0);
ExtCountedBars=IndicatorCounted();
//---- check for possible errors
if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
if (ExtCountedBars>0) ExtCountedBars–;
int pos=Bars-ExtCountedBars-1;
while(pos>=0)
{
haOpen=(ExtMapBuffer3[pos+1]+ExtMapBuffer4[pos+1])/2;
haClose=(Open[pos]+High[pos]+Low[pos]+Close[pos])/4;
haHigh=MathMax(High[pos], MathMax(haOpen, haClose));
haLow=MathMin(Low[pos], MathMin(haOpen, haClose));
if (haOpen<haClose)
{
ExtMapBuffer1[pos]=haLow;
ExtMapBuffer2[pos]=haHigh;
}
else
{
ExtMapBuffer1[pos]=haHigh;
ExtMapBuffer2[pos]=haLow;
}
ExtMapBuffer3[pos]=haOpen;
ExtMapBuffer4[pos]=haClose;
pos–;
}if(ExtMapBuffer1[1]>ExtMapBuffer2[1]&&ExtMapBuffer1[2]<=ExtMapBuffer2[2]&&Timee!=Time[0]) { if(AlertSignal)Alert("HeikenAshi Down : "+Symbol()+" TF : "+Period()); if(EmailMessage)SendMail("HeikenAshi Down","HeikenAshi Down : "+Symbol()+" TF : "+Period()); Timee=Time[0]; } if(ExtMapBuffer1[1]<ExtMapBuffer2[1]&&ExtMapBuffer1[2]>=ExtMapBuffer2[2]&&Timee!=Time[0]) { if(AlertSignal)Alert("HeikenAshi Up : "+Symbol()+" TF : "+Period()); if(EmailMessage)SendMail("HeikenAshi Up","HeikenAshi Up : "+Symbol()+" TF : "+Period()); Timee=Time[0]; }
//----
return(0);
}
//±-----------------------------------------------------------------+