代码如下,为什么输出的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就会导致出现问题