//+------------------------------------------------------------------+ |
|
|
|
|
|
|
|
|
|
|
|
|
//| 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); |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+ |
|
|
|
|
|
|
|
|
|
|
|
|
老师,又麻烦你帮我修改一个主图指标,我复制进金字塔软件,说语句未尾缺少分号,我试加了分号也不行,辛苦老师帮修改 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|