//这种写法,不知为什么在旗舰版上无法得到aa的有效值,而在TBquant上可以?那位老师可以回答
Params
    Numeric length(14);
    Numeric lots(1);
Vars
                numericseries aa;
    numericseries sf;
                numericseries up_move;
    numericseries low_move ;
    
Begin
        up_move = Abs(h[1] - h[2]);
        Commentary("up_move="+Text(up_move));
        low_move = Abs(l[1] - l[2]);
        Commentary("low_move="+Text(low_move));
        sf = abs((up_move  -low_move) / (up_move +low_move));
        Commentary("sf="+Text(sf));
        
        
        if (CurrentBar==0 )
        {
            aa = close;
            Commentary("aa1="+Text(aa));
        }
        Else
        {
            if (aa== InvalidNumeric)
            {
                aa = close[1];
                Commentary("aa2="+Text(aa));
                       }
                      Else
                      {
            aa= close[1] * sf+ aa[1] * (1-sf) ;
                 Commentary("aa3="+Text(aa));
                    }
              
        
                
        }
            Commentary("CurrentBar2="+Text(CurrentBar));
            Commentary("aa4="+Text(aa));
        
end
TBQ是新版本,对数据处理的机制上跟以前版本比,肯定是做了很多优化和升级的。所以建议大家尽量使用新版本。
当然,就您这个具体问题而言,旗舰版上的公式之所以aa会出现无效值,其实是跟sf的值有关的,而sf会出现无效值,是因为计算机里面不能进行除0运算,您只要加个判断条件,保证除数不为0即可。
    If(up_move+low_move<>0)
        sf = abs((up_move  -low_move) / (up_move +low_move));
在语句里加了,这个条件也不行吗?
 if (aa== InvalidNumeric)
            {
                aa = close[1];
               
                       }
您这不是无效值,是除0运算出错了。