跳至正文
全部策略

策略

个股相对自身行业的 ETF 残差冲击反转:对 20 个 US 大盘股在 5 个交易时段内出现的幅度大于等于 2.5 倍标准差的特异性异动进行反向交易,并以各自所属的 SPDR 行业 ETF 进行贝塔对冲,固定持有 10 个时段(USEQ 1-DAY)

结局: 已放弃

StockSectorEtfResidualShockReversal

结局总结

该假设提出了一种行业相对残差反转策略,以 20 个 US 大盘股和四只 SPDR 行业 ETF 为标的进行贝塔对冲;其前期研究报告称,每个事件的优势虽小但为正。开发者构建了 O(1) 滚动统计实现,并经过 3 次迭代修改。第 3 次迭代旨在将配置设为计划指定的固定杠杆 2.0,但验证仍未通过 Layer 1.5 假设/配置一致性检查中的杠杆要求。运行以验证循环告终并被放弃,因此未进入回测、优化、分析师审核或风险评估阶段。

假设

多标的、多空、贝塔对冲事件策略,使用USEQ 1-DAY柱数据,纯粹基于OHLCV。行业ETF的日线历史始于1998,个股数据更早。交易范围:4个SPDR行业ETF,每个ETF包含其5个最大成分股:XLE {XOM, CVX, COP, EOG, SLB}, XLF {JPM, BAC, WFC, C, GS}, XLU {NEE, DUK, SO, D, AEP}, XLP {PG, KO, PEP, WMT, COST}。每只股票的日残差为e_t = r_stock - beta*r_etf,贝塔由滚动120个交易日回归得出,数据截至前一交易日。信号为 z = sum(e, 5) / (sd(e,120) 滞后 5 个交易日 * sqrt(5))。当 |z| >= 2.5 时,做该股票的反向头寸,并在其行业ETF中按股票名义金额的贝塔倍数对冲,持有10个交易日。机制:承接由股票特有的1周价格压力(资金流、块交易、对新闻的过度反应)带来的流动性提供溢价。这是Lehmann 1990、Lo-MacKinlay 1990和Da-Liu-Schaumburg……展开收起

多标的、多空、贝塔对冲事件策略,使用USEQ 1-DAY柱数据,纯粹基于OHLCV。行业ETF的日线历史始于1998,个股数据更早。交易范围:4个SPDR行业ETF,每个ETF包含其5个最大成分股:XLE {XOM, CVX, COP, EOG, SLB}, XLF {JPM, BAC, WFC, C, GS}, XLU {NEE, DUK, SO, D, AEP}, XLP {PG, KO, PEP, WMT, COST}。每只股票的日残差为e_t = r_stock - beta*r_etf,贝塔由滚动120个交易日回归得出,数据截至前一交易日。信号为 z = sum(e, 5) / (sd(e,120) 滞后 5 个交易日 * sqrt(5))。当 |z| >= 2.5 时,做该股票的反向头寸,并在其行业ETF中按股票名义金额的贝塔倍数对冲,持有10个交易日。机制:承接由股票特有的1周价格压力(资金流、块交易、对新闻的过度反应)带来的流动性提供溢价。这是Lehmann 1990、Lo-MacKinlay 1990和Da-Liu-Schaumburg 2014记录的残差短期反转。以股票所属行业为基准衡量,因为行业走势具有趋势性,而行业内残差会回归。零USEQ佣金使每次事件约0.3%的优势可行。PRE-STUDY来自仓库内目录,2008-2026,使用这些确切的20名称和规则,每个名称最多同时持有一个未平仓事件:911次事件(约49/年)。平均10个交易日残差捕获为股票名义金额的+0.33%,中位数为+0.22%,胜率为54.3%,单次事件标准差为3.6%,t值约为2.75。19年中有13年为正;自2020以来,356次事件的均值为+0.39%。全部4个行业均为正(XLF +0.64%、XLU +0.35%、XLP +0.20%、XLE +0.15%)。在更广泛的41只股票检验中,反向做多头行情(+0.34%)和反向做空头行情(+0.33%)的收益大致相同。该检验包含1865次事件,均值为+0.33%。尽管XLE表现最弱,仍予以保留,以避免依据样本内结果挑选名称。此策略入选原因:USEQ占语料的5.4%,多空策略占16%,而Binance/BTC比例过高。触发条件是价格观察值,而非日历日期(L179)。这不是由资金费率或未平仓量条件控制的加密货币永续合约交易(L111)。与已放弃的双重股权类别OU价差和正在研究的双寡头配对不同,本策略不拟合协整关系:对冲标的是股票所属行业ETF,较高的阈值只筛选较大的残差变动。IMPLEMENTATION NOTE:此前两次USEQ多名称运行都触及300秒沙盒超时,因此每项统计量都必须以每根柱O(1)的复杂度更新。每个名称保留固定长度的残差缓冲区,为120交易日贝塔计算x、y、x^2和xy的滚动和,计算5交易日残差滚动和,并计算120交易日标准差的滚动和与平方和。切勿在on_bar或on_extra_bar中重建列表、调用pandas或重新扫描历史数据。只有该日期的全部24根柱数据到齐后,才处理该日期。

