跳至正文
全部策略

策略

横截面RETAIL-CROWDING反向轮动,仅多头(BINANCE USD-M,8个主要币种,WEEKLY持有3 LEAST散户扎堆的品种,按GLOBAL多空账户比率——纯粹的欠持仓FACTOR,而非动量;系统性狂热现金闸门,2参数)

结局: 已放弃

RetailCrowdingContrarianRotationLong

横截面RETAIL-CROWDING反向轮动,仅多头(BINANCE USD-M,8个主要币种,WEEKLY持有3 LEAST散户扎堆的品种,按GLOBAL多空账户比率——纯粹的欠持仓FACTOR,而非动量;系统性狂热现金闸门,2参数)

假设

一种 LONG-ONLY、每周再平衡的横截面 ROTATION,覆盖 8 大型 USD-M 宇宙(BTC、ETH、SOL、BNB、AVAX、LINK、ADA、XRP),根据真正的 NON-PRICE CROWDING 信号选择标的:来自 Binance VISION“metrics”文件的 GLOBAL 多空 ACCOUNT 比率(count_long_short_ratio,一种散户持仓代理指标)(MULTI-YEAR 至约 2020,NOT该 30 日 API)。机制是纯粹的 UNDER-OWNERSHIP 因子——持有散户在其中偏向 LEAST 拥挤做多的大型标的,因为拥挤做多的标的带有潜在的多头清算/挤压下跌风险,而低持有量标的仍有被买入推高的空间。这有意属于在此处可重复存活的 ONLY 结构族——仅做多、大型标的、每周持有排名前 K、参数数量少(已部署的动量轮换夏普比率 2.6 和负资金费率套利篮子的夏普比率 1.97)——并向两者贡献一个选择键 ORTHOGONAL:既不是价格相对强弱(动量),也不是资金费率(套利),而是拥挤持仓。根据本次会话的证据,它避开了所有死亡模式:NOT 单一标的方向性计时器(这些策略在 -100% / -43% / 风险拒绝中失败),NOT 美元中性价差(没有空头腿 → 没有 90% DD 爆仓),NOT 资金费率/期权/清算/纯-OHLCV。它不同于待定的 SmartMoneyGatedMomentumRotation(后者使用 TOP-TRADER 群组来 GATE 动量组合),也不同于 EthRetail(单一标的多空反转):本策略使用 RETAIL/全球群组作为反向 LONG-ONLY 篮子中的 PRIMARY 横截面排名键,完全不包含动量成分。2 参数、K 值和节奏均冻结为经验证的模板。

修复了 QA 提出的确切缺陷。QA 否定了该排名键,因为未平仓量 (a) 不是散户代理指标——它是所有参与者的总未平仓名义金额——并且 (b) 不区分方向,因为永续合约的多头总量等于空头总量,因此无法表达“最不拥挤-LONG”。新的排名键是从 `taker_flow_by_instrument` 按每个标的读取的 `taker_long_short_vol_ratio`:它是激进 BUY 成交量除以激进 SELL 成交量,因此按构造就是 DIRECTIONAL(高值实际上意味着市场在该标的上偏向多头),并且它是攻击方/吃单方(面向散户)的指标,而不是总未平仓名义金额。它还来自假设中指定为数据源的完全相同的 Binance VISION `metrics` 文件,具有相同的多年到 -2020 历史——只有列不同。排名使用每个标的自身的 z-score(7 日均值对比 90 日均值/标准差),因此结构不同的吃单方水平可以在 BTC 和 ADA 之间比较,符合“补充数据上的固定绝对阈值不具备尺度不变性”这一经验。DISCLOSED,NOT HIDDEN:假设中明确的键是每个标的的 GLOBAL 多空 ACCOUNT……展开收起

