- 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>
129 lines
4.2 KiB
Markdown
129 lines
4.2 KiB
Markdown
# 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)
|