跳至正文
全部策略

策略

美股行业ETF三年输家—赢家逆向组合

结局: 已放弃

UseqSectorLongHorizonContrarianBasket

结局总结

UseqSectorLongHorizonContrarianBasket测试了三年输家减赢家的行业ETF组合,并按年更换。经过八轮迭代,修复后的生命周期连续执行了20个年度组合,但回测收益为-15.4953%,夏普比率为-0.1574,平仓交易平均收益为负。回测评审在优化前放弃了该测试规格,但没有否定长期逆转这一普遍思路。

假设

研究负责人根据发明者量化-小小梦《量化交易「从均值回归看逆向投资」》提出:将多年输家随后跑赢多年赢家的观点,操作化为美国行业ETF的长期横截面逆向组合。采用USEQ日线,买入过去三年表现最差的两个行业ETF,同时卖空表现最好的两个,持有一年后平仓并重新排序。行业ETF、组合数量、一年持有期和保护性止损均为研究负责人的选择,并非原作者提供的交易规则。三至五年形成期保留为优化范围;本实验不复现原论文的股票样本、盈利分析或三年持有结果。成交使用决策日收盘市价,不要求下一交易日开盘成交。仅使用拆股调整价格;平台不计股息,因此测试的是价格逆转,而非完整总回报策略。

这是对源文章关于股票和行业长期逆转观点的直接价格操作化,没有把多年逆向投资改写为分钟级RSI反弹,也没有将股票研究换成资金费率机制。组合采用固定且明确的九个行业ETF,不依赖缺失的历史股票指数成分或市值数据,并且只在所有ETF均已存在且有充足历史后开始。它增加了多标的、多空研究,针对当前单标的62.9%和仅做多80.7%的集中问题。corpus_concentration为空,无法声称这些ETF近期未在实验中使用。选择USEQ,而不是为了满足加密场所配额而改变源机制。不使用下一交易日开盘订单、可选的同柱止盈止损政策或独立对冲模式。长期持有导致样本较少,应将证据不足报告为低置信度,而非据此拒绝测试。

negative_expectancy:拒绝优化这一由研究负责人提出的行业ETF、三年形成期和一年持有期操作方案。生命周期修复后,年度组合得以持续执行,但平仓交易的实测经济表现仍为负,且低于USEQ评审底线。没有经验证的实现修复或有实测证据支持的盈利参数区间,因而不支持再次进行开发迭代。这否定的是所测试的规格,并非源作者的策略或长期逆转这一普遍思路;其他形成期和持有期尚未测试。

实现

按 756 个交易时段的拆股调整后价格回报对九只同步的 USEQ 行业 ETF 排名;买入表现最差的两只,并做空表现最佳的两只,多头和空头各自采用等额配置;按固定的 252 个交易时段周期轮换,并设置 20% 保护性止损,不补回止损平仓的头寸。

通过明确配置主标的和全部八个额外标的为1-DAY根K线,并保留固定的bar_interval参数,修复第1.5层不匹配。现有排名、执行、仓位和日历逻辑均未改变;仅在源代码文档字符串中明确标出所需周期。此反馈涉及配置一致性,不构成放弃该假设的证据。

验证结果

沙盒在保护性止损附近平掉了两笔亏损头寸,并保留两笔未平仓头寸。这项截断的冒烟测试无法证明长期盈利能力;完整历史评估应考察扣除价差、冲击成本和卖空借券成本后的逆转收益。

回测评审

夏普
-0.16
总收益率
-15.50%
最大回撤
29.45%
总交易数
78
胜率
42.3%
盈利因子
0.76

年度更换已恢复:交易记录显示连续执行了20个年度组合,每个组合均建立两条多头腿和两条空头腿。此前跳过年份的问题已不再出现。

代码按跟踪价格对输家和赢家排序,并以资金为基准确定仓位;初始多空两侧名义金额各约为$12,500。

全部九项输入审计均通过;accounting_valid 和 metrics_reliable 均为真。

