请教,Buy()与SellShort()两个命令中的委托价格在历史回测中有没有作用?如果数据源用的是后复权的888连续,开启自动委托映射,这时Buy()与SellShort()两个命令中的委托价格又有没有用?谢谢!
后复权其实有不少坑,还是你没弄明白机制的问题。
后复权情况下,buy,sell等函数传入复权后的价格,实际发单,会自动转化成真实价格发单。
一旦你的逻辑里面,涉及到固定价格止损等。最好是全部用rollover转换成真实价格,这样,不论你逻辑怎么变,价格上都不会错。比如你在bar序号100的K线上,定义了一个止损价1000,恰好105根K线,换月了,在后面的K线上,你再去用1000做止损,那肯定是不对的。因为复权系数发生了变化。
正确的应该是 止损价格 1000*rollove 后面比较的时候,用C和1000*rollover/rollover作比较(这里的两个rollover是前后两次的不同的复权系数),这样相当于两个价格都是真实价格。
我也是研究了很久才搞懂,也是理解了很长时间。归根到底, 还是要你去想明白其中的机制。不然很容易出问题
第一,如果没有设置自动映射真实价格,实际发单是按照复权价格发的,不是真实价格!
第二,使用后复权以后,一些关键价位都是自行用变量记录除权以后的值,判断的时候再把这个值复权
第三,后复权的资料和视频课程几年前就有了,为什么要自己研究呢?
等下周开盘了专门给你录个视频发出来看看吧。
你既然是不相信你的操作有问题,一定觉得软件功能有问题,那么我除了录个视频来证明没问题,也没有其他办法了。
前段时间因忙于事务,忘及时回复您了!谢谢您专门录个视频来解释这个问题,如您所说,问题在我,不在TBQ。我用了跨周期的多数据源逻辑,其中有后复权的,也有不复权的,委托价格方式比较混乱所致。现一致都采用后复权的数据源就不存在这个问题了。谢谢!
谢谢您的回复。但我检查时发现并不是这样啊,它不是用888行情(0号图层上加载的后复权的数据源)的开盘价(Open),就是用888行情的收盘价(Close)进行委托并计算盈亏。而我设置的用真实的主力合约(订阅加载的)的价格委托,它并不采用。这个问题一直困扰着我,不知道如何解决?注:公式中开启了自动映射主力合约。
主要涉及到是否存在偷价行为,正常的开平仓可以用收盘价模式或采用历史信号加以规避,但在止盈止损时,却是要用到即时行情的,这时就涉及到真实价格了。否则,历史回测的结果就存疑了。
你应该是对软件功能和操作还不熟悉或者认知出错了。
建议按照零基础教程先把基本的设置操作和功能摸清楚
我程序化交易已经做了8年了,不过前面用的是文华,去年才转用贵司系统。文华的回测用的是tick数据,不存在这样的问题,而贵司的回测这却是个大问题。
在 oninit 域中加入一句 AddDataFlag(Enum_Data_RolloverRealPrice()); 用888指数回测的时候就会用对应的主力合约价格进行计算。
虽然做了8年,但是用的不是tb,tb是最近才用起来的,那么实际上确实是对软件功能不了解所导致的,对吧?按照你现在提供的线索,无法判断是哪里操作有错误。建议重新仔细学习零基础视频,如果教程里没有可以再咨询客服或者社区
另外再补充一下,你所质疑的这个问题,是一项非常基础的机制,如果这个机制出了问题,基本上所有用户都是没办法正常使用软件的。
所以到底是软件机制出问题了,还是你有哪里操作没弄明白,建议想清楚再说。
历史回测就是以buy sellshort函数中的第二个参数price为准进行统计结算的。历史回测无法复现竞价撮合,所以一律按委托价格price作为成交价格进行计算。
实盘交易中,如果不开任何其他设置,委托单会以price进行报单。如果开了委托偏移,会以映射目标的对手价加上偏移点数报单。