首页 > 解决方案 > 自定义平均函数中的数组超出范围

问题描述

所以我写了一个带有乘数的自定义atr指标(显示2行,第一行是原始atr值,第二行是atr * 1.5),但由于某种原因它说“数组超出范围(66,28)”,我计算我的真实范围的平均值。我确实在我的数组上使用了 SetIndexBuffer,所以问题应该出在 OnCalculate() 中。

这就是我的 OnCalculate 函数中的内容:

for(int i=0;i<rates_total-prev_calculated;i++){
      TRBuffer[i] = MathMax(MathMax(high[i]-low[i], MathAbs(high[i]-close[i+1])),MathAbs(low[i]-close[i+1]));
      if(prev_calculated-1<=ATRLength){
         double sumTR=0;
         for(int j=0;j<ATRLength;j++){
            sumTR+=TRBuffer[i+j];
         }
         double atr = sumTR/ATRLength;
         TRBuffer[i] = atr*TPMultiplier;
         SLBuffer[i] = atr*SLMultiplier;
      }
   }

标签: mql4mt4

解决方案


找到了答案,这是最终代码。

if(rates_total<=ATRLength)
      return 0;
   int limit = rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
   double ATRVal;
   for(int i=limit-2; i>1; i--){
      TRBuffer[i] = MathMax(MathMax(high[i]-low[i], MathAbs(high[i]-close[i+1])),MathAbs(low[i]-close[i+1]));
      ATRVal = iMAOnArray(TRBuffer, 0, ATRLength, 0, MODE_SMA, i); 
      TPBuffer[i] = ATRVal*TPMultiplier;
      SLBuffer[i] = ATRVal*SLMultiplier;
   }

推荐阅读