源文件:research/quant_digests/2026-03-18_2250_fast-entry-slow-exit-handoff-spine.md
这次看的是 yukai1625 (2025), freqtrade-strategy-portfolio 里的 CTAAggressiveBreakout。它不是一篇“证明 alpha 很强”的论文型材料,反而更像一份已经把交易哲学写进代码里的 repo:入场用快时钟,出场故意用慢时钟。
对我们 desk 真正值得偷的,不是“Donchian 突破”这件老事,而是它把 post-entry 管理拆得很清楚:
new breakout + volume filter;RSI + BB upper 做一次低频获利了结。翻成人话:fail-fast 可以是前 2~3 根 bar 的生死检查,但不必是整笔 15m 交易从头到尾都拴着的狗绳。 一旦 continuation 已经走出来,更合理的做法可能是:把仓位管理 handoff 给更慢、更钝的 hold-time spine。
这份 repo 的信息量不在故事,在参数:
breakout_len 超参范围是 15~40,默认 20;也就是它承认 entry 应该更敏感。exit_len 超参范围是 25~80,默认 35;也就是 exit 明确比 entry 更慢。ATR 周期可调 7~35,atr_mult 可调 2.5~5.0,默认 3.5;Chandelier stop 不是贴身 stop,而是给趋势单留喘息空间。RSI > 90 且 close > BB upper 才触发,显然不是想把每一笔都快进快出。一句话总结源码逻辑:先用快 trigger 抓到“开始动了”,再用慢 exit 判断“是不是已经真走坏了”。
如果只看今天 bot7 已经消化过的材料,三条收口线的“前段确认”其实已经很拥挤了:
fail-fast / path overlay / follow-up gate;0.618 hold / 0.5 fail / retest quality;role framing / close-confirm / regime veto。这时候继续往 entry 端再塞一个新 veto,边际价值未必最高。更缺的反而是:一旦 entry 被确认,后半段到底该用什么 clock 管理。 这正好对应 backlog 里还没独立实验的 trailing stop 变体。
所以这轮主题比继续找一个“新入场按钮”更值:它不是把三条线带偏,而是给三条线补了一个共同缺口——post-confirmation 之后的持仓时钟。
V3 final-verdict / breakout-short follow-up对 breakout-short 来说,最容易犯的错不是“没看到 break”,而是刚 break 完、第一下逆抽就把 continuation 当失效。repo 给的启发是:
fail-fast 仍然保留,但只负责最前段;rolling_low + ATR 改成 short-side chandelier = rolling_low + k * ATR,再配 slow Donchian high 作为结构失效线。Fibonacci confirmation / retest_hold对 Fib 来说,0.5 fail 很适合当是否 hold 失败的底线,但未必适合当整笔仓位一路怎么出的唯一规则。更像的做法是:
0.618 hold / reclaim / confirmation;N 根 bar 或者顺向走出 0.75~1.0 ATR,再切到 slow exit;EMA / PSAR raw alpha focusEMA / PSAR 这条线现在最该警惕的是:别把所有改进都压到入场。 如果 raw alpha 本身有一点延续底子,那么更便宜的增益,可能来自 post-entry management 而不是新 filter。尤其 PSAR 这类天生偏快的翻面工具,更适合做 early-warning,而不是整笔单一路追着翻。
两段式 exit(前段 fail-fast,存活后 handoff 到 slow exit)会优于:
A:现有 baseline exitB:全程 fail-fast(沿用现有 fast failure 规则)C:全程 slow Donchian / ChandelierD:handoff 版:前 2~3 根 bar 用 fail-fast;若未触发,且顺向浮盈达到 0.75 ATR 或存活满 3 根 bar,则切到 slow exitchandelier_long = rolling_high(L) - k * ATR(14)donchian_exit_long = close < rolling_low(L_exit)chandelier_short = rolling_low(L) + k * ATR(14)donchian_exit_short = close > rolling_high(L_exit)L/L_exit ∈ {20, 35},k ∈ {3.0, 3.5} 就够了。post_cost_expectancywinner_median_return / winner_hold_barsMFE_capture_ratio(最大有利波动到底有没有被拿住)giveback_after_handoff(handoff 后是否只是把利润吐回去)MFE_capture_ratio 和 giveback,而不只看均值收益。2~3 bars、0.75 ATR)也可能过拟合;第一轮要用粗网格,小参数族,不要把管理层调成第二个黑盒。最直接的一步,不是再写新 digest,而是把 当前三条线里已经冻结的 entry 各抽 1 个代表版本,跑同一套 A/B/C/D exit 对照:
final-verdict 的 follow-up 版本;0.618 hold / 0.5 fail 当前最诚实版本;如果结果显示:
D 组能稳定抬升 winner_median_return,post_cost_expectancy 和 max drawdown 明显拖坏,那它就值得升成三条线共用的 shared exit overlay candidate;否则就把它老实留在 backlog,不要因为“听起来高级”就偷渡进主线。