策略
国家-ETF 36个月输家反转,仅做多,12个重叠月度队列(8只USEQ单一国家 ETF,DAILY根 K 线)——忠实保留机制的 QuantConnect/Quantpedia 国家指数均值回归策略调整版
结局: 已放弃
CountryEtfLoserReversalCohorts
结局总结
CountryEtfLoserReversalCohorts 将一项覆盖19个国家、周期为36个月的多空反转规则调整为适用于USEQ中的8只单一国家 ETF 的策略,去掉空头腿,并采用12个重叠月度队列,各自买入收益率为负且表现最差的两只36个月输家。代码实现了自定义跨腿对齐屏障和基于双端队列的 O(1) 形成期收益率计算,遵循了假设中关于沙盒超时的警告。尽管如此,运行仍在迭代2次后因“coding_stuck_3_timeouts”而放弃,因此没有产生回测指标,也未进入审查、优化或分析阶段。
假设
来源:QuantConnect 策略库 #23《Mean Reversion Effect in Country Equity Indexes》(Quantpedia),章节“Method”。来源规则:按36个月收益率为19只国家 ETF 排名,做多排名靠后的4只,做空排名靠前的4只,每36个月再平衡。AS WRITTEN IT IS NOT TESTABLE HERE:我们的USEQ股票池只有8只单一国家 ETF(EWG、EWJ、EWT、EWU、EWY、EWZ、FXI、INDA),因此排名靠后的-4只加排名靠前的-4只就是整个股票池;每36个月再平衡,自2000以来约有7次再平衡。来源报告的收益未经核实。此调整保留了经济机制(国家指数层面的长期过度反应和估值均值回归):(1)按L137关于中性账簿的建议,并考虑到文献中的反转溢价主要来自输家腿,去掉空头腿;(2)将单次3年再平衡改为 Jegadeesh-Titman 风格的12个重叠月度队列,每个持有12个月,由此增加约12x个独立形成日期;(3)股票池按时点规则定义,而非固定名单:在USEQ股票池文件中,每只在形成日已有至少756个交易日历史的单一国家ETF均纳入。INDA于2015加入,FXI于2007加入。每月,各队列买入总价收益最差的2只36个月(756个交易日)标的,且仅限NEGATIVE个月收益率为36的标的;符合条件的标的不够时,该队列仓位留作现金。每个队列获得1/12的权益,并在所选标的间均分。给分析师的坦诚提示:该策略属于USEQ日线策略族,正是L128所指出的问题。提出这一策略是因为用户来源中的机制无法在1H或加密资产上表达(那里没有国家指数,而加密资产约6年的历史意味着36个月回看几乎没有样本),因此优先级较低,预测也较为保守。实施说明:鉴于近期2400日线窗口多次出现沙盒超时,每个ETF应保留滚动双端队列或预计算的收盘价数组,并以每根 K 线 O(1) 的成本计算756个交易日收益率。切勿在on_bar中反复扫描历史。
这是该假设对 Quantpedia 国家指数反转策略所作的 Jegadeesh-Titman 式调整:仅做多,12个重叠月度队列各持有12个月,按36个月收益率选出排名靠后的2只,要求收益率为负,每个队列分配1/12权益,股票池按时点确定。月份取自 K 线自身的时间戳,因此重启、回测和模拟盘使用相同的时间安排。队列持仓({slot: {leg: shares}})、_last_month 和 _last_eval_ts 会持久化;价格双端队列则在预热时重建。对齐规则:关闭基础的同时间框架屏障,因为尚无 K 线的腿(2012之前的INDA)会阻挡每根 K 线。改用自有屏障:只有当每个活跃腿(最后一根 K 线在10天内)都已提供时间戳恰为 ts 的 K 线时,交易时段 ts 的再平衡才会执行。因此,排名和成交使用同一时点的收盘价,决策时间之后不会出现更新的 K 线(L139)。每根 K 线的成本为 O(8):固定长度为 lookback+1 的双端队列,36个月收益率按末值/初值计算。无需重新扫描历史,因此沙盒超时不是风险(L106/L174)。总敞口至多为0.98x权益,相比USEQ的2x上限(L114)。756个交易日的预热期超过基础的500根 K 线缓冲区,因此历史数据保存在策略自有的双端队列中,且min_bars_required为1。给分析师的注意事项:(1)L175:在NETTING账户中,重叠队列按每个标的合并记账为单一仓位,并按月增减仓。total_trades会很小,avg_trade_return_pct描述的是净持有期,而非单个队列;应依据权益曲线评估。(2)沙盒约2400天的窗口,在3年预热后仅余约3.5年,且第一年队列逐步建仓,因此交易次数会较少。标的仅有8只,样本本身就很薄(正如该假设指出的L128问题)。
coding_stuck_3_timeouts
实现
仅做多36个月输家反转策略,覆盖8只USEQ单一国家 ETF(EWG、EWJ、EWT、EWU、EWY、EWZ、FXI、INDA),使用日线。每个日历月第一个对齐交易时段,重新形成队列槽位(月份 % 12)。买入756个交易日价格收益率最差的2只标的,且仅在收益率为负时买入;未填满的槽位留作现金。每个队列持有12个月,并获得98%权益的1/12,平均分配为2个标的槽位,按整股数确定规模。每个ETF的账簿目标是各队列持股数之和,每月仅交易每个ETF的净差额:增加时下达BUY,减仓时下达仅减仓的SELL,目标达到0时全部平仓。资格按时点确定:标的在本次运行中需有757个收盘价历史(INDA和FXI较晚加入)。
迭代历史
sandbox_timeout:核验失败(第3层——沙盒回测):冒烟测试在约20000根 K 线的窗口(2400天的EWG.USEQ-1-DAY-LAST-EXTERNAL)上超过300秒的运行时限。这几乎总是意味着每根 K 线的工作量随历史长度增长,例如反复扫描完整的资金费率/补充序列,或在每根 K 线的calculate_signal()/on_bar()中重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组ONCE并使用 bisect,或按时间戳缓存查询,以使每根 K 线的成本为 O(log n) 而非 O(n)。
结局总结
这种复杂的多腿、长回看期日线设计在编码完成前就因多次超时而未能推进,因此后续迭代应从更简单、成本更低且能产出首份回测的实现开始。
该策略在编码阶段因“coding_stuck_3_timeouts”而被放弃,此前已迭代2次。回测审查、分析师和风险官阶段均未运行。
Quantpedia 国别指数均值回归规则的仅做多改编:每月买入USEQ个8单一国家 ETF 中过去36个月(756个交易日)表现最差的2个,仅当其36个月回报为负时买入,并将每批12个重叠的月度持仓各持有12个月。
没有绩效数据。回测报告为空,未运行优化,也没有收益率、夏普比率或交易次数。
分析
国家股票指数的均值回归效应
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。