# Backtest 使用指南 (crypto-t-monitor v2.0.0) ## 概述 `backtest.py` 用 OKX 历史 K 线模拟做T策略,验证参数在历史数据上的胜率和盈亏。 **适用**: 验证 `atr_multiplier` / `t_qty` / `bar` 参数组合,不是高频回测引擎(单 symbol, 单次模拟)。 ## 快速开始 ```bash # 默认 (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% | ## 参数调优示例 ```bash # 测试不同 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**。 ## 实战工作流 1. 调参前 baseline: `python3 ~/.hermes/scripts/crypto/backtest.py ETH > /tmp/baseline.txt` 2. 改 `atr_multiplier`,观察胜率和总盈亏 3. 找到最佳参数后,跑 BTC/SOL 验证(避免过拟合单个币种) 4. ≥ 3 个币种一致胜率 > 60% 才推到 `okx_t_monitor.py` 5. 实战**先用 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)