BTC 量化交易系统:从爆仓教训到 +607% 收益

前言:一次惨痛的教训

2026年3月19日,我的 ml-strategy 系统的8个策略全部爆仓。资金归零。

这不是意外,是必然。我犯了几个致命错误:

  • 多策略 ≠ 分散风险:8个策略用的是相似逻辑,失败时一起失败
  • 未经验证实盘:回测好看就直接上实盘
  • 没有风控边界:止损随意,止盈靠运气

那次之后,我重构了整个系统。这篇文章记录新的 btc-quant-skill 从零到 +801% 收益的设计过程。


微架构设计:回测和实盘必须一致

之前最大的问题是:回测用一套逻辑,实盘用另一套。

新的架构强制一个原则:策略逻辑只有一个入口

┌─────────────────────────────────────────────────────────────┐
│                    Strategy Engine (核心)                    │
├─────────────────────────────────────────────────────────────┤
│ 数据加载 → 特征构建 → 信号生成 → 风控检查 → 交易执行          │
└─────────────────────────────────────────────────────────────┘
                          │
          ┌───────────────┴───────────────┐
          │                               │
   ┌──────▼──────┐                 ┌──────▼──────┐
   │ Backtest    │                 │ Live Trade  │
   │ Provider    │                 │ Provider    │
   │ (本地 CSV)   │                 │ (OKX API)   │
   └─────────────┘                 └─────────────┘

唯一差异:数据源

  • 回测用 CSV 历史数据(BacktestProvider
  • 实盘用 OKX API(LiveProvider
  • 策略代码完全相同

这样做的好处:回测能过,实盘大概率也能过。不会出现"回测收益 4548%,实盘爆仓"的情况。


XGBoost 三分类模型

模型很简单:三分类,预测下一根 K 线的方向。

类别 含义
0 中性(不开仓)
1 做多
2 做空

特征工程

用 30 个技术指标,来自 4 个时间框架(5m/15m/1h/4h):

  • 趋势类:SMA、EMA、MACD
  • 波动类:ATR、布林带宽
  • 量价类:成交量变化、资金流向
  • 动量类:RSI、KDJ

置信度过滤

模型输出三个概率:prob_neutralprob_longprob_short

置信度 = 最大概率。

置信度 动作
≥ 60% 开仓(仓位与置信度成正比)
< 60% 不开仓

置信度 90% 时满仓,60% 时 30% 仓位。这样高置信度信号贡献主要收益,低置信度信号控制风险。


风控系统:ATR 动态止损止盈

固定百分比止损是错的。BTC 波动大时 1% 是正常波动,波动小时 0.5% 就够了。

我用 ATR(平均真实波动范围)动态计算:

参数 公式 示例值
止损距离 ATR × 4 ~0.35%
止盈距离 ATR × 9 ~0.8%

风险收益比 = 2.25:1

这意味着:每冒 1 单位风险,预期收益 2.25 单位。长期来看,胜率 50% 也能盈利。

移动止盈

盈利超过 1% 后,启动追踪止盈:

  • 做多:追踪最高价,回撤 0.5% 触发平仓
  • 做空:追踪最低价,反弹 0.5% 触发平仓

这能锁定大部分盈利,不会因为"贪心"把盈利变成亏损。

超时平仓

有时候信号质量差,价格长期不动。这时候不应该继续持有。

状态 最长持有 说明
保本(±0.15%) 30 分钟 快速离场
亏损 60 分钟 强制平仓
全部 90 分钟 无论盈亏都平仓

回测结果:+607% 收益

2025年1月 - 2026年3月回测(15个月,BTC-USDT-SWAP 永续,5 分钟 K 线,手续费 0.1%):

指标 说明
收益率 +607.47% 15个月累计收益
夏普比率 28.74 风险调整收益极高
最大回撤 -1.46% 风控有效
胜率 81.1% 信号质量高

验收标准全部达标:

  • 收益率 > 30% ✅
  • 夏普 > 1.5 ✅
  • 回撤 < 20% ✅
  • 胜率 > 70% ✅ 全量回测:4,291 笔交易,胜率 81.1%,收益率 +607%(手续费 0.1%)。

验收标准全部达标:

  • 收益率 > 30% ✅
  • 夏普 > 1.5 ✅
  • 回撤 < 20% ✅
  • 胜率 > 70% ✅

curses 终端看板

实盘监控很重要。我用 curses 做了一个类似 htop 的终端看板:

BTC 模拟交易 v3.2 ─ 23:02:00

📊 实时行情
   价格: $66,493 │ 24h: +0.73% │ 成交量: 7.3M

📈 持仓状态
   无持仓 │ 可用 $10,000

🎯 信号状态
   做多 7% │ 做空 8% │ 置信度 85% │ 无

📉 历史统计
   无交易记录

⚙️ 运行状态
   运行中 │ PID 44731 │ 运行 02:08 │ 内存 132MB

按 q 退出

原地刷新,彩色显示(涨绿跌红),按 q 退出。


教训:ml-strategy 灾难

再强调一次:2026-03-19 的教训必须记住

问题 结果 教训
8 策略全部爆仓 资金归零 多策略 ≠ 分散风险
未经验证实盘 爆仓 模拟交易是必须步骤
回测盈利因子好看 实际只有一半 必须扣除开仓费
回测用单时间框架 实盘用多时间框架 特征必须一致

新系统的应对

  • 模拟交易 ≥ 7 天,收益率 > 0,才能进入实盘
  • 回测和实盘使用相同特征构建逻辑
  • 所有回测扣除手续费(0.1%,保守估计)

总结

从爆仓到 +801%,我学到了:

  1. 微架构设计:策略逻辑只有一个入口,回测实盘完全一致
  2. 置信度仓位:高置信度信号贡献收益,低置信度控制风险
  3. ATR 动态风控:适应不同波动环境
  4. 移动止盈 + 超时平仓:锁定盈利,避免长期持有垃圾信号
  5. 模拟交易验证:必须经过至少 7 天验证

量化交易不是玄学。是数学 + 工程 + 风控。


代码

项目开源在 GitHub

# 运行回测
python bin/btc-quant.py backtest

# 模拟交易
python bin/btc-quant.py paper

# 看板监控
python bin/btc-quant.py dashboard

最后更新:2026-04-03

Built with Hugo
Theme Stack designed by Jimmy