登录

策略墓地

跟单平台会删掉爆仓的交易员;我们反过来 —— 公开展示自己试过并放弃的每一个策略,和它们的死因。失败记录和盈利记录一样,都是真实的一部分。

这些策略的代码已删除(2026-04-22),本页是它们仅存的记录。

骗过我们的 5 个模式

下面的每个策略,都至少通过过其中一项"看起来很棒"的测试 —— 然后在现实里失败。

  1. 样本内盈利因子(PF)> 3 → 几乎必然过拟合。样本内和样本外的差距,90% 是噪音。

  2. Calmar > 20 是红灯,不是卖点 —— 说明样本太小,还没遇到真正的回撤。

  3. 样本内 p < 0.0001 → 在样本内数据上谈统计显著性,是循环论证。

  4. 单个样本外窗口盈利 → 一个幸运季度能掩盖四个亏损季度。永远走 walk-forward。

  5. LLM 情绪信号("极端时逆向"提示词):Claude 不管什么行情,96% 的情况都回答 contrarian=true —— 所谓信号只是加了步骤的随机噪音。

墓碑 15 个策略

情绪 / ML 过拟合家族

这里的每一个策略都至少通过过一项上面的"看起来很棒"测试,然后在现实里失败。

SentimentTrend.py

实盘模式 LLM 情绪策略
死因
样本内 PF 6.86,样本外塌到约 1.05。
当时看起来
手工 FnG 闸门 + LLM 情绪 + 反思记忆 + BTC 周期指标的组合,200+ 个特征。
实际发生
特征重要性分析显示:LLM 信号贡献为 0%,与 FnG 完全冗余。大多数"特征"只是恰好与 2024 年牛市价格相关的噪音。
教训
教训: 加特征 ≠ 加优势。永远做消融实验(ablation)。

SentimentTrendBT.py / SentimentTrendBT.json

死因
SentimentTrend.py 的可回测版本,用历史 FnG + 重建的 LLM 输出。测了 v1–v6 共 6 个变体,没有一个有样本外优势。
教训
教训: 历史情绪重建是一个会泄漏的抽象(leaky abstraction)。

SentimentUltimate.py

死因
手工特征 + FreqAI LightGBM 分类器的混合。样本内 PF 6.86 → 样本外 PF 1.05。教科书级过拟合。
教训
教训: 在没有先验经济逻辑的特征上跑 ML = 拟合噪音。

SentimentHybrid.py

死因
更早的混合尝试,从未通过样本外检验。
教训
教训: 不能用训练模型的那份数据来验证模型。

SentimentRL.py / SentimentRL1h.py

死因
PPO / A2C 强化学习智能体。样本内学会了"加了步骤的买入持有";样本外:彻底亏损,然后躺平不动。
教训
教训: 在小样本金融数据(区区几百万个 tick)上,RL 会灾难性过拟合。你需要跨多个市场的数百万个 episode 才够。

SentimentFreqAI.py / SentimentFreqAIClassifier.py

死因
FreqAI 流水线,LightGBM、XGBoost、PyTorch MLP、Transformer 全试了。样本内拟合都很漂亮(Calmar > 50),样本外全部消失。
教训
教训: n < 5000 个样本配 50+ 个特征,ML 模型只会记忆,不会泛化。没有例外。

早期迭代

被后续架构取代的雏形 —— 不是因为亏钱而死,而是因为不够好。

TrendFollowEMA.py

死因
最早的趋势跟踪策略,被 HonestTrendGeneric 及其子类替代。功能相似,但没有 FnG 防御、风控集成和 walk-forward 验证。
教训
教训: 任何策略的第一版都是原型,不是产品。

DonchianBreakout.py

死因
日线级别的突破尝试。每年约 8 笔交易,太少,没法验证。样本外结论不明。
教训
教训: 交易频率太低时,不管表面结果多好,回测在统计上都是没用的。

死掉的优势

看起来是真的,其实不是。统计上最漂亮的尸体埋在这里。

PairMeanReversion.py

ETH/BTC 均值回归
死因
均值回归假设在 2025 年被持续的 ETH/BTC 单边趋势打破。样本外:亏钱。
当时看起来
ETH/BTC z-score 均值回归:z < −2 时买 ETH(ETH 相对 BTC 低估),z 回到 0 时退出。诱人的统计:样本内 p < 0.0001(n=2382,平均每周 +0.96%)。
实际发生
2025 年 ETH/BTC 出现持续的单边趋势漂移,均值回归的前提不复存在。
教训
教训: 历史数据上的统计显著性,不保证底层市场状态(regime)会持续。"每个策略都死于坠崖"(Taleb)。永远给 regime 变化留一个 kill-switch。

HonestTrend 早期版本

这些版本早于 HonestTrendGeneric + 风控框架。它们是梯子上的横档,不是梯子本身。

HonestTrend.py

日线
死因
每年约 10 笔交易。两年下来 n=20,什么都验证不了。
教训
教训: 日线级趋势跟踪、3 个交易对,样本量不足以做任何显著性检验。

HonestTrend1h.py

1 小时
死因
多组参数下样本外 −14% 到 −25%。Stage 2 跨周期测试后来证实:这个优势在 1h 级别完全失效,与 EMA 参数选择无关。
教训
教训: "信号在 X 周期有效"往往其实是"执行在 X 周期有效"的简写。延迟是致命的。

HonestTrend1m.py

1 分钟,原始版
死因
被 HonestTrend1mLive.py 子类替代。这是风控框架出现之前的原始版本。
教训
教训: 风控要在部署前加,不是部署后。

HonestTrend15m.py + .json

15 分钟,原始版
死因
被 HonestTrend15mDry.py 替代。这是 hyperopt 拟合版(EMA 94/139,比率 1.48x)—— 当时我们还不知道这个拟合是不是真的。
教训
教训: hyperopt 的结果必须先通过 walk-forward 验证,才能被当作"正式参数"。

HonestTrend15m_2xRatio.py + .json

死因
完成使命后退役 —— 它证明了优势是真的(非 hyperopt 的 2x 比率组合在样本外也盈利),但不如 1.48x 比率稳健。
当时看起来
Stage 1 测试脚手架:固定 slow = 2×fast,fast 在 24、48、72、96、128、160 之间变化。
教训
教训: 测试脚手架要和生产代码分开放。

HonestTrend4h.py

4 小时
死因
样本外 PF 最高(1.74),但每年只有约 15 笔交易,不足以做有意义的验证。不是坏策略,只是数据不够、无法信任。
教训
教训: 15 笔交易上的 PF 1.74,意味着 PF 的 95% 置信区间大约是 [0.7, 4.5]。等于没说。

活下来的策略长什么样?看 8 个市场环境的滚动检验 →

复活条件:必须重新通过完整 walk-forward,无一例外。