周二 UTC 00:05,我们的加密货币横截面策略按短期趋势评分对 40 个永续合约排名,并将排名前十的合约纳入等权持仓。回测显示,赢家和输家之间有不错的收益差。随后我们让策略用 $250,000 资金进行交易,原本漂亮的曲线便开始走样。
问题不在信号里,而在再平衡:10 笔买单、10 笔卖单,还有几个合约的显示深度看起来很充足,直到这些订单同时到达。策略把投资组合的调整当成了价格更新,而交易场所面对的却是一队真正排队执行的订单。
我们按顺序重放了那个周二的过程。首先要缩减旧持仓,然后才能建立新持仓。目标权重很简单,但从当前持仓走到目标持仓的过程并不简单。
每边 8 个基点的成本来自一项单一的平均成本估算,其中计入了交易场所费用和少量滑点。这样一来,每笔订单都被收取相同的成本,无论它交易的是行情平静时流动性充足的合约,还是波动突然加剧后流动性稀薄的合约。
我们先从最大的一笔订单看起。$25,000 的目标金额占日成交量的 0.4%,这个比例听起来并不高。但日成交量并不能说明你需要交易的那几秒里有多少流动性可用。最优报价档位的深度很浅,后面几个价位的价差也迅速扩大。要一次性成交全额,就得扫过多个价位。挂限价单只有在成交时才能省下价差,而策略无法保证能在下一次决策前成交。
于是我们把订单拆成 5 笔,每笔 $5,000。这样能减少即时冲击,但也引入了时间和行情路径的影响:每笔订单可能以不同价格成交,行情快速波动时,持仓可能只建了一半。我们把这两种结果都记录了下来。原来的回测两者都没有记录。
而这还只是一条交易腿。策略卖出跌出前十的持仓,同时买入替代合约。净敞口仍接近目标,但总换手金额几乎是配置资金的 2 倍。若只对最终投资组合的变化计费,就会漏掉为达到目标所需的那些交易。
| 执行方式 | 节省了什么 | 承担了什么风险 |
|---|---|---|
| 一笔市价单 | 节省时间,也免去对能否完成成交的担忧 | 一次性消耗更多订单簿深度 |
| 拆成 5 笔市价单 | 减少即时冲击 | 分笔执行期间的价格波动 |
| 限价单 | 有机会少付一些价差 | 部分成交或完全无法成交 |
当天下午,我们用一个简单的参与率模型替代了固定滑点估算。每笔订单的预期冲击会随其规模相对近期成交量的比例上升;我们还对模拟参与率设置上限,避免策略消耗不合理比例的市场成交量。这仍然只是近似:汇总成交量不等于实时队列,K 线也无法呈现期间的每一个价格。但它迫使回测承认,同一信号在不同规模下会产生不同的执行成本。
修订后的回测还会在订单跨越价差时计入 taker 费用;只有模拟确实假设挂单成交时,才计入 maker 费用。资金费率仍作为单独的持仓成本处理,不属于再平衡成本。把这些成本项目分开后,问题就清楚多了:策略的预测能力并没有突然变差,只是换手成本相对于它所预测的优势过高。
到周末时,我们降低了再平衡频率,并剔除了可用深度不足以支撑目标权重的合约。回测收益下降了,但执行假设更容易解释。这比更高的收益数字更有用。
审视投资组合策略时,不妨完整追踪一次再平衡:从目标权重到单笔订单,从订单到合理的成交,再从成交到费用和市场冲击。如果缺了这段过程,权益曲线描述的就是一个从来不需要实际交易的投资组合。
← 全部文章

