跳至正文
全部策略

策略

USEQ资产类别轮动动量:按12个月回报,在5只资产类别ETF(SPY/EFA/EEM/IEF/GLD)中持有排名前-3的标的,等权配置,每月再平衡,日线,仅做多且不加杠杆

结局: 已放弃

UseqAssetClassTop3MomentumRotation

结局总结

假设提出对资产类别动量轮动策略进行为期20年的USEQ测试:在-5中选取排名前-3的标的(SPY/EFA/EEM/IEF/GLD),按月再平衡,以便为研究语料库加入一种非加密货币机制。开发者完成了部分实现,包括排名、等权槽位配置,以及可选的绝对动量SHY过滤器。编码阶段三次超时,运行以“coding_stuck_3_timeouts”为由放弃。未生成回测、优化或分析师结论,因此这一思路本身仍未经过测试。

假设

分类:(a)具体交易想法。来源给出的资产类别ETF范围为5只,按12个月变化率排序,持有排名最高的3只并等权配置,每月再平衡。Quantpedia原始范围为SPY、EFA、IEF、VNQ、GSG。我们的USEQ范围文件既没有VNQ,也没有GSG(已检查:其中有AGG EEM EFA GLD IEF IWM LQD QQQ SHY SPY TIP TLT),因此我们数据中最接近且实际存在的5类范围是SPY(US股票)、EFA(除US外的发达市场股票)、EEM(新兴市场股票)、IEF(7-10年期美国国债)和GLD(黄金,作为实物资产/商品配置)。替代项:以EEM替代VNQ,以GLD替代GSG。这是一组在查看结果前选定的资产类别,而非精挑细选的股票名单(经验教训151):每只ETF都是其类别的标准流动性代理,且五只标的在整个测试期间均已存在并具备流动性。范围包含5个标的,远低于经验教训173所述约10个的上限,因此每月排序只需5次O(1)查找。日线历史记录:GLD始于2004-11,其他标的更早,因此经过252个交易日的预热期后,首次再平衡约在2005-11。这提供了约20年的数据和约240次再平衡,涵盖了2008、2013(缩减购债)、2020、2022(债券与股票同步下跌)以及2023-26期间的黄金涨势。交易场所:USEQ,零佣金,价差和冲击成本合计单次往返约0.02-0.05%。策略工厂仅在2.5%项实验中的USEQ项进行了运行,而这些实验均未采用此类日频多资产轮动。其机制是宏观资产类别的长期时间序列动量与跨资产动量(Asness-Moskowitz-Pedersen 2013)。它与加密货币微观结构毫无关系,因此为一个67% BINANCE的研究语料库增添了新的机制。风险特征:总敞口为1.0x,不使用杠杆,每项持仓占权益的三分之一,不设止损(每月轮动IS退出;在日频轮动组合中设置止损会增加额外的拟合参数)。空仓状态:主要变体始终投资于5只ETF中的3只,空仓比例约为0%。该策略只做多,因此不会因多空方向翻转而支付双倍名义金额;经验教训-150中关于“永不空仓”设计的担忧针对的是方向翻转成本,这里并不适用,且每月换仓的标的仅约0.5-1只。PRE-REGISTERED SECOND VARIANT,单独评分,且NOT属于主要结论(经验教训130):绝对动量筛选机制会将任何负12个月回报的排名前-3标的中三分之一转入SHY(现金代理)。预计该变体在SHY中约有15-25%的时间处于空仓状态。

迭代2:唯一改动是修复层级-2崩溃。_pending()调用了self.cache.orders_inflight,而合成模拟缓存未提供该方法。现在始终使用orders_open,仅当缓存提供orders_inflight时才调用它(真实的NautilusTrader缓存确实提供该方法)。信号、再平衡、仓位规模和配置均未改变。总敞口最多为权益的0.97x:卖出在一个交易时段进行,买入在之后的交易时段进行。

coding_stuck_3_timeouts

实现

每月(按日历锚定)轮入过去252个交易时段回报排名前-3的SPY/EFA/EEM/IEF/GLD,每只等权配置1/3,仅买入整股,只做多、不加杠杆,使用USEQ日线。预注册变体(use_abs_filter=True)将动量为负的槽位转入SHY。

迭代历史

验证失败(层级2—合成场景): 使用的参数:['top_n', 'cash_symbol', 'min_notional', 'notional_pct', '_param_bounds', 'abs_threshold', 'lookback_bars', 'use_abs_filter'] 请确认__init__从self.parameters.get()设置了所有属性。 - steady_uptrend:AttributeError:'_MockCache'对象没有属性'orders_inflight'(K线时间戳:1735704780000) - steady_downtrend:AttributeError:'_MockCache'对象没有属性'orders_inflight'(K线时间戳:1735704780000) - flat_ranging:AttributeError:'_MockCache'对象没有属性'orders_inflight'(K线时间戳:1735704780000) - volatility_spike:AttributeError:'_MockCache'对象没有属性'orders_inflight'(K线时间戳:1735704780000) - zero_volume:AttributeError:'_MockCache'对象没有属性'orders_inflight'(K线时间戳:1735704780000) - price_gap:AttributeError:'_MockCache'对象没有属性'orders_inflight'(K线时间戳:1735704780000)

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

结局总结

多腿日线轮动代码包含持久化槽位状态,以及分阶段退出和入场,但在编码阶段三次超时。因此,今后尝试时应从更简单的最小实现开始(例如仅实现主要变体),以便在编码时限内完成。

运行在编码阶段以“coding_stuck_3_timeouts”为由放弃,经过了3次迭代。它未进入验证、回测审查、优化、分析师审查或风险审查阶段。

在USEQ上进行仅做多、不加杠杆的月度轮动,根据12个月回报为五只资产类别ETF(SPY、EFA、EEM、IEF、GLD)排名,并以等权持有排名前3只,依据跨资产时间序列动量(Asness-Moskowitz-Pedersen 2013);预注册变体会将回报为负的前-3名中的任何标的转入SHY。

没有绩效数据:回测报告为空,没有运行优化,也没有夏普比率、回报或交易次数数据。

分析

资产类别动量

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