跳至正文
全部策略

策略

拥挤持仓反向策略——多空:使用全球多空账户比率 + 主动买入/卖出成交量比率识别 FADE 散户持仓极值(已确认的补充数据流,NOT强平数据流),仅在滚动百分位极值 WITH价格耗尽确认时入场,回归 TP + ATR/时间止损(SOLUSDT.BINANCE USD-M,4H K 线,3 个参数)

结局: 已放弃

SolCrowdedPositioningContrarianLS

回测门槛: - 指标不可靠:不一致:Sharpe 0.03 与 total_return -15.21% 的符号不一致——Sharpe 根据 mtm_equity_curve 序列计算,而收益来自权益曲线。应以权益曲线为准。

假设

一种LONG-SHORT、单一标的、POSITIONING-CONTRARIAN策略,针对 SOLUSDT.BINANCE USD-M 上拥挤的散户持仓进行反向交易——这是一类行为资金流机制,在 2,573 个实验的策略组合中没有先例,也不属于任何逐渐失效的策略族(它NOT基于价格的均值回归,例如 AVAX 影线反转、NOT 动量共振、NOT 波动率-RV 期权、NOT 套息/基差,也NOT流动性较差的强平数据流)。它使用两种 CONFIRMED 补充数据流——全球多空账户比率和主动买入/卖出成交量比率——二者均由 Binance 指标(BinanceFuturesDataCollector + Vision 指标)进行历史采集,因此避开了导致强平数据流思路失败的 L61 data_unavailable 陷阱。核心前提(一种有文献记载的加密货币优势):当散户群体在一个方向上的持仓达到极端——滚动窗口内的全球多空 ACCOUNT 比率处于极值——且主动交易者的资金流确认群体仍在继续加仓时,边际买方/卖方已耗尽,随着群体被迫平仓,价格将均值回归。该策略仅在真正的极值(滚动百分位)AND需要价格耗尽确认(未能创出新极值),因此不会盲目对抗趋势。采用方向性多空策略(针对 85.8% 仅做多失衡),由事件触发(低换手),且每笔交易的变动都足够大,能以数量级优势覆盖手续费。所有滚动百分位/ATR序列均在 __init__ 中ONCE预先计算,并通过 bisect 查找——每根 K 线上不执行 min()/sorted()/全序列扫描(避开导致此前跨式策略失败的第 -3 层超时)。

第 7 次迭代做出了针对所报告回测门槛失败的最小改动(按市值计价曲线的 Sharpe 0.03 与 -15.21% 权益曲线收益率的符号不一致)。这种背离是由波动幅度造成的假象:第 6 次迭代的止盈止损括号已将其缩小(-20.30% -> -15.21%),但一个最长可持有 12 根 K 线的 3.5%/6.5% 区间仍会让标记价格序列记录下从未实际成交的波动。因此:stop_loss_pct 0.035 -> 0.025,take_profit_pct 0.065 -> 0.045(风险回报比仍约为 1.8,二者都能在反转时限内触及),max_hold_bars 12 -> 9,exit_percentile 0.58 -> 0.56,使更多仓位依据策略逻辑而非触及外围止盈止损括号平仓。仓位规模已按实际止损括号承担权益的 risk_frac 风险,因此会自动重新缩放。信号计算、补充数据解析、预计算百分位网格、导入项和类结构均与通过第 1、1.5、2 和 3 层的代码保持不变,因此不会导致任何更早层级退化。坦诚地说,约为 0.03 的按市值计价 Sharpe 表明该机制的毛收益FLAT,而非毛收益为正却被成本侵蚀——毛收益持平的信号无法靠减少交易或收紧退出条件变得盈利,因此我的建议是放弃,而不是继续。

在可靠的 827 笔交易 / 6 年样本上,预期收益为负:profit_factor 0.894,avg_trade_return_pct 0.0297%(接近于零且远低于 0.15% USD-M 手续费下限),预期收益为 -$39.66/笔,total_return -33.2%,Sharpe -0.017(CI [-0.85, 0.83] 跨越零点)。手续费仅占毛收益的 9.5%,因此这NOT手续费脆弱性——拥挤持仓反转信号的毛收益持平或为负:压力在约 2.5 根 K 线内回归,因此每笔实际变动很小,且大多数仓位按信号而非(结构上足够大的)4.5%/2.5% 止盈止损括号退出。该机制实现正确(多空平衡,补充数据流彼此正交),因此这是公平的测试,而其前提已被证伪:策略几乎每年都亏损,在平静(-44.8%)和承压(-32.6%)波动率三分位中也都亏损——唯一的正向贡献来自正常三分位(+51.6%),也就是说这是对市场状态敏感的噪声,而非稳健优势。这是第 7 次迭代;此前六次迭代使按市值计价/已实现曲线趋于一致,却始终未能创造正的毛收益优势,而 3 个可调参数无法扭转一个PF-0.894、低于手续费门槛的信号。不值得投入 2 小时进行优化。abandon_class=negative_expectancy。

实现

基于持仓的多空反向策略,运行于 SOLUSDT.BINANCE USD-M 4H K 线上。该策略反向交易拥挤的散户持仓:将全球多空 ACCOUNT 比率(群体持仓)的滚动百分位与主动买入/卖出 VOLUME 比率(主动资金流仍在持续)的滚动百分位取平均,得到一个范围为 [-1, +1] 的连续“压力”得分,每根 K 线重新计算。当压力处于极值 AND 且价格通过未能突破近期 N 根 K 线的高点(做空时)或低点(做多时)确认耗尽后,策略采取反向仓位。退出方式包括交易场所管理的 OUO 止盈止损括号(2.5% 止损 / 4.5% 止盈,二者均可在 K 线内触发)、压力回归中性时的信号退出,或 9 根 K 线(1.5 天)的时间止损。两种补充数据百分位序列都会预先计算一次并映射到固定时间网格,因此每根 K 线的开销为 O(log n) 查找。若两种数据流均不可用,策略将始终保持空仓——绝不会退回到仅基于价格的代理指标。

