源文件:research/quant_digests/2026-03-20_2242_fixed-partial-fx-portability-trap.md
这轮主看 carlosrod723 (2025) 的 GitHub 仓库 MQL5-Trading-Bot,但不抄它最显眼的“多策略 FX 机器人”叙事,而是只抽其中一个更贴当前 desk 的旁支: partial exit / trailing 的触发阈值,到底该写成 fixed absolute distance,还是写成相对风险单位?
repo 里这段管理逻辑非常直白:
UsePartialExit = falsePartialExitRatio = 0.5UseTrailingStop = falseTrailStopPips = 20.0CheckPartialExit(...) 里直接写死:return (pips > 50);翻成人话:仓位走出固定 50 pips 就先砍半,trailing 默认也是固定 20 pips。 这在 FX / point-size 明确的环境里可以先跑起来,但如果直接搬去 Crypto 5m/15m,它更像一个可移植性陷阱: 你以为自己在研究“部分止盈有没有用”,其实先偷偷混进来了三件事:
R-multiple 或 ATR-scaled 触发。50 pips / 20 pips / 50%;再对照我们本地当前更接近生产的 exit 口径(ATR TP/SL + timeout),可见 absolute-distance partial 与现有 desk 的风险计量体系并不兼容。关键数据点:
CheckPartialExit() 只看 pips > 50,和 sl、tp、ATR 都没有关系。PartialExitRatio = 0.5,意味着一旦触发就固定砍半,而不是按波动或 path quality 调整。docs/CANARY_32B_PHASE6.md 里推荐 exit.tp_atr_mult = 1.25、exit.sl_atr_mult = 1.0、exit.timeout_minutes = 120;也就是 desk 已经默认用 ATR/时间 管理风险,而不是 fixed pips。翻成人话:
这不是偏题。
当前三条收口线里,entry 端今天已经非常拥挤:
final-verdict / timeout / follow-up / range-location / adaptive exhaustion;hold-quality / reclaim / confirmation / long-bias asymmetry;这时继续找一个“再多一层 admission filter”,边际未必最高。反而更缺的是: 一旦这笔单已经被放行,后半段到底该怎么拿、怎么减、怎么别被 absolute threshold 误导。
而且这件事和 backlog 是对齐的:
docs/FACTOR_BACKLOG.md 已明确把 trailing stop 变体 记为 SCOPED;所以这轮更像给三条线补 path-management common layer,不是把研究带偏。
V3 final-verdict / breakout-short follow-up对 breakout-short 来说,最怕的是:
avoid-chop / follow-up / final verdict;更诚实的做法是:
1R;+0.75R 或 +1.0R 再考虑 partial;Fibonacci confirmation / retest_holdFib 线的核心不是“动一点就收米”,而是“回踩守住后,能不能拿到第二段”。
如果 partial trigger 写成 fixed absolute distance,最容易发生两种错:
所以 Fib 更适合:
entry risk = low_of_retest - entry(或 mirror short);MFE >= 1R 或 MFE >= 1.0~1.25 ATR 时触发;hold-quality 的逻辑一致。EMA / PSAR raw alpha focusEMA / PSAR 线现在最大的风险,不是“少一个 fixed partial”,而是角色继续混乱。
如果 raw alpha 本来就薄,再加一个 absolute partial,常见结果不是更稳,而是:
因此这条线若要碰 partial,应该先当:
R-based de-risk overlay,不是新 alpha;PSAR trailing role、fail-fast overlay 分开测,不要偷带多轴变化。在冻结现有三条 entry 定义后,relative partial trigger(R-multiple / ATR-scaled)会比 fixed absolute trigger 更稳,也更容易跨 BTC/ETH/SOL 保持可解释性。
A | base:不做 partial,沿用当前 baseline exitB | fixed_abs_partial:代理 repo 口径,达到固定距离就砍 50%C | R1_partial:MFE >= 1.0R 时砍 50%D | ATR1_partial:MFE >= 1.0 ATR(entry) 时砍 50%BTC / ETH / SOL perpetual15m 主评估,必要时 5m 做执行细化180dnext-bar open、no-overlap6 / 10 / 15 bps per sidepost-cost expectancywinner_median_returnMFE_capture_ratiocross-asset dispersion(看它是不是只在单一资产碰巧有效)如果 fixed_abs_partial 的改善只来自:
那它不该被包装成“更聪明的 exit”,而应老实归类为 measurement mismatch / portability artifact。
50 pips 在 FX 平台里有明确语义,但迁到 crypto/perp 后,和 tick size / contract spec 的关系会变脏;R-multiple 与 ATR 也不是自动正确,它们只是比 fixed absolute threshold 更诚实的 first pass;no partial 做硬对照。N/Ahttps://github.com/carlosrod723/MQL5-Trading-Bothttps://github.com/carlosrod723/MQL5-Trading-BotMQL5/Experts/MyTradingBot.mq5MyTradingBot.mq5(position management / partial exit / trailing stop)N/Ahttps://github.com/carlosrod723/MQL5-Trading-Bot/blob/main/MQL5/Experts/MyTradingBot.mq5https://github.com/carlosrod723/MQL5-Trading-Botdocs/FACTOR_BACKLOG.mddocs/CANARY_32B_PHASE6.md