在 09:00 UTC,我们的横截面加密货币期货策略希望在 10 个永续合约之间调仓 $200,000。回测报告显示交易成本为 4 个基点。使用相同信号和交易场所费率等级的模拟盘运行,估算成本则略高于 20。
手续费标准没有问题。我们只计算了手续费,就把它称作执行成本。这个错误一直没被发现,是因为策略交易的是流动性充足的市场,订单规模适中,而且每天只调仓一次。这些说法听起来都让人放心,直到我们追问:订单实际上能以什么价格成交?
这次调仓很适合拿来拆解分析。它说明了,若把市场价格当成可无限量成交的价格,低手续费回测仍可能低估成本。
我们先看订单列表。策略做多表现最强的 5 个合约,做空表现最弱的 5 个合约,各合约的美元权重相同。大多数仓位需要调整约 $20,000。一个合约只需调整 $3,400,另一个则需要调整 $31,000。回测将每笔交易都按该 K 线的收盘价估值,然后对买卖双方分别计入交易场所 2 个基点的 taker 手续费。
| 成本构成 | 回测假设 | 模拟盘估算 |
|---|---|---|
| 交易场所手续费,单边 | 2 bp | 2 bp |
| 价差,单边 | 0 bp | 约 4 bp |
| 冲击与延迟,单边 | 0 bp | 约 4 bp |
| 往返成本估算 | 4 bp | 约 20 bp |
模拟盘估算并不保证订单一定能成交。它是一种成本模型:决策时观察到的价差,加上根据订单规模和近期成交量估算的冲击成本,再加上少量用于覆盖下单和成交所需时间的成本。最后这部分估算有意保持粗略。让不确定性消失的模型听起来更令人安心,实际用处却更小。
我们先检查价差。信号根据一根已完成的 1 分钟 K 线计算,因此策略只能在该 K 线收盘后提交订单。对于每个合约,我们取订单到达交易场所时可见的最优买价和最优卖价。中间价只是基准,并非可执行价格。买单从卖价开始成交;卖单从买价开始成交。
光是这项差异,平均每个标的的往返成本就约为 8 个基点,而且不同合约和分钟间差异很大。流动性最好的合约单边价差接近 2 bp。流动性较差的合约则扩大到 9 bp。若所有订单都套用同一个价差数值,我们就会掩盖最需要看清的差异。
接下来是订单规模。$20,000 的市价买单通常可以吃掉最优卖价上的挂单,而不会消耗太多深度,但能否如此取决于当时的订单簿。我们通过逐档扫过可见盘口来估算冲击成本:查看每个价位上的报价金额,并计算需要消耗足够档位以完成订单时的成交量加权平均价。对于 $31,000 的调整,盘口快照显示相对于中间价会产生约 6 bp 的额外成本。$3,400 的订单对估算值几乎没有影响。
而且盘口快照本身也不完美。它只显示挂单深度,看不到隐藏流动性,也无法反映我们的订单到达时还剩多少流动性。加密货币盘口可能在观察到下单之间发生变化;基于稀疏快照构建的回测,无法精确还原队列情况。我们用盘口数据圈定合理的成本范围,再与模拟盘成交记录对比,看看估算是否存在系统性偏低。
对于市价单,中间价只是测量基准,并不是你的买入或卖出成交价。
我们用 3 种假设模拟了这次调仓。计入跨越价差的成本、忽略盘口深度,往返成本估算为 12 bp。逐档扫过可见盘口后,估算升至 18 bp。再加上交易场所手续费,以及单边 2 bp 的延迟成本,估算值约为 22 bp。具体数字取决于订单列表和盘口快照,但成本上升的趋势不会变。
这并不意味着要放弃策略,而是要用会随拟议交易变化的成本重新运行回测。我们为每笔订单加入价差和冲击成本估算,在报告中单独列出手续费,并为每笔模拟成交记录基准价格、时间戳和假设的执行方式。
下一次模拟盘运行中,一个合约的订单被拆分成了更小的分批订单,因为第一批消耗的盘口深度超出预期。策略信号没有变化,执行方式变了,而这足以改变成本归因。
如果你的回测显示一次调仓只产生手续费,就要求它列出每笔成交背后的价格、规模和可用流动性。令人信服的答案要从这些细节入手,而不是只给出一个标着“滑点”的数字。
← 全部文章


