当SetTradeSide(1)允许双向持仓的情况下,经过反复测试在调用大量回测的时,以下代码
Commentary("set MyPrice = " + Text(MyPrice));
SellShort(Lots,MyPrice);
时不时会出现以下的输出情况:
#set MyPrice = 3837.9
SellShort 4@3837.8
传入函数的价格会和建仓信号的价格存在+/-0.1~0.2的误差
策略单元设置滑点为0且MyPrice没有超出当前bar范围
如果使用Round()函数将MyPrice取整,出现类似情况的概率有所下降,但是偶尔还是会有:
#set MyPrice = 4626
SellShort 4@4625.8
实测Buy/BuyToCover/Sell函数也有类似情况
因为以上原因,如果使用自建的序列变量存储MyPrice,会和EntryPrice获取的建仓价出现以上误差
请问应该如何避免?谢谢
首先第一个 text是有输出精度的
第二个 信号价格也是有精度的,这个精度是最小跳动
因为你这里给出的信息很有限,我只能做出一些推测
比如第一个情况,price = 3837.9 sellshort是3837.8 这个可能就是因为你这个品种的最小跳动是0.2,不可能存在0.9这种小数,然后卖出所以向下取整到0.2跳,就变成了3837.8
第二个情况可能是price实际是浮点数,精度是4625.9999,这个数字按整数四舍五入确实是4626,但是如果按卖出信号向下取整的规则,那就是4625.8
具体是不是以上原因还要用更新的信息去确认,目前为止只能推测到这里
你是不是因为后复权导致的精度问题
建议发一个能复现的环境,否则很难定位到问题