修复了 QA 提出的确切缺陷。QA 否定了该排名键,因为未平仓量 (a) 不是散户代理指标——它是所有参与者的总未平仓名义金额——并且 (b) 不区分方向,因为永续合约的多头总量等于空头总量,因此无法表达“最不拥挤-LONG”。新的排名键是从 `taker_flow_by_instrument` 按每个标的读取的 `taker_long_short_vol_ratio`:它是激进 BUY 成交量除以激进 SELL 成交量,因此按构造就是 DIRECTIONAL(高值实际上意味着市场在该标的上偏向多头),并且它是攻击方/吃单方(面向散户)的指标,而不是总未平仓名义金额。它还来自假设中指定为数据源的完全相同的 Binance VISION `metrics` 文件,具有相同的多年到 -2020 历史——只有列不同。排名使用每个标的自身的 z-score(7 日均值对比 90 日均值/标准差),因此结构不同的吃单方水平可以在 BTC 和 ADA 之间比较,符合“补充数据上的固定绝对阈值不具备尺度不变性”这一经验。DISCLOSED,NOT HIDDEN:假设中明确的键是每个标的的 GLOBAL 多空 ACCOUNT 比率(`long_short_ratio`,位于同一个 parquet 中),但该流水线只为 PRIMARY 标的加载 `metrics`,而现有的唯一按每个标的腿进行横截面连接的方式是 `funding_rates_by_instrument`、`open_interest_by_instrument` 和 `taker_flow_by_instrument`(subprocess_entry.py)——因此目前无法在策略代码中表达基于账户比率的 8-标的排名;需要一种仿照这三者的 `global_ratio_by_instrument` 连接方式,这属于流水线变更。在现有的三种方式中,吃单方流量是唯一同时具备方向性且位于散户侧的方式,因此它是忠实的替代指标;在账户比率 IS 可用的地方仍会使用它(BTC 狂热现金闸门)。提交前已根据真实数据验证:所有 8 腿都携带跨度为 1737-2193 天的 8k 点步进序列,在过去 4 年进行 208/208 次模拟每周再平衡会产生横截面排名,并且持仓会轮换覆盖每个标的(各 67-86 次选择),而不是固定在一个标的上——因此该策略确实交易,不是退化的排名。还保留了另外两项小修复:每周节奏现在锚定于柱的时间戳,而不是相对于进程的 `_bar_i` 计数器(可安全重启、回放结果一致);并且强制使 `exit_level` 严格小于 `euphoria_level`,从而优化器无法将滞后机制反转成逐柱振荡。Layer-3 超时安全性未变且得到保留:前缀和 + searchsorted 使每次逐柱查找保持 O(log n),解析时步进将所有 8 个腿的 __init__ 控制在约 10s 内。

verification_loop: 验证失败 (Layer 4 — QA 审查) [class=hypothesis_mismatch]: - [edge_concern] 沙箱是一个连贯的多头主要币种篮子,能够运行并交易(337 笔交易,avg_trade_return_pct 0.69% 突破手续费下限),但 total_return -20.85%,information_ratio -0.901 相对于等权重篮子基准,以及 max_drawdown 71%(CI 至 96%)表明,被替换的 taker-flow 排序键相对于朴素的等权重持有增加了负的风险调整价值。这仅供参考;它位于排序键不匹配的下游,应由分析师在修正后的实现上重新判断,不应在此处被阻止。 - [critical] 假设的唯一决定性特征——在标题/描述中反复重申('按 GLOBAL 多空账户比'、'count_long_short_ratio'、'纯低持有 FACTOR,非动量')——是 CROSS-SECTIONAL RANKING KEY 即每个品种的全局多空 ACCOUNT……展开收起