verification_loop:验证失败(Layer 1.5 — 假设/配置一致性)[类别=hypothesis_mismatch]: - optimization_plan 将杠杆固定为 2.0

实现

在 20 个 US 大盘股中,做空个股相对行业的显著残差冲击;使用按贝塔加权的行业 ETF 对冲,同时最多持有八个事件,基准持有 10 个交易时段,并设置残差风险止损。

针对报告中的 Layer 1.5 失败,将 config.leverage 设为研究计划指定的固定值 2.0。现有的相对权益配对仓位已乘以 self.config.leverage,因此此修正提供了预期敞口。保留可执行策略逻辑;仅在源文档字符串中记录此修正。仍配置了指定的全部 24 个标的,包括假设描述明确要求、但在 market_context.instruments 中遗漏的四个 XLP 成分标的。未运行验证。由于本次会话的文件系统权限为只读,无法写入请求的 outbox 文件;完整的任务相关 JSON 已直接返回。

验证结果

验证失败(Layer 1.5 — 假设/配置一致性)[类别=hypothesis_mismatch]: - optimization_plan 将杠杆固定为 2.0

迭代历史

sandbox_timeout:验证失败(Layer 3 — 沙盒回测):在约 20000 根线的窗口内,冒烟测试超过 300 秒墙钟时间限制(2400 天、每XLF.USEQ-1-DAY-LAST-EXTERNAL根柱)。这几乎总是意味着每根线的工作量会随历史长度增长,例如每根线都重新扫描完整的资金费率序列或补充序列,或在 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE,并使用 bisect,或按时间戳缓存查询结果,使每根线的开销为 O(log n) 而非 O(n)。

结局总结

重新提交前,请确认策略输出配置(尤其是杠杆)与假设中的 optimization_plan 完全一致,因为重复出现的 Layer 1.5 不匹配会在产生任何回测证据前终止运行。

经过 3 次迭代后,运行在 Layer 1.5(假设/配置一致性,类别 hypothesis_mismatch)的验证循环中被放弃,报错信息为“optimization_plan 将杠杆固定为 2.0”。策略从未进入回测、分析师审核或风险评估阶段。

对 20 个 US 大盘股在 5 个交易时段内出现的幅度大于等于 2.5 倍标准差的特异性残差异动进行反向交易,以其自身 SPDR 行业 ETF(XLE、XLF、XLU、XLP)进行贝塔对冲,在 USEQ 日线上固定持有 10 个交易时段,以获取短期残差反转的流动性溢价。

没有流水线回测或优化结果(回测报告为空,也没有优化报告)。唯一的数据来自假设自身的前期研究,并非流水线回测:从 2008 到 2026 共 911 个事件,每个事件平均 +0.33%,命中率 54.3%,t 值约为 2.75。

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