//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property strict #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_width1 1 #property indicator_color2 Gold #property indicator_width2 1 #include <MovingAverages.mqh> input int InpChaikinPeriod= 10; input int InpChaikinShift = 10; double CHV[]; double CHVMA[]; double EMA_HL[]; double HL[]; //+------------------------------------------------------------------+ int OnInit() { IndicatorDigits(5); IndicatorBuffers(4); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,CHV,INDICATOR_DATA); SetIndexLabel(0,"Chaikin Volatility"); IndicatorShortName("CHV"); SetIndexStyle(1,DRAW_LINE,STYLE_DOT); SetIndexBuffer(1,CHVMA,INDICATOR_DATA); SetIndexLabel(1,"Chaikin MA"); //IndicatorShortName("CHVMA"); SetIndexBuffer(2,EMA_HL,INDICATOR_CALCULATIONS); SetIndexBuffer(3,HL,INDICATOR_CALCULATIONS); ArraySetAsSeries(CHV,false); ArraySetAsSeries(CHVMA,false); ArraySetAsSeries(HL,false); ArraySetAsSeries(EMA_HL,false); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ 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[]) { ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false); int i,pos; int tmp_period=InpChaikinPeriod+InpChaikinShift; if(prev_calculated==0) { for(i=0; i<tmp_period; i++) { CHV[i]=i; CHVMA[i]=i; HL[i]=i; EMA_HL[i]=i; } } pos=tmp_period-1; if(prev_calculated>tmp_period) pos=prev_calculated-1; for(i=pos; i<rates_total; i++) { HL[i]=high[i]-low[i]; } ExponentialMAOnBuffer(rates_total,prev_calculated,0,InpChaikinPeriod,HL,EMA_HL); for(i=pos; i<rates_total; i++) { CHV[i]=(EMA_HL[i]-EMA_HL[i-InpChaikinShift])/EMA_HL[i-InpChaikinShift]*100; } SimpleMAOnBuffer(rates_total,prev_calculated,0,InpChaikinPeriod,CHV,CHVMA); return(rates_total); } //+------------------------------------------------------------------+
Screenshot:

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hi everyone!
I tried to code the Chaikin Volatility indicator but it does not work at all. I know that there is plenty of examples of such an indicator, but my point is to understand what I am missing and whether I got the MQL language.
The problem I am encountering is the following: no data is drawn in the chart window, nothing. And I cannot see where is the problem because the code looks logically correct and the debugger simply says everything is fine (0 errors, 0 warnings).
I think the problem relies on the array/buffer handling, which I don't still get. This issue is driving me crazy.
Thanks in advances for any comment you will post.