verification_loop: 验证失败 (Layer 4 — QA 审查) [class=hypothesis_mismatch]: - [edge_concern] 沙箱是一个连贯的多头主要币种篮子,能够运行并交易(337 笔交易,avg_trade_return_pct 0.69% 突破手续费下限),但 total_return -20.85%,information_ratio -0.901 相对于等权重篮子基准,以及 max_drawdown 71%(CI 至 96%)表明,被替换的 taker-flow 排序键相对于朴素的等权重持有增加了负的风险调整价值。这仅供参考;它位于排序键不匹配的下游,应由分析师在修正后的实现上重新判断,不应在此处被阻止。 - [critical] 假设的唯一决定性特征——在标题/描述中反复重申('按 GLOBAL 多空账户比'、'count_long_short_ratio'、'纯低持有 FACTOR,非动量')——是 CROSS-SECTIONAL RANKING KEY 即每个品种的全局多空 ACCOUNT 比,这是一个零售头寸/持有代理,被刻意地与动量和资金费率正交。代码NOT按此排序。_crowd_z() / _rebalance() 按 `taker_long_short_vol_ratio`(主动 BUY 量 / 主动 SELL 量)对 8 个主要币种进行排序,该数据从 `taker_flow_by_instrument` 读取。Taker 多空成交量比率是一个 FLOW/AGGRESSOR 度量,而非持有/头寸度量——它与账户比有本质区别,并且可以说更接近假设明确声称与之正交的短期流动/动量。指定的账户比仅用于次要的 BTC 狂热度现金闸门(_parse_global / calculate_signal),从不用于主要选择。根据 QA 清单,当假设中指定的特定核心 edge 在代码中缺失时,这属于严重问题:所述的低持有因子并非实际交易的因子。(第 259 行) — 修复: 要么 (a) 将每个品种的全局账户比作为 `global_ratio_by_instrument` 接入流水线(在 subprocess_entry.py 中镜像 funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument)并按此排序——这是假设所指的忠实实现;要么 (b) 如果该 per-leg 系列确实无法提供,则本次运行是一个 DATA-覆盖率阻断(not_measurable),而非基于替换键交付的策略——应按此报告,以便在该系列接入之前将假设搁置,而不是默默地交易一个不同的(流动)因子。Do - [warning] 一致性检查标记假设 'WEEKLY' 与配置 bar_type 1-DAY 不一致。这NOT是真正的不匹配:假设中的 'weekly' 指的是 REBALANCE/HOLD 节奏,这正确地实现为由日历锚定的 7 天再平衡门控的日线 bar(day % rebalance_days == 0)。使用字面意义的周线 bar 会粗化狂热度百分位和节奏;日线 bar + 7 天再平衡的构造是表达周轮换的正确方式。仅作透明度记录;不影响结论。(第 380 行) — 修复: 可选择将假设文本改写为 '在日线 bar 上进行周再平衡' 以消除 Layer-1.5 一致性警告。

实现

仅做多、每周再平衡的横截面轮换,覆盖 8 USD-M 个大型标的(BTC、ETH、SOL、BNB、AVAX、LINK、ADA、XRP)。每个标的的拥挤度根据 Binance Vision `metrics` 镜像中每个标的的 TAKER 多空 VOLUME 比率衡量(激进买入量 / 激进卖出量,5 分钟,多年数据),表示为其 7 日均值相对于自身 90 日均值和标准差的 z-score;3 LEAST 拥挤做多的标的以等权方式持有,每个标的占权益的 30%。由 PRIMARY(BTC)全球多空 ACCOUNT 比率构建的系统性狂热现金闸门,会在该比率处于自身 90 日分布的前 15% 时将整个组合轮换为现金,并在第 65 百分位重新投资(滞后机制)。再平衡锚定于日历时间(days_since_epoch % 7),而不是柱计数器。仅做多,杠杆 1.0,无空头腿。

验证结果