验证结果

分析师应先在全历史数据上确认拥挤反转策略是否能在任何稳健的市场状态中产生正的毛收益优势,然后再进行优化;如果毛收益持平,应放弃而不是调参。

未优化的沙盒冒烟测试显示,每笔交易的经济效益低于下限(avg_trade_return_pct 0.0297%),且优势接近于零并依赖市场状态。在结构上可行(止盈止损括号 TP 4.5% 可覆盖手续费),但按当前参数设定的机制只产生非常小的实际反转。

Sandbox 结果表现为手续费侵蚀/毛收益持平:avg_trade_return_pct 0.0297%(低于 0.15% USD-M 下限),profit_factor 0.893,total_return -33.2%,Sharpe 约为 0,且 CI [-0.85, 0.83] 在 827 笔交易中跨越零点,手续费仅占毛收益的 9.5%。这NOT代码/费用结构缺陷(TP 4.5% / SL 2.5% 在结构上足够大,能够覆盖成本),但实际每笔交易的变动很小,因为压力在约 2.5 根 K 线内回归,且大多数仓位是按信号而非止盈止损括号退出。市场状态表显示,全部正向贡献都来自“正常”波动率三分位(+51.6%),而平静(-44.8%)和承压(-32.6%)状态均为负,因此反转优势对市场状态很脆弱。开发者自己的建议是放弃,理由是按市值计价信号的毛收益持平(Sharpe 0.03),这意味着收紧退出条件/减少交易无法挽救它。供分析师进行全历史回测审查的建议;不构成阻碍。

回测评审

夏普
-0.02
总收益率
-33.21%
最大回撤
37.88%
总交易数
827
胜率
44.1%
盈利因子
0.89

格式良好的行为资金流机制,使用两种已确认的补充数据流(全球多空账户比率 + 主动买入/卖出成交量比率),与逐渐失效的策略族正交

可靠且具有决定性的样本:827 笔交易,覆盖 6 年(2020-2026),多空平衡(393 笔多头 / 434 笔空头),事件触发、低换手,预计算百分位网格(无超时风险)

止盈止损水平(TP 4.5% / SL 2.5%)在结构上足够大,能够覆盖 USD-M 手续费——这NOT费用结构/代码缺陷

在可靠样本上预期收益为负:profit_factor 0.894(<1),avg_trade_return_pct 0.0297%(远低于 0.15% USD-M 下限且接近于零),预期收益为 -$39.66/笔,total_return -33.2%,Sharpe -0.017(CI [-0.85, 0.83] 跨越零点)

并非手续费脆弱性——手续费仅占毛收益的 9.5%,因此反转信号的毛收益持平或为负。每笔交易的实际变动很小,因为压力在约 2.5 根 K 线内回归,且大多数仓位按信号而非止盈止损括号退出

几乎每个日历年都亏损(2022 -23.7%, 2023 -5.2%, 2025 -13.6%, 2026 -3.9%);只有 2024(+11.3%)为正

对市场状态脆弱:全部正向贡献都来自正常波动率三分位(+51.6%);平静(-44.8%)和承压(-32.6%)状态均为负——拥挤反转优势在其目标市场状态中并不成立

这是第 7 次迭代;此前六次开发迭代使按市值计价/已实现曲线趋于一致,但始终未能产生正的毛收益优势,而开发者自己的建议是放弃

分析

回测门槛: - 指标不可靠:不一致:Sharpe 0.03 与 total_return -15.21% 的符号不一致——Sharpe 根据 mtm_equity_curve 序列计算,而收益来自权益曲线。应以权益曲线为准。

迭代历史

验证失败(第 2 层——合成情景): 使用的参数:['risk_frac', 'atr_period', 'exhaust_atr', 'tp_atr_mult', 'min_notional', '_param_bounds', 'max_hold_bars', 'stop_atr_mult', 'exit_percentile', 'entry_percentile', 'exhaust_lookback', 'max_notional_frac', 'min_window_points', 'max_staleness_hours', 'percentile_window_days'] 检查 __init__ 是否设置了 self.parameters.get() 中的所有属性。 - steady_uptrend: TypeError: SolCrowdedPositioningContrarianLS._row_ratio() 接受 2 个位置参数,但实际传入了 3 个(K 线时间戳:1735691040000) - steady_downtrend: TypeError: SolCrowdedPositioningContrarianLS._row_ratio() 接受 2 个位置参数,但实际传入了 3 个(K 线时间戳:1735691040000) - flat_ranging: TypeError: SolCrowdedPositioningContrarianLS._row_ratio() 接受 2 个位置参数,但实际传入了 3 个(K 线时间戳:1735691040000) - volatility_spike: TypeError: SolCrowdedPositioningContrarianLS._row_ratio() 接受 2 个位置参数,但实际传入了 3 个(K 线时间戳:1735691040000) - zero_volume: TypeError: SolCrowdedPositioningContrarianLS._row_ratio() 接受 2 个位置参数,但实际传入了 3 个(K 线时间戳:1735691040000) - price_gap: TypeError: SolCrowdedPositioningContrarianLS._row_ratio() 接受 2 个位置参数,但实际传入了 3 个(K 线时间戳:1735691040000)

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

验证失败(第 1 层——配置):config.instrument_id 和 config.bar_type 为 REQUIRED(得到 instrument_id=None,bar_type=None)。请将二者都设为假设中的标的,例如 instrument_id='BTCUSDT.BINANCE',bar_type='BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL'。

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