在78笔平仓交易中,平均收益占名义金额的-1.9025%,低于+0.05% USEQ评审底线;盈利因子为0.763,平均盈亏为-$243.73。

总回报为 -15.4953%,尽管期末未实现收益有 +3.5685 个百分点。夏普比率为 -0.1574。完整历史结果印证了 QA 对经济性的担忧。

78条腿约对应20次年度组合观察,并非78笔独立的组合投资。没有优化扫描证明存在盈利参数区间。

benchmark_meaningful为false;单腿买入并持有比较无法决定这一结论。

分析

不要优化或重新调整参数。重现2005-01-10边界:四条2004腿已平仓,但直到2006-01-10才出现替换成交。通过现有审计日志追踪该边界的撤单、平仓、开仓和确认流程;比对已提交订单、成交、持仓更新以及引擎是否抑制入场。确认本报告运行的是否为所提供的代码版本。要求每个符合条件的边界都在允许的决策收盘时点确认恰好四笔按最新排名建立的替换成交,否则明确报告执行失败;成功运行不得静默跳过替换。验证连续年度边界,包括重新选中的标的,并在再次进行完整历史评审前提供边界到成交的核对记录。现有回调和警报尚未证明该问题已修复,因此应找出实际失败的环节,而非重复先前的回调建议。 ## 知识库改进建议(来自知识库;应进行测试,不要直接假定有效) 知识库中的订单管理示例支持在进入下一轮轮动前验证完成情况,并区分终态订单与已成交订单。在解读业绩或修改交易参数前,先解决跳过2005替换的问题。 1。[条目] 要求每个年度边界都有经过核对的替换组合:保持所有交易参数不变。重现2005-01-10并确认执行的策略产物与所提供版本一致。将撤单、平仓、开仓和确认状态与已提交订单、成交、持仓更新以及引擎入场抑制情况进行核对;修复前先找出第一个失败的环节。每个符合条件的边界都必须在允许的决策收盘时点,确认基于权益计算的整股替换成交:恰好两条按最新排名选出的多头腿和两条空头腿,包括重新选中的标的。只有旧持仓已平仓、替换成交已核对并对应新持仓、轮动订单状态已解决后,才推进已完成周期状态。保留rotation_poll_ns=1000000和rotation_timeout_ns=1000000000。缺失、被抑制、被拒绝、部分成交或延迟的替换成交都必须明确报告为执行失败。验证连续年度边界,并在再次进行完整历史评审前提供边界到成交的核对记录。分析师报告旧腿在2005平仓,但直到2006才出现替换,因此夏普比率0.059和盈利因子1.068尚不能可靠地评估预期策略。教程要求等待订单完成后再继续。高级文档说明已取消的执行任务会停止接受目标,并展示了在创建替换任务前等待取消完成的做法。场景参考资料则会在订单终结时检查剩余数量。这些资料支持生命周期和成交核查,但无法证明实际的NautilusTrader故障;本建议明确验收标准,不断言故障诊断结论,也不重复回调建议。(来源:t41.py p.1;TargetPosTask 高级功能 p.1;Scenario And Margin p.1)

迭代历史

验证失败(第1层——静态分析): - 禁止导入:src.data.market_calendar——策略只能导入框架基类和辅助模块(src.strategies.base_template、src.strategies.rolling_options_template、src.strategies.polymarket_series_template、src.strategies.helpers);采集器、数据库、回测引擎和注册表均在沙盒范围之外。(第11行)

