月度动量策略即使能正确排列资产,也仍可能算出虚幻的交易成本。缺失的环节是再平衡:把昨日的持仓和今日的目标权重转换成实际订单。下面用4种流动性较好的加密货币现货资产做个小型拆解,数字简单到可以手工核对。
假设有一个$100,000的投资组合,只做多,每月再平衡。组合持有过去收益率排名前两位的资产,权重相等。上次再平衡时,A和B各持有价值$50,000的资产。一个月后,价格变动,组合价值达到$110,000:A现在价值$60,000,B价值$50,000。新排名将B和C列入前两位。组合目前还没有持有C。
排名行:哪些资产该进入组合?
信号要求持有B和C,各占50%。按当前组合价值计算,两者的目标持仓金额各为$55,000。排名变化告诉我们该持有哪些资产,却没有告诉我们该交易多少。这取决于再平衡前已有的持仓。
| 资产 | 当前价值 | 目标价值 | 订单 |
|---|---|---|---|
| A | $60,000 | $0 | 卖出 $60,000 |
| B | $50,000 | $55,000 | 买入 $5,000 |
| C | $0 | $55,000 | 买入 $55,000 |
| 合计 | $110,000 | $110,000 | 交易额 $120,000 |
留意这个容易忽略的细节:组合继续持有B,但仍需下达$5,000的订单来恢复目标权重。只交易新增和剔除资产的回测,会漏掉这次漂移修正。
订单行:产生了多少换手?
交易总名义金额等于买入和卖出的总和:$60,000 + $5,000 + $55,000 = $120,000。除以$110,000的组合价值后,这次再平衡的总换手率为109.1%。如果策略报告单边换手率,也可以除以2,把卖出并再投资视为一次轮换。两种口径都可以,但要明确标注,并使用相匹配的成本公式。
假设所有订单都以taker方式成交,每边手续费为0.10%。手续费共$120。若假设每边价格冲击为0.15%,预计还会产生$180的冲击成本。再平衡总成本为$300,约占组合价值的27个基点。如果直接从交易总名义金额中扣除0.25%,这里同样得到$300。只有在对每一笔交易金额都一致地应用手续费和冲击成本假设时,这种简化算法才成立。
这些只是估算假设,并非实际成交。价格冲击通常取决于订单规模相对于市场成交量的大小,用一个固定费率可能会严重低估最大订单的成本。在流动性充足的市场买入$55,000或许轻而易举;同样金额的订单若涉及流动性稀薄的代币,就可能一路扫过订单簿。如果策略只按排名确定仓位规模,可能会不知不觉地把大部分交易导向流动性最差的资产。
时点行:策略实际能以什么价格成交?
这个例子里还藏着另一个陷阱。如果排名使用月末收盘价,那么这些价格要到收盘后才最终确定。策略不可能既看到完整排名,又按同一收盘价成交。一种站得住脚的模拟方法是在收盘时计算目标,并在下一个交易时段开盘时执行,同时对产生的订单计入成本。对于全天候交易的加密货币,应定义截止时间和之后的执行窗口;“月末收盘”需要明确时区和实际下单时间。
这段延迟可能改变持仓,进而改变订单。如果执行前A继续上涨,卖出名义金额就会增加;如果C价格跳涨,买入成本也会更高。应根据下单时的组合价值和可执行价格重新计算目标数量。如果把收盘时的目标金额原封不动地保留下来,却推迟执行时点,目标权重就会在不知不觉中改变。
账簿行:成本是否从组合中扣除?
成交后,从现金余额或权益中扣除$300。此时,后续市场变动发生前,组合价值为$109,700。如果模拟器只从收益中扣成本,却不调整现金,后续仓位规模计算就可能花掉已经被消耗的资金。应在同一份账簿中记录订单、成交、手续费和持仓;否则下一次再平衡可能会从一个从未真实存在过的组合开始。
针对这个例子,我会为每种资产记录信号时间戳、目标权重、交易前持仓、订单名义金额、成交价格、手续费和冲击成本估算。然后将计算得出的换手率与成交名义金额的直接合计进行对照。这样可以发现那些常见错误:漏掉保留资产的权重漂移、对单边换手率重复计费,以及把目标权重当成实际成交。
再平衡把组合规则转化为一组交易。把每一步转换写清楚,保留账簿,并明确换手率口径。这样得出的回测可能没那么漂亮,但至少描述的是策略实际可能下达的订单。
← 全部文章


