写了个DMI指标的函数,用于计算PDI、MDI、ADX的值。打印出ADX的值为“ADX=N/A”,附源码如下:
Params
NumericRef PDI;
NumericRef MDI;
Numeric Length1(28);
Numeric Length2(6);
Vars
Numeric TR;
Numeric HD;
Numeric LD;
Numeric DMP;
Numeric DMM;
Numeric ADX;
Begin
TR = Summation(Max(Max(High - Low,Abs(High - Close[1])),Abs(Low - Close[1])),Length1);
HD = High - High[1];
LD = Low[1] - Low;
DMP = Summation(IIF(HD > 0 && HD > LD,HD,0),Length1);
DMM = Summation(IIF(LD > 0 && LD > HD,LD,0),Length1);
PDI = DMP * 100 / TR;
MDI = DMM * 100 / TR;
ADX = AverageFC(Abs(MDI - PDI) / (MDI + PDI) * 100,Length2);
print("ADX="+text(ADX));
return 1;
End
你应该是把TR PDI MDI都输出一下就清楚了 肯定是TR为0导致PDI MDI异常 连带后面adx也异常
summataion可能是递归算法 所以后面全错了
所有有除法的计算公式都要考虑分母为0时的异常处理,如果是递归算法那更要考虑,不然只要出现一次异常值那就后面全都错了