验证失败 (Layer 4 — QA 审查) [class=hypothesis_mismatch]: - [edge_concern] 沙箱是一个连贯的多头主要币种篮子,能够运行并交易(337 笔交易,avg_trade_return_pct 0.69% 突破手续费下限),但 total_return -20.85%,information_ratio -0.901 相对于等权重篮子基准,以及 max_drawdown 71%(CI 至 96%)表明,被替换的 taker-flow 排序键相对于朴素的等权重持有增加了负的风险调整价值。这仅供参考;它位于排序键不匹配的下游,应由分析师在修正后的实现上重新判断,不应在此处被阻止。 - [critical] 假设的唯一决定性特征——在标题/描述中反复重申('按 GLOBAL 多空账户比'、'count_long_short_ratio'、'纯低持有 FACTOR,非动量')——是 CROSS-SECTIONAL RANKING KEY 即每个品种的全局多空 ACCOUNT 比,这是一个零售头寸/持有代理,被刻意地与动量和资金费率正交。代码NOT按此排序。_crowd_z()……展开收起

验证失败 (Layer 4 — QA 审查) [class=hypothesis_mismatch]: - [edge_concern] 沙箱是一个连贯的多头主要币种篮子,能够运行并交易(337 笔交易,avg_trade_return_pct 0.69% 突破手续费下限),但 total_return -20.85%,information_ratio -0.901 相对于等权重篮子基准,以及 max_drawdown 71%(CI 至 96%)表明,被替换的 taker-flow 排序键相对于朴素的等权重持有增加了负的风险调整价值。这仅供参考;它位于排序键不匹配的下游,应由分析师在修正后的实现上重新判断,不应在此处被阻止。 - [critical] 假设的唯一决定性特征——在标题/描述中反复重申('按 GLOBAL 多空账户比'、'count_long_short_ratio'、'纯低持有 FACTOR,非动量')——是 CROSS-SECTIONAL RANKING KEY 即每个品种的全局多空 ACCOUNT 比,这是一个零售头寸/持有代理,被刻意地与动量和资金费率正交。代码NOT按此排序。_crowd_z() / _rebalance() 按 `taker_long_short_vol_ratio`(主动 BUY 量 / 主动 SELL 量)对 8 个主要币种进行排序,该数据从 `taker_flow_by_instrument` 读取。Taker 多空成交量比率是一个 FLOW/AGGRESSOR 度量,而非持有/头寸度量——它与账户比有本质区别,并且可以说更接近假设明确声称与之正交的短期流动/动量。指定的账户比仅用于次要的 BTC 狂热度现金闸门(_parse_global / calculate_signal),从不用于主要选择。根据 QA 清单,当假设中指定的特定核心 edge 在代码中缺失时,这属于严重问题:所述的低持有因子并非实际交易的因子。(第 259 行) — 修复: 要么 (a) 将每个品种的全局账户比作为 `global_ratio_by_instrument` 接入流水线(在 subprocess_entry.py 中镜像 funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument)并按此排序——这是假设所指的忠实实现;要么 (b) 如果该 per-leg 系列确实无法提供,则本次运行是一个 DATA-覆盖率阻断(not_measurable),而非基于替换键交付的策略——应按此报告,以便在该系列接入之前将假设搁置,而不是默默地交易一个不同的(流动)因子。Do - [warning] 一致性检查标记假设 'WEEKLY' 与配置 bar_type 1-DAY 不一致。这NOT是真正的不匹配:假设中的 'weekly' 指的是 REBALANCE/HOLD 节奏,这正确地实现为由日历锚定的 7 天再平衡门控的日线 bar(day % rebalance_days == 0)。使用字面意义的周线 bar 会粗化狂热度百分位和节奏;日线 bar + 7 天再平衡的构造是表达周轮换的正确方式。仅作透明度记录;不影响结论。(第 380 行) — 修复: 可选择将假设文本改写为 '在日线 bar 上进行周再平衡' 以消除 Layer-1.5 一致性警告。

迭代历史

