这种写法,不知为什么在旗舰版上无法得到aa的有效值,而在TBquant上可以?

//这种写法,不知为什么在旗舰版上无法得到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运算出错了。