Appearance
一个看起来完整的模型,为什么后来被推翻
0. 背景
FTX-0003 的参数设计方案 V1形成以后,一度看起来已经比较完整。
- 方法论层面:用固定 Anchor(而非滚动 250 日高点)计算回撤,解决了坐标漂移问题;用历史峰谷回撤统计(510300 的 -28%~-53%,159915 最深 -70%)证明“-30% 不是极限”;还专门推导了“回撤扩大 20 个百分点 ≠ 实际再亏 20%”这类容易产生数学错觉的地方。
- 执行层面:前段按股数(100 → +500 → +1000 → +1500),深水区改用累计本金投入率(-35% → 25%、-40% → 45%、-45% → 70%、-50% → 100%),并且严格定义投入率只看实际成本、不看浮亏市值,避免“越跌越像有空余额度”的危险反馈。
- 架构层面:进一步扩展出总资金分层(场外储备 E / 证券账户 B / 永久现金 R / 风险本金 C)、融资支线(双重锁:绝对额度 + 担保比)、Call 尾部支线,四条资金线各司其职、互不透支。
但是——
这次对方案 V1 的重新审视,并不是从“检查 V1 是否有问题”开始的。
最初只是想了解一下:沪深300和标普500到底有什么区别?
讨论标普500时,提到了它的成分股筛选中还包含盈利能力等要求。“盈利”这个词由此进入了讨论。
继续往下聊,又回到了 2024 年 9·24 前后的行情。这时我产生了一个很直接的想法:
如果当时能在 9·24 之前开始买入就好了。
把这个想法重新放回方案 V1,会发现一个很明显的不吻合。
方案 V1 使用此前的重要高点作为 Anchor,并根据相对 Anchor 的回撤幅度逐步启动买入。
而到了 9·24 之前,我现在回头认为“如果从这里开始买就好了”的位置,市场距离此前高点其实已经非常远,相对 Anchor 已经进入了很深的回撤区域。
也就是说,我实际认为值得开始承担风险的位置,和方案 V1 根据 Anchor 推导出来的 START,相差很远。
这时问题第一次变得具体:为什么会差这么远?
顺着前面已经出现的“盈利”这个词,问题又继续往下走:深度回撤实验历史回测到底能赚多少?这些盈利又是从哪里来的?
如果收益主要来自深度下跌之后的修复,那么仅仅知道“已经从 Anchor 跌了多少”还不够。
还需要回答另一个问题:为什么到了这个位置以后,修复开始变得值得期待?
到这里,我才第一次真正开始怀疑:
Anchor 能够描述市场已经跌了多深,但它是否真的应该决定 START?
随后又想到自己对白酒 ETF 的实际交易经历。
我并不是从 2021 年开始持续关注白酒 ETF,而是在 2026 年看到它时,发现它已经连续下跌约 5 年、相对高点回撤约 50%。也正因为已经经历了这么长时间和这么深的下跌,我才开始认为这里进入了可以考虑承担风险的位置,并在 2026 年第一季度分批入场。
这再次说明:重要高点早已存在,但真正愿意开始承担风险,并不是因为价格机械地跌到了某个固定 Anchor Level。
1. 方案 V1 原本想解决什么问题
方案 V1 的目标很明确:
当市场进入深度回撤以后,不去猜真正的底,而是根据回撤深度逐步释放资金。
因此,它选择本轮下跌前的重要高点作为 Anchor。
以 Anchor 为固定基准,可以计算当前市场已经从高点下跌多少:
相比滚动高点,这种方式不会因为时间窗口移动而改变回撤坐标。
在这个基础上,方案 V1 继续向前走了一步:
text
Anchor
↓
-20%
↓
-25%
↓
-30%
↓
-35%
……市场距离高点越远,逐步增加投入。
这种设计在当时很容易成立。
价格跌得越深,风险释放通常越充分,因此越往下可以越愿意承担仓位。
随着方案继续完善,Anchor 逐渐同时承担了三个职责:
- 描述市场已经跌了多深;
- 判断什么时候开始买入;
- 决定后续加仓的位置。
当时没有意识到,这三个问题并不是同一个问题。
2. 一个现实反例,把核心漏洞暴露出来
前面想到的白酒 ETF,是一个更直接的现实例子。
9·24 的想法毕竟来自事后回看:“如果当时能在那个位置开始买就好了。”这个判断不可避免地已经知道了后面的市场走势。
白酒 ETF 不一样。这是一笔真实发生过的交易决策。
前面已经提到,我是在 2026 年开始关注这个方向,并在当年第一季度分批入场。真正值得关注的不是具体买入时间,而是当时形成决策的方式:我并不是因为价格刚好跌到了某个预先设定的 Anchor Level 才决定买入。
我看到的是一个已经连续下跌多年、距离历史高点已有很深回撤的方向,并据此开始认为这里进入了可以承担风险的位置。而且买入以后,价格并没有立即修复,仍然继续出现了明显浮亏(最大约-25%)。
这使得问题更加直接。如果 Anchor 回撤本身就足以决定 START,那么只要价格依次达到预设的 Anchor Level,就应该自然产生买入信号。但我的实际决策并不是这样形成的。这说明 Anchor 真正能够回答的是:
现在距离过去的重要高点已经有多远?
但它不能单独回答:
现在是不是一个值得开始承担风险的时刻?
这两个问题在方案 V1 中被混在了一起。
问题不在于 -30% 设置错了
发现这个问题以后,很容易想到一种修补方式:
text
既然 -30% 太早,
那就改成 -40%。
如果 -40% 仍然太早,
那就改成 -50%。但这样并没有解决根本问题。
下一轮深度回撤中,真正适合 START 的位置可能出现在:
- -20%;
- -35%;
- -50%;
- 或者更深的位置。
不同市场周期中的政策环境、资金行为、估值状态和风险来源都可能不同。
因此真正需要被推翻的并不是:
START = -30%
而是:
试图用固定的 Anchor 回撤百分比定义 START。
如果这个关系本身没有被证明成立,那么继续寻找一个“更好的百分比”,只是在错误模型上优化参数。
Anchor 承担了太多职责
回头看方案 V1,一个明显的风险信号其实已经存在。
Anchor 同时被用来回答:
text
市场跌了多深?
什么时候开始?
下一笔什么时候买?三个问题性质不同。
方案 V2 后来之所以能够变得更清楚,并不是因为公式更复杂,而是因为重新拆分了职责:
text
Anchor
→ 描述市场已经跌了多深
START
→ 决定什么时候第一次承担风险
局部回撤梯度
→ 决定 START 以后什么时候继续买入这也形成了一个以后可以重复使用的检查方法:
当一个变量同时控制多个不同阶段时,需要检查这些职责是否真的属于同一个判断逻辑。
3. 为什么当时没有更早发现问题
完整感容易被误认为正确性
方案 V1 不是一个明显粗糙的方案。
恰恰相反,它有:
- 历史数据;
- 回撤统计;
- 数学公式;
- 分档参数;
- 资金比例;
- 极端行情回测。
这些东西会产生很强的完整感。
当一个模型已经可以写成公式、整理成表格、跑出回测结果以后,很容易产生一种感觉:
主要问题已经解决,剩下只是参数优化。
但内部完整并不能证明基础假设成立。
一个模型可以:
- 数学上完全自洽;
- 程序运行完全正确;
- 回测结果也没有计算错误;
同时仍然建立在一个错误的问题定义上。
方案 V1 就存在这个问题。
程序可以正确计算:
text
从 Anchor 下跌 30%但这并不能证明:
text
下跌 30% 就应该开始买入前者是市场状态。
后者是行动判断。
两者之间缺少了一层证据。
当时缺少的是“专门反对这个模型的人”
方案 V1 形成以后,后面的讨论更多是在问:
怎样把这套方案做得更合理?
例如:
- 回撤档位应该多密;
- 创业板是否应该更保守;
- 深水区应该投入多少;
- 应该保留多少现金。
这些问题都默认了一个前提:
这套模型的基本结构是成立的。
没有单独安排一个阶段去问:
这套模型为什么可能根本就是错的?
设计者和审查者其实是两个不同角色。
设计者关注:
怎样让方案工作?
审查者应该关注:
怎样找到一个例子把方案推翻?
如果一直处在设计者角色,就很容易继续完善现有结构,而不是挑战这个结构本身。
没有主动拿现实经历做冲突测试
白酒 ETF 的交易经历已经发生,但此前并没有把它和方案 V1 放在一起比较。
直到 9·24 的 START 错位已经引出了问题,再回头想到白酒 ETF,才发现自己的实际决策里也存在同样的现象:
重要高点很早就存在,但真正愿意开始承担风险的位置,并不是由某个固定 Anchor Level 自动决定的。
现实行为不是天然正确,但当模型给出的动作和真实决策发生明显冲突时,至少应该继续追问:
为什么会冲突?
这个问题有时比继续增加回测样本更重要。
回测验证了执行结果,却没有验证行动依据
历史回测通常回答:
如果按照这套规则执行,结果会怎样?
但它没有自动回答:
为什么我要相信这套规则本身值得执行?
例如可以回测:
text
Anchor -30% 买入
-35% 加仓
-40% 再加仓然后得到平均成本、最大浮亏和修复时间。
这些结果可以全部计算正确。但它们并不能证明:
-30% 为什么应该是第一次承担风险的位置?
这是两类不同的问题。
如果行动依据没有被验证,再精确的回测也只能证明这套规则如果执行,会得到什么结果。不能证明 这套规则为什么应该这样定义。
4. 下一代方案应该增加什么检查
方案 V1 的退役,不只是留下了一个“Anchor 不应该决定 START”的结论。
更重要的是,它暴露出模型设计过程中缺少一个独立的反证阶段。
以后每一代参数方案准备冻结之前,都应该先尝试主动证明它是错的。
可以固定检查几个问题:
- 有没有真实经历与模型结论明显冲突;
- 把关键参数放到极端位置后,模型是否仍然合理;
- 是否有一个变量承担了多个不同职责;
- 是否把“市场处于某种状态”直接等同于“应该采取行动”;
- 使用的信号在真实执行当时是否能够观察到;
- 哪些事实一旦出现,就足以推翻当前方案。
尤其应该保留一个问题:
如果我的解释是真的,我还应该看到什么?
以及另一个相反的问题:
出现什么现象时,我会承认当前解释是错的?
方案完成以后,不应该立即进入参数优化。
先寻找:
text
现实反例
极端场景
隐藏假设
职责混淆
不可观察信号
状态与行动之间缺失的判断依据如果这些检查没有击穿模型,再继续讨论具体参数。
方案 V1 仍然保留,不是因为它还可以继续执行,而是因为它完整记录了一次模型形成、获得完整感、暴露反例并最终退役的过程。
如果只保留后来的方案 V2,能够看到的是:
Anchor、START 和局部回撤梯度应该分开。
但看不到为什么需要这样分开。
这次真正值得留下的教训是:
一个模型最危险的时候,有时并不是它明显不完整的时候,而是它已经足够完整,以至于让人停止继续怀疑它的时候。