验证失败(Layer 2 — 合成场景): 使用的参数:['top_k', 'exit_level', 'min_notional', 'per_name_frac', 'euphoria_level', 'rebalance_days', 'euphoria_window'] 检查 __init__ 是否从 self.parameters.get() 设置了所有属性。 - steady_uptrend:TypeError:RetailCrowdingContrarianRotationLong._asof() 接受 3 个位置参数,但给出了 4 个(柱时间戳:1735691940000) - steady_downtrend:TypeError:RetailCrowdingContrarianRotationLong._asof() 接受 3 个位置参数,但给出了 4 个(柱时间戳:1735691940000) - flat_ranging:TypeError:RetailCrowdingContrarianRotationLong._asof() 接受 3 个位置参数,但给出了 4 个(柱时间戳:1735691940000) - volatility_spike:TypeError:RetailCrowdingContrarianRotationLong._asof() 接受 3 个位置参数,但给出了 4 个(柱时间戳:1735691940000) - zero_volume:TypeError:RetailCrowdingContrarianRotationLong._asof() 接受 3 个位置参数,但给出了 4 个(柱时间戳:1735691940000) - price_gap:TypeError:RetailCrowdingContrarianRotationLong._asof() 接受 3 个位置参数,但给出了 4 个(柱时间戳:1735691940000)

验证失败(Layer 3 — 沙盒回测):冒烟测试超过了 300s 的墙钟时间限制。这几乎总是意味着逐柱工作量随历史长度增长——例如重新扫描完整的资金费率/补充序列,或在每个柱的 calculate_signal()/on_bar() 中重建列表并调用 min()/sorted()。在 __init__ 中预计算已排序的时间戳数组 ONCE 并使用 bisect,或缓存以时间戳为键的查找结果,使逐柱成本为 O(log n) 而非 O(n)。

验证失败(层级 4 — QA 审查)[类别=hypothesis_mismatch]: - [edge_concern] 沙盒是冒烟测试,不是失败原因,但请注意:metrics_reliable=false,Sharpe(0.10)与 total_return(-34.3%)符号不一致,MDD 70%,并且在压力波动率三分位数中,OI-拥挤组合的损失最大(-37.8%)。如果该机制通过回测审查,首先检查 OI z-rank 是否确实具有任何方向性优势,因为 OI 不区分方向。 - 该假设的核心优势是对每个名称的 GLOBAL LONG/SHORT ACCOUNT RATIO 进行横截面排名——一种方向性的散户低持有因子(“持有散户在 LEAST 拥挤-LONG 上的那些名称”)。但代码改为根据每个名称的 PERP OPEN INTEREST z-score 排名,并持有 3 个最低值。这是替代机制,未保留原有经济含义:OI 不是散户代理变量(它是所有参与者的总未平仓名义金额),而 OI 是 DIRECTION-BLIND(永续合约中总多头 == 空头),因此无法表达“最不拥挤的多头”。假设中明确命名的优势在代码中缺失 → 严重问题。

验证失败(Layer 4 — QA 审查)[class=hypothesis_mismatch]: - [edge_concern] 沙盒看起来很健康(+93%,夏普比率 0.77,PF 1.55,avg_trade_return_pct 6.63%),恰恰是因为代码实现的是开发者确认与已部署的负资金费率套利篮子重叠的资金费率套利轮换——因此,这些良好数字说明不应推广一个实时策略的近似重复版本,而不是说明实现了假设本应增加的正交拥挤因子。仅供参考;阻断原因是忠实性。 - 核心优势未实现,且替代指标正是假设 EXCLUDES 的机制。假设按每个标的的 GLOBAL 多空 ACCOUNT 比率(散户拥挤度)排名,并明确表示“不是资金费率(套利)……与动量和资金费率正交”。代码按每个标的的 FUNDING 对横截面排名(最低者 = 持有)——这是一个资金费率套利排名,开发者承认它与已部署的套利篮子重叠。账户比率拥挤键缺失且无法实现(metrics 仅为主标的接入;没有 metrics_by_instrument)。 - 再平衡节奏锚定于相对于进程的柱计数器(self._bar_i % rebalance_days),而不是柱时间戳。重启会重置 _bar_i,使每周轮换网格偏离任何固定日历日期;一致性回放无法复现轮换日期。较轻微的项目-20形式(没有哨兵/首柱触发)。应从自纪元起的天数或固定星期几推导。

