| //+------------------------------------------------------------------+ | ||||||||||||
| //| Heiken Ashi.mq4 | | ||||||||||||
| //| Copyright 2006-2014, MetaQuotes Software Corp. | | ||||||||||||
| //| http://www.mql4.com | | ||||||||||||
| //+------------------------------------------------------------------+ | ||||||||||||
| #property copyright "2006-2014, MetaQuotes Software Corp." | ||||||||||||
| #property link "http://www.mql4.com" | ||||||||||||
| #property description "We recommend next chart settings (press F8 or select menu 'Charts'->'Properties...'):" | ||||||||||||
| #property description " - on 'Color' Tab select 'Black' for 'Line Graph'" | ||||||||||||
| #property description " - on 'Common' Tab disable 'Chart on Foreground' checkbox and select 'Line Chart' radiobutton" | ||||||||||||
| #property strict | ||||||||||||
| #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 | ||||||||||||
| //--- | ||||||||||||
| input color ExtColor1 = Red; // Shadow of bear candlestick | ||||||||||||
| input color ExtColor2 = White; // Shadow of bull candlestick | ||||||||||||
| input color ExtColor3 = Red; // Bear candlestick body | ||||||||||||
| input color ExtColor4 = White; // Bull candlestick body | ||||||||||||
| //--- buffers | ||||||||||||
| double ExtLowHighBuffer[]; | ||||||||||||
| double ExtHighLowBuffer[]; | ||||||||||||
| double ExtOpenBuffer[]; | ||||||||||||
| double ExtCloseBuffer[]; | ||||||||||||
| //+------------------------------------------------------------------+ | ||||||||||||
| //| Custom indicator initialization function | | ||||||||||||
| //|------------------------------------------------------------------| | ||||||||||||
| void OnInit(void) | ||||||||||||
| { | ||||||||||||
| IndicatorShortName("Heiken Ashi"); | ||||||||||||
| IndicatorDigits(Digits); | ||||||||||||
| //--- indicator lines | ||||||||||||
| SetIndexStyle(0,DRAW_HISTOGRAM,0,1,ExtColor1); | ||||||||||||
| SetIndexBuffer(0,ExtLowHighBuffer); | ||||||||||||
| SetIndexStyle(1,DRAW_HISTOGRAM,0,1,ExtColor2); | ||||||||||||
| SetIndexBuffer(1,ExtHighLowBuffer); | ||||||||||||
| SetIndexStyle(2,DRAW_HISTOGRAM,0,3,ExtColor3); | ||||||||||||
| SetIndexBuffer(2,ExtOpenBuffer); | ||||||||||||
| SetIndexStyle(3,DRAW_HISTOGRAM,0,3,ExtColor4); | ||||||||||||
| SetIndexBuffer(3,ExtCloseBuffer); | ||||||||||||
| //--- | ||||||||||||
| SetIndexLabel(0,"Low/High"); | ||||||||||||
| SetIndexLabel(1,"High/Low"); | ||||||||||||
| SetIndexLabel(2,"Open"); | ||||||||||||
| SetIndexLabel(3,"Close"); | ||||||||||||
| SetIndexDrawBegin(0,10); | ||||||||||||
| SetIndexDrawBegin(1,10); | ||||||||||||
| SetIndexDrawBegin(2,10); | ||||||||||||
| SetIndexDrawBegin(3,10); | ||||||||||||
| //--- indicator buffers mapping | ||||||||||||
| SetIndexBuffer(0,ExtLowHighBuffer); | ||||||||||||
| SetIndexBuffer(1,ExtHighLowBuffer); | ||||||||||||
| SetIndexBuffer(2,ExtOpenBuffer); | ||||||||||||
| SetIndexBuffer(3,ExtCloseBuffer); | ||||||||||||
| //--- initialization done | ||||||||||||
| } | ||||||||||||
| //+------------------------------------------------------------------+ | ||||||||||||
| //| Heiken Ashi | | ||||||||||||
| //+------------------------------------------------------------------+ | ||||||||||||
| int OnCalculate(const int rates_total, | ||||||||||||
| const int prev_calculated, | ||||||||||||
| const datetime &time[], | ||||||||||||
| const double &open[], | ||||||||||||
| const double &high[], | ||||||||||||
| const double &low[], | ||||||||||||
| const double &close[], | ||||||||||||
| const long &tick_volume[], | ||||||||||||
| const long &volume[], | ||||||||||||
| const int &spread[]) | ||||||||||||
| { | ||||||||||||
| int i,pos; | ||||||||||||
| double haOpen,haHigh,haLow,haClose; | ||||||||||||
| //--- | ||||||||||||
| if(rates_total<=10) | ||||||||||||
| return(0); | ||||||||||||
| //--- counting from 0 to rates_total | ||||||||||||
| ArraySetAsSeries(ExtLowHighBuffer,false); | ||||||||||||
| ArraySetAsSeries(ExtHighLowBuffer,false); | ||||||||||||
| ArraySetAsSeries(ExtOpenBuffer,false); | ||||||||||||
| ArraySetAsSeries(ExtCloseBuffer,false); | ||||||||||||
| ArraySetAsSeries(open,false); | ||||||||||||
| ArraySetAsSeries(high,false); | ||||||||||||
| ArraySetAsSeries(low,false); | ||||||||||||
| ArraySetAsSeries(close,false); | ||||||||||||
| //--- preliminary calculation | ||||||||||||
| if(prev_calculated>1) | ||||||||||||
| pos=prev_calculated-1; | ||||||||||||
| else | ||||||||||||
| { | ||||||||||||
| //--- set first candle | ||||||||||||
| if(open[0]<close[0]) | ||||||||||||
| { | ||||||||||||
| ExtLowHighBuffer[0]=low[0]; | ||||||||||||
| ExtHighLowBuffer[0]=high[0]; | ||||||||||||
| } | ||||||||||||
| else | ||||||||||||
| { | ||||||||||||
| ExtLowHighBuffer[0]=high[0]; | ||||||||||||
| ExtHighLowBuffer[0]=low[0]; | ||||||||||||
| } | ||||||||||||
| ExtOpenBuffer[0]=open[0]; | ||||||||||||
| ExtCloseBuffer[0]=close[0]; | ||||||||||||
| //--- | ||||||||||||
| pos=1; | ||||||||||||
| } | ||||||||||||
| //--- main loop of calculations | ||||||||||||
| for(i=pos; i<rates_total; i++) | ||||||||||||
| { | ||||||||||||
| haOpen=(ExtOpenBuffer[i-1]+ExtCloseBuffer[i-1])/2; | ||||||||||||
| haClose=(open[i]+high[i]+low[i]+close[i])/4; | ||||||||||||
| haHigh=MathMax(high[i],MathMax(haOpen,haClose)); | ||||||||||||
| haLow=MathMin(low[i],MathMin(haOpen,haClose)); | ||||||||||||
| if(haOpen<haClose) | ||||||||||||
| { | ||||||||||||
| ExtLowHighBuffer[i]=haLow; | ||||||||||||
| ExtHighLowBuffer[i]=haHigh; | ||||||||||||
| } | ||||||||||||
| else | ||||||||||||
| { | ||||||||||||
| ExtLowHighBuffer[i]=haHigh; | ||||||||||||
| ExtHighLowBuffer[i]=haLow; | ||||||||||||
| } | ||||||||||||
| ExtOpenBuffer[i]=haOpen; | ||||||||||||
| ExtCloseBuffer[i]=haClose; | ||||||||||||
| } | ||||||||||||
| //--- done | ||||||||||||
| return(rates_total); | ||||||||||||
| } | ||||||||||||
| //+------------------------------------------------------------------+ | ||||||||||||
| 老师,又麻烦你帮我修改一个主图指标,我复制进金字塔软件,说语句未尾缺少分号,我试加了分号也不行,辛苦老师帮修改 | ||||||||||||