跳至正文
全部策略

策略

大宗商品ETF 12月动量:按自身趋势方向筛选排名极端的标的,在USEQ只商品ETF(GLD、SLV、USO、UNG)中做多最强、做空最弱;每21个交易日调仓,按波动率倒数确定仓位,明确空仓状态(USEQ 1-DAY)

结局: 已放弃

CommodityEtfRankExtremeTsmomLS

结局总结

CommodityEtfRankExtremeTsmomLS 将 Quantpedia/QuantConnect 的商品动量策略调整为适用于四只 USEQ 商品 ETF,并且仅当该品种自身的 12 个月趋势符号与对应仓位腿的方向一致时,才持有该腿。鉴于此前发生过沙盒超时,设计要求每根柱线的工作量为 O(1),代码也使用了定长双端队列和滚动总和。尽管如此,经过 3 次迭代后,该策略仍在 2400 天、GLD 窗口内超过第 3 层沙盒的 300 秒限制,并在验证循环中止。它从未进入回测、优化、分析师审查或风险审查阶段,因此没有任何表现指标。

假设

策略思路取自 QuantConnect 图书馆文章,该文章沿用 Quantpedia 的研究。原研究按12个月收益率对商品期货排名,做多排名最高的五分位、做空最低的五分位,并按月再平衡。我们没有连续的CME/ICE期货。USEQ确实包含我们范围文件中的所有商品期货或实物ETF:GLD(黄金,来自2004)、SLV(白银,来自2006)、USO(近月WTI期货,来自2006)以及UNG(近月 Henry Hub 期货,来自2007)。UNIVERSE RULE:范围包含 config/us_equities_universe.txt 中所有追踪商品的ETF,按时点数据纳入,而非从幸存者中手动挑选。只有在再平衡日已有至少253个日交易时段历史的标的才符合条件。若有4个标的,每个五分位就只有一个标的,因此组合有两个仓位:排名最高的标的(多头腿)和排名最低的标的(空头腿)。教训137提醒,不要始终保持中性组合;教训150则提醒,不要采用永不空仓的设计,因此每条腿都取决于各自12个月收益率的正负。此条件是 Moskowitz-Ooi-Pedersen……展开收起

策略思路取自 QuantConnect 图书馆文章,该文章沿用 Quantpedia 的研究。原研究按12个月收益率对商品期货排名,做多排名最高的五分位、做空最低的五分位,并按月再平衡。我们没有连续的CME/ICE期货。USEQ确实包含我们范围文件中的所有商品期货或实物ETF:GLD(黄金,来自2004)、SLV(白银,来自2006)、USO(近月WTI期货,来自2006)以及UNG(近月 Henry Hub 期货,来自2007)。UNIVERSE RULE:范围包含 config/us_equities_universe.txt 中所有追踪商品的ETF,按时点数据纳入,而非从幸存者中手动挑选。只有在再平衡日已有至少253个日交易时段历史的标的才符合条件。若有4个标的,每个五分位就只有一个标的,因此组合有两个仓位:排名最高的标的(多头腿)和排名最低的标的(空头腿)。教训137提醒,不要始终保持中性组合;教训150则提醒,不要采用永不空仓的设计,因此每条腿都取决于各自12个月收益率的正负。此条件是 Moskowitz-Ooi-Pedersen 时间序列动量条件,属于动量本身,并非额外的市场状态过滤器。只有当排名最高标的的12个月收益率高于0时,才持有多头腿。只有当排名最低标的的12个月收益率低于0时,才持有空头腿。两条腿彼此独立,因此组合可能仅做多、仅做空、多空并存或空仓。预计空仓时间:多头腿约有15-20%的月份处于空仓,空头腿约有35-45%的月份处于空仓。经济成因:商品动量主要来自展期收益,以及持续存在的库存状态(Erb-Harvey;Gorton-Hayashi-Rouwenhorst)。现货溢价、低库存的商品会继续上涨;而升水较重的商品(UNG,或供应过剩时的USO)会在展期过程中持续亏损。承担成本的是被动持有多头并展期的投资者,以及进行套期保值的生产商。单笔交易测算:横截面商品动量溢价每条腿每月约为0.5-1.0%。平均持有期约为2.5-3个再平衡周期,因此每笔交易的预期毛收益约为1.5-2.5%。这些高流动性 ETF 的USEQ往返交易成本(价差加冲击成本)约为0.05%,因此优势超过30x成本。交易次数:从2007到2026约有228次月度再平衡,其中约35-40%次会有一条腿更换标的或状态。历史期间约完成160-190次往返交易,样本外期间约有40次。仓位规模:每条启用腿的权重为权益的 min(0.5, 0.15 / realized_vol_63d_annualized)。这是按波动率倒数确定仓位规模,因此波动率为50%的UNG约占30%,而波动率为15%的GLD受上限约束,为50%。总敞口不超过100%,远低于 Reg-T 的2x。性能说明(根据近期沙盒超时情况):每根 K 线的计算量必须为 O(1)。为每个交易品种保留一个固定长度的双端队列,存放最近253个收盘价,并维护滚动的63日对数收益率之和及平方和。只在再平衡 K 线上排名,绝不重新扫描历史数据。

移除了每根柱线的执行重试路径和反复扫描订单/仓位缓存的逻辑。现在仅在按日历锚定的再平衡柱线上进行对账,同时保留固定大小的滚动状态和现有信号逻辑。

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

实现

每 30 个日历日按过去 12 个月收益为商品 ETF 排名;仅在最强品种收益为正时持有多头,仅在最弱品种收益为负时持有空头,并按波动率倒数调整仓位且设上限。

验证结果

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

结局总结

多工具策略在重新提交前必须经过分析,确认在沙盒中每根柱线的成本确实为 O(1)。该策略假设已要求使用 O(1) 个双端队列和滚动总和,但这仍不足以通过超时检查,因此应检查剩余的每柱工作量(例如是否每根柱线都查询各工具的缓存/订单并排序,而不是仅在再平衡柱线上执行)。

经过 3 次迭代后,运行在验证循环中止。第 3 层沙盒回测在约 20,000 根柱线的窗口(GLD.USEQ-1-DAY 的 2400 天)内超过了 300 秒的墙钟时间限制,这通常意味着每根柱线的工作量会随历史长度增长。

一种在 USEQ 只商品 ETF(GLD、SLV、USO、UNG)上运行的 12 个月横截面商品动量策略:仅当最强品种的 12 个月收益为正时做多,仅当最弱品种的 12 个月收益为负时做空;每 21 个交易时段再平衡并按波动率倒数调整仓位。其依据是展期收益和持续存在的库存状态驱动商品动量。

未测量策略表现:没有回测报告,也没有优化报告,因此没有收益、夏普比率或交易次数数据。

分析

商品期货中的动量效应

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