策略
香港大盘股横截面月度 REVERSAL,仅做多等权组合(HKEQ — 从固定的 24 只 HSI 蓝筹股范围中,买入过去 21 个交易日表现最差的 6 只 RELATIVE,持有 21 个交易日后滚动调整;全新市场与价格数据集,已有 ZERO 次先前实验,3 参数)
结局: 已放弃
HkBlueChipMonthlyCrossSectionalReversalBasketHkeq
结局总结
该假设为工厂开辟了一个真正全新的价格领域——HKEQ、174 个日频标的且此前实验为零——并认为,持有 21 个交易日、买入相对超卖程度最高的 6 只 HSI 蓝筹股,可实现每月约 0.95% 的收益,对比约 0.30% 的印花税较重的往返交易成本。实现符合设计(仅做多、始终持仓、平均持有约 40 天,对持续留在底部 -6 的标的抑制换手),并产生了可信度异常高的样本:在 2018 贸易战、2019 抗议活动、COVID、2021-22 中国熊市及之后的复苏期间,共有 445 笔单标的交易。但优势方向错了:总回报为 -12.02%,利润因子为 0.933,夏普比率为 -0.098,每笔交易回报为 0.109%,约为引擎甚至未计入的往返成本的三分之一(HKEQ 股票类工具绕过 `_apply_fees`,因此手动扣除每年约 2% 后,真实结果将降至每年约 -2.5 至 -3%)。分析师在回测审查时就放弃了该策略,没有花数小时优化三个只会重新排列被买入亏损股的可调参数,并指出,在 HSI 大盘股的 21 交易日周期上,亚洲(除日本外)逆向溢价根本不存在。
假设
严格实现该假设:固定的 24-只名称池,21-期尾部收益,按池中位数进行横截面去均值,等权做多 6 个最差的相对表现者,持仓约 21 期并滚动,在 HKEQ 上仅做多、不加杠杆、不设状态门禁与绝对收益过滤器(组合始终 100% 仓位;唯一决策是从 WHICH 中选哪 6 个)。21-期的持仓/滚动以由 bar 自身时间戳派生的 CALENDAR 月网格(year*12+month // rebalance_months)表示,而非相对进程的 bar 计数器,因此约 104 个调仓日在重启、回测与纸面回放之间完全一致;通过比较相邻已处理 bar 来检测边界,月中重启不会引起组合的换手。跨腿数据通过精确的交易日 TIMESTAMP 匹配(在按整体裁剪后的各腿 (ts, close) 列表上做二分查找),而非按缓冲区位置匹配——目录会对少量 HK 个交易日重新打戳,某条腿缺失一个交易日也不得偏移另一条腿的收益。仓位规模按 NAV 相对,但以可用现金为硬上限并预留手续费缓冲,因为 CASH 场所会拒收其无力出资的买单。换手控制(对仍处于倒数 -6 名的名称不再交易)是手续费防御:实测调仓约为篮子每月 0.7,即每月暴露的名义金额约为 0.22%。ONE CONCERN,按规定陈述并按要求照样实现:在目录的 2018-2026 个 HK 日收盘价上离线复现该规则,结果显示去均值后的输家篮子以每月约 0.17% 的幅度相对等权池UNDERPERFORMING(毛收益每月 0.18% 对池子每月 0.35%,即扣除每月 0.22% 的调仓成本后大致持平),因此在该蓝筹池的 21-期视野下,文献所述的除日本外亚洲 1 月反向溢价并未显现——回测很可能显示篮子跟踪池子而非跑赢,此判断由研究主管/分析师承担。
在完全可靠的 445 笔交易 / 8.6 年样本上,期望收益为负,且前提假设经测量并不存在。PF 0.933(<1),总收益 -12.02%,Sharpe -0.098,单笔交易收益 0.109%,而该假设原本针对的往返成本约为 0.30% HKEQ。这些成本实际上从未计收(HKEQ Equity 工具绕过了 `_apply_fees`),因此按每月约 4 次轮换手动扣除约 2%/年后,真实结果约为每年 -2.5 至 -3%。假设中的亚洲(日本除外)1 个月反转溢价,在 HSI 蓝筹股的 21 交易时段期限上根本不存在——开发者自己的离线复制也独立证实了这一点(输家组合毛收益为每月 0.18%,而等权全体组合为每月 0.35%)。优化无法提高低于成本且毛收益为负的优势;三个可调参数只会重新排列买入哪些输家。`revise_hypothesis`:反转前提本身已在其指定的确切股票范围内被证伪,而该市场的印花税也使边际变体没有施展空间。
实现
在固定的 24 只 HKEX 蓝筹股范围内,构建仅做多、始终满仓的横截面 MONTHLY REVERSAL 篮子(HKEQ,1-DAY bar,CASH 账户,杠杆 1)。每个交易时段计算各股票过去 21 个交易日的回报,并减去全市场 MEDIAN 回报,得到纯粹的 RELATIVE 评分,不含市场择时成分;calculate_signal 每根 bar 都返回主标的(0700)去均值后的评分。每个日历再平衡边界(月份网格约为 21 HK 个交易日)上,选择相对表现最差的 6 只股票作为目标篮子:卖出退出篮子的股票,以等权买入新入选股票(总仓位 95% / 6 只股票),按 NAV 计算仓位,并受 CASH 账户实际持有的现金硬性限制,且只能买入整股。仍留在末尾 -6 的股票将 NOT 交易,因此约 70% 的组合实际发生轮换时,才会按月支付约 0.30% HK 的往返成本(每边印花税 0.11% + 约 4bp 半价差)。若边界交易时段无法为目标仓位提供足够资金(卖出所得尚未入账——HK 为 T+2),则会在后续交易时段继续尝试,直到下一个边界。
验证结果
不是开发者修复项。在工厂层面:将 `_apply_fees` 中的 `Equity` 提前返回收窄至 VenueConfig 费用确实为 0.0(USEQ)的市场,并重新构建非零费用的 Equity 工具,设置 maker/taker,使 MakerTakerFeeModel 对其收取费用;同时将 `ROUND_TRIP_COST_PCT['HKEQ']` 从 0.10 提高至约 0.30(法定费用 0.22% + 点差约 0.08%)。在此之前,分析师必须手动扣减 HKEQ/CNEQ 结果。
交易场所成本模型缺口(基础设施问题,NOT 可在此策略文件中修复):HKEQ 工具是 NT `Equity`,而 `src/backtesting/runner.py::_apply_fees` 在读取 `venue_config.maker_fee/taker_fee` 之前就基于 `isinstance(instrument, Equity)` 提前返回。该提前返回原本是为 USEQ 编写的(确实免佣),但现在也吞掉了 HKEQ 声明的每侧 0.11% 以及 CNEQ 的每侧 0.05%。沙盒证据:在 HKEQ 时的 336 个已平仓头寸中,total_commission=0.0 且 commission_pct_of_gross=0.0。因此,策略的费用算术(每月捕获 0.95%,对比 0.30% 往返成本)无法通过此回测验证——成本端为零。
要么删除 `signal <= 0.0` 条件(纳入 `self._targets` 已经是入场决策,而 `_deploy` 已经完成了排名),要么将主标的的现金扣款移至实际即将提交入场订单时才执行——例如,在同一个受保护分支中设置 `_primary_enter`/`_primary_qty` 并扣除 `cash_left`;或者在构建 `missing` 时应用 `<= 0` 过滤器,让主标的从循环中排除,而不是先预留资金再否决。
PRIMARY 腿(0700)的门控方式与其他 23 条腿不同。`_deploy()` 对所有标的采用相同方式确定篮子,并在第 224 行为主腿扣除 `cash_left`,但只有当 `should_enter()` 也在第 269 行看到 `signal <= 0.0` 时,主腿订单才会实际提交。在再平衡边界日,主腿按构造必定位于 24 的底部 -6,因此其去均值收益严格为负,该门控不起作用。然而,在 RETRY 交易日,主腿可能在边界日无法获得资金,而后每个交易日都会重试,直至下一个边界;此时,`rel` 已在新的 21 交易日窗口上重新计算,主腿的去均值得分可能已转为正值,但它仍位于 `self._targets` 中。于是主腿被静默跳过,但在同一次 `_deploy()` 调用中,其全额 `per_name` 成本已经从 `cash_left` 中扣除,导致循环中后续标的可能因这笔实际未支出的资金而无法获得资金。23 条额外腿没有此类否决。
无需更改。如果为了与离线复制结果一致而必须使用精确的 21 交易时段窗口,可将主腿收盘价记录在不依赖 `on_bar` 的状态中(例如,也在不受 bar 限制的钩子中记录主腿),使其历史数据具有与额外腿相同的缺口结构。
基础模板中的跨腿对齐屏障(`_maybe_process_primary` 等待所有 23 条同时间框架额外腿都在主腿时间戳处有一根 bar)意味着,只要 ANY 个标的之一的 24 出现单个缺失/停牌交易时段,整个策略就会跳过该时段。由于主腿收盘价记录在 `calculate_signal` 中(仅在屏障通过时运行),而额外腿记录在 `on_extra_bar` 中(始终运行),主腿的 `_hist` 会出现额外腿没有的缺口,因此 `ref_ts = prim_ts[-1 - lookback]` 可能会回溯到 22 个或更多日历交易时段之前,而非恰好 21。此处影响有限且无害(`_close_at` 二分查找以时间戳为键,因此所有 24 条腿仍测量 SAME 窗口,而 `_tol_ns` = 10 天涵盖农历新年),被跳过的边界时段只会将再平衡推迟至新月份的首个已处理时段。特此标记,避免在与使用无缺口交易时段索引的离线复制结果比较时,被误认为是回看期错误。
分析师在回测审查时应权衡三件事,它们都不是代码缺陷。(1)COSTS ARE NOT CHARGED:HKEQ 目录中的工具是 NautilusTrader `Equity` 对象,且 `BacktestRunner._apply_fees()` 每次都原样返回 `Equity`(提前返回的注释专指 US:“免佣零售交易执行才是该市场的实际情况”)。HKEQ 的 VenueConfig 声明 maker_fee=taker_fee=0.0011(每边 0.11% 印花税 + 征费),但这些费用从未传递到 instrument;沙盒也证实了这一点:total_commission=0.0,commission_pct_of_gross=0.0,impact_folded=false。约 0.22% 的法定往返成本,加上 4bp 的半点差——这是该假设唯一围绕的成本——并未计入报告的 PnL。更糟的是,`promotion_gates.ROUND_TRIP_COST_PCT['HKEQ']=0.10` 也省略了印花税,因此经济性门槛也不会重新计入该费用。请手动扣减:测得的换手率约为每月交易 0.7 的 6 只股票组合,即每月约 0.15-0.22% 的 NAV,年化约 1.8-2.6%,而沙盒 CAGR 为 2.44%。仅这一项就大致抹去了沙盒收益。(2)DEVELOPER 的 OWN 对完全相同规则、使用相同 2018-2026 HK 收盘价所做的离线复制显示,去均值后的输家组合 GROSS 为每月 0.18%,而等权全体组合为每月 0.35%——即成本前相对 alpha 为 NEGATIVE。沙盒结果与此判断一致(Sharpe 为 0.198,CI -0.654..0.959,PSR 0.543,Calmar 为 0.09,最大 DD 27.1%,水下持续 1705 天;alpha/beta/information_ratio 均为 null,因此从未计算相对组合比较)。有文献记录的亚洲(日本除外)1 个月反转溢价是该策略的前提,而唯一的内部证据表明,在 HSI 蓝筹股的 21 交易时段期限上并不存在这一溢价。(3)impact_cost_pct=21.4% 的毛收益,基于 HKD 100k 组合规模、capacity_usd 2.19M——虽在 50% 软性底线之内,但对于一个声称优势仅约为每月 0.7% 的机制而言影响显著。建议在作出任何优化决定之前,先对完整回测按每月约 4.2 次轮换应用明确的 0.30% 往返成本扣减。
回测评审
- 夏普
- -0.10
- 总收益率
- -12.02%
- 最大回撤
- 32.34%
- 总交易数
- 445
- 胜率
- 50.6%
- 盈利因子
- 0.93
真正新颖的交易场所/价格环境(HKEQ,此前零次实验),在四种不同的宏观环境下拥有干净的2018-2026日度历史
样本量大且可靠:8.6 年间有 445 笔单一名称交易,约 104 次月度再平衡——并非会扼杀 ETF 轮动策略的低交易笔数陷阱
机制按描述实现:仅做多、始终持仓、由 6 只去均值亏损股构成的篮子;对持续处于底部 k 位的标的抑制换手(平均持有 40 天,不做空)
在可靠样本中期望值为负:PF 0.933,total_return -12.02%,CAGR -1.52%,夏普比率 -0.098,每笔交易期望值为 -$27.02
avg_trade_return_pct 0.109%约为0.30% HKEQ往返成本下限的1/3——而亏损是BEFORE成本
成本从未计入:total_commission 0.0,commission_pct_of_gross 0.0,impact_folded 为 false——约 0.22% 的法定往返成本加价差(即 NAV 的每年约 2%)未计入报告的损益
在 6 个自然年中的 9 年为负;在 CALM 波动率三分位组(-15.1%)中亏损最严重,因此失败是基准情形,而非压力测试造成的假象
最大回撤 32.3%,水下持续 2833 天
QA 对优势的担忧得到证实:开发者自己的离线复现测得,去均值亏损股篮子毛收益为每月 0.18%,而等权标的池为每月 0.35%——计入任何成本之前相对 alpha 为负,完整回测也复现了这一结果
结局总结
在将多工具篮子提交至流程之前,先确认该横截面溢价在完全相同的标的池中扣除成本前确实存在——开发者自己的离线复现已经显示,亏损股篮子每月为 0.18%,而等权标的池每月为 0.35%,即相对 alpha 为负,任何参数搜索都无法修复——并检查交易场所费用是否确实由引擎计入,再解读每笔交易回报。
分析师的回测审查门槛在优化前返回了 `abandon`:在可靠的 445 笔交易样本上,期望收益为负,假设的优势经测量并不存在;在 9 个日历年中的 6 个年份亏损,且在低波动率三分位组表现最差(-15.1%)。从未进入优化、分析、风险审查和晋级阶段。
一个仅做多的 HKEQ 篮子,每隔 21 个交易日,从固定的 24 只 HSI 蓝筹股池中买入表现相对最差的 6 只(收益相对于标的池中位数去均值),并持有一个月,押注香港大盘股存在 1 个月的横截面反转溢价。
在 2018-01-02 至 2026-09-10 期间(2,058 个数据日,2,146 根 bar),进行了 445 笔做多交易,胜率为 50.6%,但结果亏损:总回报 -12.02%,CAGR -1.52%,夏普比率 -0.098,利润因子 0.933,期望值为每笔 -$27.02,最大回撤 32.3%,水下持续 2,833 天。平均单笔交易回报为名义金额的 0.109%,佣金记录为 0.0(total_commission 0.0,commission_pct_of_gross 0.0,impact_folded 为 false),因此连这个数字也尚未计入约 0.30% 的 HKEQ 往返成本。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。