周二 UTC 时间 08:00,一家加密货币交易场所调整了一份中等价位永续合约的最小价格变动单位。我们的基差策略毫无察觉。它看到的现货与期货价差没有变化,风险限额也保持不变,回测结果依然一如既往。
模拟交易却发现了问题。订单适配器将买入限价向下取整到最近的有效价格,比回测模拟的价位低了 1 个 tick。市场触及旧价格时,模拟订单成交了,模拟交易中的订单却一直挂着没动。到了午餐时间,策略的持仓已经失衡。
这起故障看起来像是一个小小的取整错误,实质上却是模型边界出了问题:策略知道价格,回测却不知道交易场所的价格网格。
我们交易的是一个简单的基差信号:期货溢价超过阈值时买入现货、卖出永续合约。由于预期基差收益很小,订单采用被动挂单。几个 tick 的差异,就可能决定入场收益是否足以覆盖手续费和最终平仓成本。
最小价格变动单位改变后,发生了什么?
更新前,这份永续合约接受以 0.01 为增量的价格。更新后,在相关价格区间内,价格增量变为 0.05。信号算出的目标卖价是 42,318.03,按旧规则这是有效价格,按新规则则无效。
交易所会拒绝无效价格,但我们的适配器有一个备用处理:将卖价向下取整到 42,318.00。这个价格仍然无效。第二层备用处理又将价格取整到 42,318.05;这次价格有效,但对卖方来说更不积极。订单无法再按模型设定的价格卖出。这段代码原本是为另一个市场编写的,却悄悄地把拒单变成了改价下单。
这一笔订单涉及两个截然不同的问题。第一,交易场所允许接受什么价格?第二,目标价格不在价格网格上时,策略应该如何应对?第一个问题由交易所决定,第二个则必须由策略或执行策略来回答。
| 订单意图 | 价格网格规则 | 常见取整方向 | 可能造成的变化 |
|---|---|---|---|
| 买入限价单 | 价格必须是 tick 的整数倍 | 向下取整,以保持价格不高于限价 | 成交概率降低 |
| 卖出限价单 | 价格必须是 tick 的整数倍 | 向上取整,以保持价格不低于限价 | 成交概率降低 |
| 可立即成交的限价单 | 还必须符合价格限制 | 取决于可接受的最高价格 | 是否会跨越价差 |
取整没有放之四海而皆准的规则。买价向下取整能守住买方的价格限制,却可能降低成交概率。向上取整可能让订单变成可立即成交的订单,从而改变手续费和冲击成本。对于我们的被动基差入场单,悄悄改动订单价格是错误的做法。策略已经选定了目标价格,适配器却改变了订单的经济效果。
为什么回测看起来仍然正常?
我们的历史订单模拟器把限价视为连续数值。如果 K 线最低价触及买价,或最高价触及卖价,就计为成交。对于被动订单来说,这种近似已经相当宽松,因为成交价达到限价并不能说明订单在队列中的位置。但这次 tick 调整暴露了一个更根本的问题:订单根本不可能以那个价格存在。
我们从规则生效时间起套用新的价格网格,重新回放了相同的决策。几笔成交消失了;还有几笔订单取整后的价格跨越了价差,因此产生了 taker 手续费,而不是 maker 手续费。由此产生的持仓路径也发生偏离,后续对冲和平仓随之改变。一个看似只是元数据的规则,竟然改变了整个交易序列。
这次更新并不是图表上毫无征兆的变化。交易场所已经发布了带生效时间的合约规则变更。我们谨慎保存了市场数据,但合约元数据只缓存在启动时刷新。回测对所有历史日期都读取当天的规则;模拟交易则一直使用旧规则,直到进程重启。两个环境都没有正确反映交易场所在每个时点允许的操作。
回测该如何模拟最小价格变动单位的变化?
像其他时点数据一样,按有效时间区间为合约规则设置版本。至少要保留生效时间,以及验证订单所需的规则值:最小价格变动单位、数量步长、最小数量和任何价格区间限制。模拟器应加载模拟决策时点生效的规则集。
然后,把订单处理方式明确下来。如果目标价格无效,就拒绝订单、按有文档记录的策略取整,或在价格网格上重新计算目标价,并记录实际采用了哪种处理方式。自动修正每笔订单的回测,或许有助于估算某种特定执行策略的表现,但不应该把这种策略伪装成交易所成交。
对于被动订单,价格符合 tick 规则只是成交的第一个条件。你还需要建立模型,判断市场是否穿过了你的价格、你前方有多少排队订单、订单是否会被撤销,以及你能获得哪个手续费等级。
我们新增了两项检查。一项会用时点对应的合约规则校验每个生成的订单,发现无效价格或数量时立即报错。另一项会比较回测和模拟交易适配器最终标准化后的订单:方向、价格、数量、time-in-force 和手续费意图。如果这些内容不一致,就不能认为两次运行具有可比性。
完成后,我们重新回放了周二的规则变更。价格网格更新后,回测不再声称 42,318.03 处有成交。对于每个无效目标价,模拟交易和模拟器都会作出相同的决定,即使这个决定是跳过订单。
信号本身没有失效,过时的是它对可交易标的的假设。策略可以适应新的最小价格变动单位,但前提是研究系统将交易场所规则视为所模拟市场的一部分。
← 全部文章


