- NEW_COIN_PICKS=2: 每次扫描后筛 2 个 (按 24h vol 排序) - NEW_COIN_POOL_MAX=6: 永久保留上限, 超限自动裁最早加入 - 30 天内新币 + 24h vol > $1M, 自动加入监控池 - 推 QQ 仅在变化时 (与 v2.1 C 方案一致) - references/: 新增 backtest-usage.md, change-driven-push.md, symbol-coverage-pitfall.md 用户原话: 新币最多保留六个, 每次扫描后筛选 Co-Authored-By: Claude <noreply@anthropic.com>
4.2 KiB
4.2 KiB
Backtest 使用指南 (crypto-t-monitor v2.0.0)
概述
backtest.py 用 OKX 历史 K 线模拟做T策略,验证参数在历史数据上的胜率和盈亏。
适用: 验证 atr_multiplier / t_qty / bar 参数组合,不是高频回测引擎(单 symbol, 单次模拟)。
快速开始
# 默认 (ETH, 短期 = 1H K线, 7 天) - 用户偏好
python3 ~/.hermes/scripts/crypto/backtest.py ETH
# 显式指定 4H/30 天 趋势模式
python3 ~/.hermes/scripts/crypto/backtest.py BTC --mode trend
# 自定义 ATR 系数 (默认 0.7)
python3 ~/.hermes/scripts/crypto/backtest.py ETH \
--days 14 --bar 4H --atr-multiplier 0.5 --t-qty 0.03
参数说明
| 参数 | 默认 | 选择 | 说明 |
|---|---|---|---|
symbol (必填) |
- | ETH/BTC/SOL/DOGE/XRP | OKX 永续合约 |
--mode |
short (用户偏好) | short/trend | short = 1H+7天 短线;trend = 4H+30天 趋势 |
--days |
mode 决定 | 1-90 | 回测窗口天数 |
--bar |
mode 决定 | 1H/4H/1D | K 线周期(以 mode 默认覆盖) |
--atr-multiplier |
0.7 (实测甜点) | 0.3-2.0 | ATR 倍数,越大越保守 |
--t-qty |
0.05 | 0.01-1 | 单笔张数 |
--leverage |
25 | 5-125 | 杠杆倍数 |
--ct-val |
0.1 | 看币种 | 合约面值(代码里 SYMBOL_SPECS) |
ATR 倍数选择 (实测 2026-07-10, 200根 1H K线)
| ATR | 交易/7天 | 胜率 | 总盈亏 |
|---|---|---|---|
| 0.5 | 124 | 79.0% | $16.36 |
| 0.7 | 适中 | 81.6% ⭐ | $16.41 |
| 1.0 | 偏少 | 78.8% | $11.54 |
| 1.5 | 很少 | 66.7% | $4.17 |
结论: 短期模式 ATR=0.7 是甜点(已落地 crypto/okx_t_monitor.py v2.0.0)。不要用 0.5(交易过度,手续费吃光)或 1.5(过保守,捕捉不到)。
输出解读
📊 ETH 1H 回测 (7 天, mode=short)
ATR=0.5 t_qty=0.05 lev=25x
📥 拉到 200 根 K 线
📈 回测结果:
买入: 62 次
卖出: 62 次
胜率: 79.0%
总盈亏: $16.36
最终仓位: 0 (全平)
评估表:
| 指标 | 达标 | 警告 |
|---|---|---|
| 胜率 | ≥ 60% | < 50% |
| 总盈亏 | > 0 | < -10 USDT |
| 交易频率(7天) | 20-50 次 | > 100 (手续费吃光) |
| 最大回撤 | < 15% 资金 | > 25% |
参数调优示例
# 测试不同 ATR 倍数
for m in 0.3 0.5 0.7 1.0 1.5; do
echo "=== ATR $m ==="
python3 ~/.hermes/scripts/crypto/backtest.py ETH --atr-multiplier $m
done
# 测试不同币种找参数稳健性 (避免过拟合单个币种)
for sym in ETH BTC SOL; do
echo "=== $sym ==="
python3 ~/.hermes/scripts/crypto/backtest.py $sym
done
# 找到最佳参数后才落盘到 okx_t_monitor.py
🛑 使用禁忌
- 不要过拟合: 用 200 根 K 线找出来"最佳参数"对外样本(未来)很可能失效。每月最多调一次参数。
- 不要同时改多个参数: 1 个 → 验证 → 再改下一个
- 不要在战斗日调参: 周一调参, 周二之前观察,如果连续 2 单连亏 → 立即退回上次稳定参数
已知问题 + 临时绕路
1. Clash 抽风 → subprocess 20s timeout
症状: [Command timed out after 20 seconds]
绕路:
- 手动重试 (90% 概率下次成功)
- SSH 跑:
ssh openclaw@vps 'python3 ~/.hermes/scripts/crypto/backtest.py ETH'
2. 4H K 线拉不够 30 天
症状: --mode trend --days 30 --bar 4H 报 "❌ 没拉到数据"
原因: OKX history-candles 4H 翻页逻辑当前代码有 bug
绕路: 用 --mode short --days 28 --bar 1H (200 根 K 线)
3. 回测假设市价滑点 = 0
实际 4H K 线内会有 0.05-0.1% 滑点 + taker 手续费 0.05%。真实盈利 ≈ 回测盈利 × 0.85。避免把回测当实盘 max。
实战工作流
- 调参前 baseline:
python3 ~/.hermes/scripts/crypto/backtest.py ETH > /tmp/baseline.txt - 改
atr_multiplier,观察胜率和总盈亏 - 找到最佳参数后,跑 BTC/SOL 验证(避免过拟合单个币种)
- ≥ 3 个币种一致胜率 > 60% 才推到
okx_t_monitor.py - 实战先用 0.01 张试水 2-3 天,验证后再扩大规模
相关文件
- 脚本:
~/.hermes/scripts/crypto/backtest.py - 主监控:
~/.hermes/scripts/crypto/okx_t_monitor.py - ATR 算法详解:
references/level-dynamic-calculation.md(TODO) - 网络重试机制:
references/api-fallback.md(TODO)