TB旗舰版Floor和Ceiling函数BUG

用以下代码测试出Floor函数bug,望尽快解决,谢谢!!!


// 简称: Testing

// 名称: Testing

// 类别: 公式应用

// 类型: 用户应用

// 输出:

//------------------------------------------------------------------------

Vars

Numeric HH1;

Numeric LL1;

Numeric HH2;

Numeric LL2;

Numeric ML1;

Numeric ML2;

Numeric Test1;

Numeric Test2;

Numeric V2;

Begin

HH1=781.5;

LL1=760.5;

ML1=0.5*(HH1+LL1);

Test1=Floor(ML1,MinMove*PriceScale);

HH2=782;

LL2=760.5;

ML2=0.5*(HH2+LL2);

Test2=Floor(ML2,MinMove*PriceScale);

V2=771;

Commentary( MinMove*PriceScale = +Text(MinMove*PriceScale) );

Commentary( ML1 = +Text(ML1) );

Commentary( Floor(ML1,MinMove*PriceScale) = +Text(Test1) );

Commentary( ML2 = +Text(ML2) );

Commentary( Floor(ML2,MinMove*PriceScale) = +Text(Test2) );

Commentary( V2 = +Text(V2) );

If (V2>=Test2) Commentary(V2>=Floor(ML2,MinMove*PriceScale)可以为True);

Else Commentary(V2>=Floor(ML2,MinMove*PriceScale)不能为True);

End

data-href=

TB旗舰版和TBQuant的效率对比实验
旗舰版回测BUG
TB旗舰版
Buy函数资金不足,和旗舰版处理不同
TB旗舰版如何写动态止盈和止损的公式
avgpriceO和FloatProfitO功能bug报告
tb旗舰版模拟账号
BUG修复需求_FILLRGN函数
Bug!Bug!Bug!Bug!Bug!Bug!Bug!Bug!
TB旗舰版参数优化闪退

这个其实是浮点数精度的问题....

建议把所有小数都放大成整数,然后以整数点取

比如771,0.5取floor,转成7710,5取floor,最后计算结果再除以10。

因为计算机计算小数是有截断误差的,所以能不能浮点数计算,尽量不要用。

做了更多的测试,发现问题在minmove*pricesacle上,不在floor()上。对于铁矿石,floor(V,0.5)可以得到正确结果,floor(V,minmove*pricesacle)就会有问题,虽然minmove*pricesacle的输出也是0.5。

不是函数问题,就是浮点数运算的截断误差问题,这个很随机。

有兴趣可以自己搜索学习一下相关内容。

作为计算机程序员的其中一个共识,就是运算尽量用整型,不要用浮点数。

举个例子,如果你要计算0.3*0.5,程序员会建议你把算式变形,分成两步,先计算3*5然后第二步再除以100.这样计算比直接0.3*0.5,准确率更高