放弃原因

verification_loop:验证失败(第4层 — QA审查)[类别=hypothesis_mismatch]: - [edge_concern] 沙盒是一个连贯的多头主要币种篮子,能够运行和交易(337笔交易,avg_trade_return_pct 0.69%通过手续费下限),但total_return -20.85%,information_ratio -0.901对比等权重篮子基准,且max_drawdown 71%(CI至96%)表明替代的主动成交流排序键相较于朴素的等权重持有增加了负的风险调整后价值。此仅为建议性;它是排序键不匹配的下游产物,应由分析师在修正实现后重新判断,而不在此处阻断。 - [关键]该假设唯一的定义性特征——在标题/描述中反复重申('按GLOBAL多空账户比率','count_long_short_ratio','纯粹的欠持仓FACTOR,而非动量')——即CROSS-SECTIONAL RANKING KEY为按品种的全局多空ACCOUNT比率,一个与动量和资金费率刻意正交的散户持仓/所有权代理指标。代码NOT按此排序。_crowd_z() /……展开收起

verification_loop:验证失败(第4层 — QA审查)[类别=hypothesis_mismatch]: - [edge_concern] 沙盒是一个连贯的多头主要币种篮子,能够运行和交易(337笔交易,avg_trade_return_pct 0.69%通过手续费下限),但total_return -20.85%,information_ratio -0.901对比等权重篮子基准,且max_drawdown 71%(CI至96%)表明替代的主动成交流排序键相较于朴素的等权重持有增加了负的风险调整后价值。此仅为建议性;它是排序键不匹配的下游产物,应由分析师在修正实现后重新判断,而不在此处阻断。 - [关键]该假设唯一的定义性特征——在标题/描述中反复重申('按GLOBAL多空账户比率','count_long_short_ratio','纯粹的欠持仓FACTOR,而非动量')——即CROSS-SECTIONAL RANKING KEY为按品种的全局多空ACCOUNT比率,一个与动量和资金费率刻意正交的散户持仓/所有权代理指标。代码NOT按此排序。_crowd_z() / _rebalance()按`taker_long_short_vol_ratio`对8个主要币种进行排序(主动BUY成交量 / 主动SELL成交量),从`taker_flow_by_instrument`读取。主动成交多空量比率是一个FLOW/AGGRESSOR度量,而非所有权/持仓度量——它与账户比率有本质区别,可以说更接近于假设明确声称与之正交的短期资金流/动量。所命名的账户比率仅用于次要的BTC狂热现金闸门(_parse_global / calculate_signal),从不用于主要选币。根据QA检查清单,当假设所指定的核心边缘在代码中缺失时,即为关键问题:所述欠持仓因子并非实际交易的因子。(第259行)——修复:要么(a)将每个品种的全局账户比率作为`global_ratio_by_instrument`接入流水线(镜像subprocess_entry.py中的funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument)并据此排序——这是假设所命名的忠实实现;或者(b)如果确实无法提供每个腿的序列,本次运行应为DATA覆盖阻断(not_measurable),而非用替代键交付的策略——应如实报告,以便假设被搁置,直到该序列被接入,而不是静默地交易不同的(资金流)因子。Do - [警告]一致性检查标记假设'WEEKLY'与配置bar_type 1-DAY。这NOT真正的失配:假设中的'weekly'指REBALANCE/HOLD节奏,已正确实现为以日历锚定的7日再平衡为闸门的日线(day % rebalance_days == 0)。使用字面意义的周线会粗糙化狂热百分位和节奏;日线+7日再平衡的构造是表达周度轮动的正确方式。出于透明度予以记录;不驱动最终判定。(第380行)——修复:可选择将假设文本改写为'日线上的周度再平衡'以消除第-1.5层一致性警告。

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