//+------------------------------------------------------------------+ //| Heiken Ashi.mq4 | //| Copyright c 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ //| 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 Green #property indicator_color3 Red #property indicator_color4 Green //---- extern color color1 = Red; extern color color2 = Green; extern color color3 = Red; extern color color4 = Green; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; //---- int ExtCountedBars=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //|------------------------------------------------------------------| int init() { //---- indicators SetIndexStyle(0, DRAW_HISTOGRAM, 0, 2, color1); SetIndexBuffer(0, ExtMapBuffer1); SetIndexStyle(1, DRAW_HISTOGRAM, 0, 2, color2); SetIndexBuffer(1, ExtMapBuffer2); SetIndexStyle(2, DRAW_HISTOGRAM, 0, 4, color3); SetIndexBuffer(2, ExtMapBuffer3); SetIndexStyle(3, DRAW_HISTOGRAM, 0, 4, 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() { //---- 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; if(ExtCountedBars==0) pos--; 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