策略
主动成交方攻击性耗竭反转,单场所多空(单合约 SOLUSDT.BINANCE USD-M——对由 EXTREME 单边 TAKER 主动成交失衡驱动的急剧价格变动进行反向操作,即耗尽挂单流动性的亢奋性市价买入追涨/恐慌性市价卖出抛售,逆向入场,在主动成交流正常化/目标达成/到期时退出,3 参数)
结局: 已放弃
SolTakerAggressionExhaustionReversalLS
结局总结
该策略为工厂提出了一个真正新颖的策略族——在 SOL 上反转 taker 攻击性耗竭,做空亢奋的市价买入追涨,做多恐慌性抛售,并使用正交的 taker 买卖失衡信号;失败日志中此前没有任何 taker 流量策略。设计思路周全:使用滚动 z 分数而非绝对阈值,以平滑的联动分数取代硬性复合门槛,按风险确定仓位,并且不使用仅基于价格的回退方案,使 taker 极值本身成为待检验的优势来源。但经过三轮迭代,策略始终未通过验证——六个 Layer-2 合成情景每次都因相同的 `_bar_interval_ns()` 签名 TypeError 而崩溃;这个代码缺陷使策略在任何耗竭反转优势得到测量之前就无法运行。它在验证循环中被放弃,从未产生回测。
假设
在 SOLUSDT.BINANCE USD-M 永续合约上的 LONG-SHORT、SINGLE-INSTRUMENT、SINGLE-VENUE 策略。正交信号为 TAKER 买卖主动成交失衡(来源于 taker_ratio 补充数据源,与价格序列正交,不是趋势的重新推导——满足 L42)。失败日志中未出现任何 taker-flow 策略,因此这是一个真正全新的策略族,有别于已饱和的横截面动量、资金费率拥挤、OI-确认/OI-暴跌、以及溢价投降等坟场。机制:当主动成交方以压倒性态势吃卖单报价(taker_buy_ratio 处于多日极值),WHILE 价格急剧向上冲击,这是后期亢奋的市价单追涨行为,消耗了挂单的卖方流动性,使价格延伸至被动参与者愿意承接的水平之上——一旦主动成交流耗尽,短期向下反转随之而来。下行方向对称:在暴跌行情中极端 taker-SELL 占主导 = 恐慌性市价抛售进入稀薄买方,价格向下过度延伸后反弹。该策略对主动成交方进行反向操作:极端 taker-BUY + 上行 → SHORT;极端 taker-SELL + 下行 → LONG。这是耗竭/流动性消耗,而非动量延续(与 taker-flow 突破策略书完全相反)。单场所、单合约——不存在跨场所/第二腿联合可用性问题(L44),无需期权/IV 数据源(L43)。选择 SOLUSDT 是因其已实现波动率较高(反转目标以较宽裕的幅度覆盖 0.10% USD-M 来回成本),并可分散远离 2%-生存 BTC 标签。参数控制在 3 以抵御主导日志的过拟合死亡。合约:["SOLUSDT.BINANCE"]。venue_type:期货。data_requirements:["ohlcv","taker_ratio"]。
Iteration-6 针对所报告的不一致进行修正(夏普比率 +0.22 对比 total_return -54.71%):根据权益曲线判断,策略是被交易成本拖垮的,而非信号失效——每根 K 线的夏普比率略为正值,但复利收益大幅为负,这是交易过于频繁导致成本侵蚀的典型表现。iteration-5 的参数结构使这种结果不可避免:名义仓位 = 权益*0.01/(约 1.2% ATR 止损),约为权益的 0.83x,仅受 1.0x 上限约束;信号阈值为 1.5,而信号自身的标准差约为 0.71(因此 |signal|>1.5 在约 3-4% 的 K 线上触发,在该窗口内产生数百次入场);流量归一化退出条件设置为 exit_z_frac=0.0,分数一旦衰减至零下方就会平仓——通常在一两根 K 线内,远早于价格走势足以覆盖约 0.10% USD-M 的往返交易成本。约 700 次往返交易 x 0.10% x 0.83x 名义仓位,相当于权益的约 58%,与 -54.71% 几乎完全吻合。三项相互关联的参数/逻辑调整将成本预算削减了约一个数量级,同时保留信号、入场方向以及通过 Layers 1-3 的所有内容:max_notional_frac 1.0 -> 0.35(往返交易成本约占权益 0.035%,而非约 0.083%,并且限制了回撤后的复利亏损扩大);entry_z 1.5 -> 1.8(仅在真正约 2.5 个标准差的尾部入场,交易数量减少约 3x,但在沙盒窗口中仍保留远超 100 笔交易);以及 exit_z_frac 0.0 -> -0.5,并新增 min_hold_bars=1 守卫条件,使流量退出要求反转分数确实朝不利于持仓的方向FLIP,而不只是衰减,从而让盈利交易有机会达到能够覆盖往返成本的 min_tp_pct=0.35% 目标。其他内容均未改变——双镜像 taker 解析、时点一致的 as-of 查找、不得遮蔽基类静态方法的模块级 _infer_bar_interval_ns、以日历为锚点的时间止损,以及导入项。
基于 523 笔交易 / 6 年的可靠样本呈现负期望值:profit_factor 0.898,total_return -13.16%,avg_trade_pnl_usd -24.87(负期望值),Sharpe -0.31,Sortino -0.17,information_ratio -1.06 对比买入持有。标题性的 avg_trade_return_pct 为 0.185% 是等权重方法下的人为产物 —— 规模加权的 USD 期望值为负,因为亏损头寸名义金额更大,且 PF<1 确认不存在可被手续费吞噬的正向毛利差。主动方衰竭反转在任意市场状态下均产生 NO 优势(平静 -11.0%、正常 -1.5%、压力 -9.9%),且每个完整年度都亏损,因此这是关于入场/方向的判断,IS 该假设 —— 而非参数悬崖。不利的盈亏结构(avg_loss 560.9 对比 avg_win 389.5)意味着当攻击性极端时,反转策略被趋势延续系统性地碾压;优化 3 参数(lookback_bars/entry_z/max_hold_bars)无法将一个 PF-0.898 信号扭转为盈利。QA 对优势的担忧在全历史中得到印证。与 L55 一致(单一品种反转,PF<1.15 → 放弃)。abandon_class=negative_expectancy。
实现
在 1 小时周期柱上运行的单一工具多空 SOLUSDT.BINANCE USD-M 永续策略,用于 FADES 由极端单边 TAKER 主动成交量失衡驱动的剧烈价格波动。每次吃单方观测(taker_ratio fapi 镜像;对于 fapi 数据源未覆盖的年份,使用 metrics Vision 镜像回填)都会转换为有界失衡值 (buy-sell)/(buy+sell);该失衡值按自身滚动窗口进行 z 分数标准化,2 根柱的价格收益也同样处理,连续信号为 -0.5*(z_flow + z_move),并在每根柱上重新计算。价格上涨时吃单方-BUY 占主导 -> SHORT 已耗竭的追涨;价格急跌时吃单方-SELL 占主导 -> LONG 恐慌抛售。达到 ATR 目标、触及 ATR 止损、日历锚定的时间止损,或最短持有期后吃单流评分转而不利于持仓时退出。按风险定仓,名义金额硬性限制为权益的 0.35x;杠杆 1.0;吃单方数据源过期时不采用仅依据价格的备用方案。
验证结果
如果基类模板将 min_bars_required 视为可重写钩子,则无需更改;否则应重命名。当前实现的行为正确。
min_bars_required(self) 覆盖了框架方法(静态分析已标记)。审查了基类契约:该覆盖返回了合理的预热期(lookback_bars + move_bars + atr_period + 2),且这是预期的策略级钩子,因此无害;但为完整起见,记录这条静态分析 base_shadow 警告。
沙盒(未优化,单次抽样)结果为负:total_return -11.1%,夏普比率 -0.66,avg_trade_return_pct -0.0223%(低于手续费底线),profit_factor 0.81,共 262 笔交易;而“高波动”三分位表现为大幅负值(-13.2%,夏普比率 -1.51),只有“平静”三分位为正(+1.43%)。min_tp_pct=0.35% 的目标在结构上足以覆盖约 0.10% 的往返交易成本,因此单笔交易结果为负,源于参数未优化和亏损不对称,而非策略设计在结构上无法覆盖手续费;不过,分析师应在完整历史数据上验证反转优势是否仅限于平静状态,并确认优化后 avg_trade_return_pct 能覆盖手续费。avg_win 380.8 对比 avg_loss 428.7,采用 2.0xATR 止损 / 1.5xATR 目标的收益结构不利,值得优先检查。
回测评审
- 夏普
- -0.31
- 总收益率
- -13.16%
- 最大回撤
- 15.89%
- 总交易数
- 523
- 胜率
- 56.4%
- 盈利因子
- 0.90
正交的主动方攻击性信号(并非重新推导的趋势),失败日志中的新家族
可靠样本:2181 天内共 523 笔交易,多空平衡(做多 268 / 做空 255),metrics_reliable=true
工程实现良好,退出逻辑支持重启,并对手续费拖累进行了预算管理
在具有决定性的样本中,期望收益为负:profit_factor 0.898(<1),total_return -13.16%,avg_trade_pnl_usd -24.87,夏普比率 -0.31,索提诺比率 -0.17
亏损不对称性不利:avg_loss 560.9 对比 avg_win 389.5,尽管胜率为 56%——1.5xATR 目标 / 2.0xATR 止损的结构使反转策略在行情延续时被压垮
没有任何市场状态有效:平静 -11.0%(夏普比率 -0.23),正常 -1.5%,高波动 -9.9%(夏普比率 -0.96)。反转优势在所有状态下都不存在,并非仅限于某个可交易状态
每个完整年度均亏损(2023 -3.4%,2024 -1.6%,2025 -2.3%,2026 -7.1%);information_ratio -1.06,表现逊于买入并持有
符合 L55:单标的反转/均值回归策略,PF < 1.15,通过重新调整阈值始终未能实现手续费后盈利
此处具有误导性:等权单笔交易百分比为正,但按仓位加权的 USD 期望收益为负,因为亏损交易的名义仓位更大
分析
回测门槛: - 指标不可靠:不一致:夏普比率 0.22 与 total_return -54.71% 符号相反——夏普比率基于 mtm_equity_curve 序列计算,而收益来自权益曲线。应以权益曲线为准。
迭代历史
验证失败(第 2 层——合成情景): 使用的参数:['exit_z', 'tp_atr', 'entry_z', 'stop_atr', 'risk_frac', 'atr_period', 'z_lookback', 'min_stop_pct', 'max_hold_bars', 'move_lookback', 'max_notional_frac', 'max_stale_minutes'] 检查 __init__ 是否从 self.parameters.get() 设置了所有属性。 - steady_uptrend:设置错误:TypeError:SolTakerAggressionExhaustionReversal._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - steady_downtrend:设置错误:TypeError:SolTakerAggressionExhaustionReversal._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - flat_ranging:设置错误:TypeError:SolTakerAggressionExhaustionReversal._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - volatility_spike:设置错误:TypeError:SolTakerAggressionExhaustionReversal._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - zero_volume:设置错误:TypeError:SolTakerAggressionExhaustionReversal._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - price_gap:设置错误:TypeError:SolTakerAggressionExhaustionReversal._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个
验证失败(第 4 层——QA 审查): - WHOLE-STRATEGY SWAP:代码中的类是 EthOpenInterestConfirmedBreakout——在 ETHUSDT.BINANCE 上采用唐奇安 BREAKOUT,并以 OPEN-INTEREST 扩张作为门控,在走势WITH入场(动量延续)。假设则是针对 SOLUSDT.BINANCE 的吃单方主动性耗竭 REVERSAL,通过 taker_ratio 数据源检测极端吃单方主动成交量失衡 FADES。工具、信号数据源和优势方向全都不符——代码链接错误或生成有误。 - INSTRUMENT MISMATCH:假设命名为 SOLUSDT.BINANCE;配置/类/沙盒实际运行的全是 ETHUSDT.BINANCE-1-HOUR。 - CORE EDGE ABSENT:假设中的优势来自吃单方买卖主动成交量失衡(taker_ratio)。代码从未读取 taker_ratio——它读取的是 open_interest,并构建了一个 OI 增长门控。所述机制并未实现。 - EDGE DIRECTION INVERTED:假设是耗竭/REVERSAL(对走势进行反向交易)。should_enter 在向上突破时返回 BUY,在向下突破时返回 SELL——这是动量延续,方向正好相反。
验证失败(第 2 层——合成情景): 使用的参数:['sl_atr', 'tp_atr', 'entry_z', 'min_obs', 'move_bars', 'risk_frac', 'atr_period', 'min_sl_pct', 'min_tp_pct', 'exit_z_frac', 'lookback_bars', 'max_hold_bars', 'max_stale_hours', 'max_notional_frac'] 检查 __init__ 是否从 self.parameters.get() 设置了所有属性。 - steady_uptrend:设置错误:TypeError:SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - steady_downtrend:设置错误:TypeError:SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - flat_ranging:设置错误:TypeError:SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - volatility_spike:设置错误:TypeError:SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - zero_volume:设置错误:TypeError:SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个 - price_gap:设置错误:TypeError:SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接受 1 个位置参数,但给出了 2 个
验证失败(第 2 层——合成场景): 使用的参数:['sl_atr', 'tp_atr', 'entry_z', 'min_obs', 'move_bars', 'risk_frac', 'atr_period', 'min_sl_pct', 'min_tp_pct', 'exit_z_frac', '_param_bounds', 'lookback_bars', 'max_hold_bars', 'max_stale_hours', 'max_notional_frac'] 检查 __init__ 是否通过 self.parameters.get() 设置了所有属性。 - steady_uptrend: 设置错误:TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接收 1 个位置参数,但实际给出了 2 个 - steady_downtrend: 设置错误:TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接收 1 个位置参数,但实际给出了 2 个 - flat_ranging: 设置错误:TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接收 1 个位置参数,但实际给出了 2 个 - volatility_spike: 设置错误:TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接收 1 个位置参数,但实际给出了 2 个 - zero_volume: 设置错误:TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接收 1 个位置参数,但实际给出了 2 个 - price_gap: 设置错误:TypeError: SolTakerAggressionExhaustionReversalLS._bar_interval_ns() 接收 1 个位置参数,但实际给出了 2 个
结局总结
一个真正新颖且动机充分的信号族,在代码通过基本运行检查之前无法评估——某个辅助方法的签名与 Layer-2 验证代理不兼容(代理会重新绑定可调用对象并注入 self),导致每个合成情景都崩溃;因此,必须先确保代理重绑定辅助方法时的验证流程可靠,才能测试其优势。
已放弃
该策略在验证循环的第 2 层(合成情景)经过 3 次迭代后被放弃:六个情景全部因同一个 TypeError 失败——`_bar_interval_ns() takes 1 positional argument but 2 were given`——这是方法签名缺陷(Layer-2 代理会注入 self,而辅助方法的定义与之不兼容),导致策略完全无法运行。回测审查、优化、分析和风险审查均未进行。
在 SOLUSDT.BINANCE USD-M 永续合约上采用多空、单品种、单场所策略,针对由极端单边主动方攻击性失衡驱动的剧烈价格变动进行反向操作 —— 做空追涨的兴奋性市价买入(耗尽挂单卖盘流动性),做多恐慌性市价卖出砸入稀薄买盘 —— 使用 taker_ratio 数据源(与价格正交)相对其自身滚动历史进行 z 分数标准化,并结合同向价格变动要求,在订单流正常化、ATR 目标/止损或时间止损时平仓。
不存在业绩数据——该策略从未进入回测阶段,因此没有收益、夏普比率或交易指标。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。