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