全部 TBQuant功能 TBL语言 TB开户 问答专区 其他
自带函数的计算输出为无效值
xnzc01 分享到
2021-11-25 14:27

代码如下,为什么输出的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));
    }

tblaocai

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

2021-11-25 15:28
xnzc01
@tblaocai

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

2021-11-25 15:46
tblaocai
@xnzc01

除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));
 

2021-11-26 09:06
xnzc01
@tblaocai

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

 

2021-11-26 14:45
您未登录,请先 登录注册 后发表评论
顶部