验证失败(第4层——QA评审)[类别=code_defect]: - [edge_concern] 截断的沙盒测试无法证明盈利能力。应在完整历史数据上核对平仓亏损、剩余库存、价差、冲击成本和借券成本;还需核对报告的275.12%敞口与配置的50%入场总敞口是否一致。 - [critical] open_pending_basket要求self.clock.timestamp_ns() == self.decision_ns。基础模板明确区分模拟回测时钟与模拟盘/实盘使用的挂钟。因此,即使同步的日线K线只是在收盘时间戳之后稍晚处理,也会在提交选定入场订单前触发rotation_execution_missed。尽管通过沙盒测试,这仍使组合无法在常规模拟盘/实盘操作中执行。(第179行) — 修复:依据同步K线的时间戳验证决策,并区分模拟执行时间与模拟盘/实盘的送达时间。使用平台支持的收盘处理语义,并明确过期决策政策,不要求挂钟时间与历史K线时间戳完全相等。 - [warning] 策略维护自己的交易所假期和交易时段枚举,而未使用平台日历。以时间戳为锚的计划可避免进程计数器漂移,但重复维护日历规则可能导致其与数据采集和执行所用时段不一致。(第59行) — 修复:使用src.strategies.helpers.sessions.is_trading_day和session_date构建锚定的交易时段序号。保留配置的锚点和hold_bars频率;不要直接导入src.data。

依据同步K线的时间戳验证决策,并区分模拟执行时间与模拟盘/实盘的送达时间。使用平台支持的收盘处理语义,并明确过期决策政策,不要求挂钟时间与历史K线时间戳完全相等。

open_pending_basket要求self.clock.timestamp_ns() == self.decision_ns。基础模板明确区分模拟回测时钟与模拟盘/实盘使用的挂钟。因此,即使同步的日线K线只是在收盘时间戳之后稍晚处理,也会在提交选定入场订单前触发rotation_execution_missed。尽管通过沙盒测试,这仍使组合无法在常规模拟盘/实盘操作中执行。

使用src.strategies.helpers.sessions.is_trading_day和session_date构建锚定的交易时段序号。保留配置的锚点和hold_bars频率;不要直接导入src.data。

策略维护自己的交易所假期和交易时段枚举,而未使用平台日历。以时间戳为锚的计划可避免进程计数器漂移,但重复维护日历规则可能导致其与数据采集和执行所用时段不一致。

验证失败(第4层——QA评审)[类别=code_defect]: - [edge_concern] 截断的沙盒测试无法证明盈利能力。应在完整历史数据上评估扣除价差、冲击成本和借券成本后的价格逆转;未计入股息。 - [critical] 多头和空头排名分别按标的代码ID升序打破平局。形成期收益相同时,两侧都会选中XLB和XLE,且basket_size=2。出现重叠后会调用rotation_failure(),并将rotation_phase永久设为'failed';后续信号评估会再次报错。因此,有效的价格持平输入会使策略失效,而非按所述确定性排名处理。(第324行) — 修复:以确定性方式消解并列选择,使两侧组合互不重叠,同时保留各侧按标的代码ID升序的优先级;例如先选输家,再从剩余标的中选赢家。验证充分完成预热且处于日历边界、收益相同的情形。

以确定性方式消解并列选择,使两侧组合互不重叠,同时保留各侧按标的代码ID升序的优先级;例如先选输家,再从剩余标的中选赢家。验证充分完成预热且处于日历边界、收益相同的情形。

多头和空头排名分别按标的代码ID升序打破平局。形成期收益相同时,两侧都会选中XLB和XLE,且basket_size=2。出现重叠后会调用rotation_failure(),并将rotation_phase永久设为'failed';后续信号评估会再次报错。因此,有效的价格持平输入会使策略失效,而非按所述确定性排名处理。

验证失败(第1.5层——假设/配置一致性)[类别=hypothesis_mismatch]: - optimization_plan将bar_interval固定为1-DAY

结局总结

恢复一致的年度执行后,仍未能证明该测试规格具有经济优势;其他形成期和持有期尚未测试。

回测审查给出了放弃的判定,因为修复年度篮子生命周期后,期望收益仍为负,低于 +0.05% USEQ 的审查下限。未进行优化,也未进入后续分析师和风险审查。

买入过去三年表现最差的两个US行业ETF,并卖空表现最好的两个,每年更换组合,以测试不含股息的长期价格逆转。

回测收益为-15.4953%,夏普比率为-0.1574,最大回撤为29.4461%,在约20个年度组合中平仓78笔。平仓交易平均收益占名义金额的-1.9025%,盈利因子为0.763。

分析

量化交易「从均值回归看逆向投资」

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。