咨询一个不理解的现象:
一、现象:
实盘:在某一个BAR进行限定价报单,成交了。但查看这根BAR,根本就没有这个价格。那为什么能成交呢?如下两图:
图一:20240930的10:05:06,棉花501以14630报单,对手价14620,成交了,成交价14620。
图二:20240930的10:05:06,棉花的高开低收四个价均为14615。没有14620。
二、疑问
1、如果棉花在20240930的10:05:06的买价是14615,对手价是14620,那么最高价不是应该是14620吗?为什么还是14615。是因为14615的买单太多,即使14620成交了,但是没有吃完14615的挂单,所以K线图表上还是显示挂单量比较大的14615吗?上述理解是否对,还是因为数据有错的原因(比如没及时刷新、漏了数据等等?)
2、接上述第1点,假如上述的理解是对的,那么回测记录会显示以14615买入成功。
但实盘其实是14620买入成功,这在回测的时候就产生了偷价。是不是因为回测系统没法根据盘口撮合的情况去显示14620成交,只能以K线的最差的价格即最高价即14615来计算买入价格呢?如果是,怎么样在回测的时候矫正这种情况?(比如代码里如何处理可以避免这种错误的情况)。因为这样的话回测绩效是失真的,会高估回测的绩效。
第一个问题,交易所推送的数据是tick数据,这是切片数据,每0.5秒发送一次数据,包含这0.5s里发生的量,和 最后一笔 成交的价格。
这些tick数据最后集成k线数据。所以你看到的价格,不一定完全代表所有的成交价格。
第二,回测是无法回测撮合成交情形,回测是按一定会按信号价格成交的前提条件下形成的测试报告。