自带函数的计算输出为无效值

代码如下,为什么输出的ema为无效值呢? Params Vars Series<Numeric> ff; Series<Numeric> gg; Series<Numeric> Ema; OnBar(ArrayRef<Integer> indexs) { ff=Abs(close-close[1]); gg=(close-close[20])/Summation(ff,20); Ema = XAverage(gg,30); Commentary("gg="+Text(gg)); Commentary("ema="+Text(Ema)); }

排除除数为0,即summation(ff,20)为0的情况

回复:如果存在分母为0的情况,那也只能是个别K线的,但是这个计算出来的ema全部K线都是无效值,是为什么呢?另外gg有输出值,但ema是无效值,就更说不通了

回复:除0运算在计算机中会出错,得到结果变成非法值,而ema运算是依赖前一根BAR的值的,所以就会导致后续一系列的错误。这个规避是很容易的,除法运算前加个条件就是。 ff=Abs(close-close[1]); Numeric sum1 = Summation(ff,20); if(sum1<>0) gg=(close-close[20])/sum1; Ema = XAverage(gg,30); Commentary("sum1="+Text(sum1)); Commentary("gg="+Text(gg)); Commentary("ema="+Text(Ema));

回复:谢谢,看了函数xaverage才发现是迭代历史所有的K线,有一个为0就会导致出现问题