feat: Wiki流程图解补全 - 新增风险管理完整流程和回测完整流程(含压力测试、过拟合检测、实盘路径)
这个提交包含在:
234
wiki/流程图解/回测完整流程.md
普通文件
234
wiki/流程图解/回测完整流程.md
普通文件
@@ -0,0 +1,234 @@
|
||||
# 回测完整流程图解
|
||||
|
||||
> 返回:[流程图解目录](./README.md) | [Wiki 主索引](../README.md)
|
||||
> 相关文档:[回测方法论与实践](../../07_回测框架/回测方法论与实践.md) | [回测名词解释](../名词解释/回测.md) | [tradehk 信号评分引擎](../tradehk/信号评分引擎.md)
|
||||
|
||||
---
|
||||
|
||||
## 一、回测总体流程
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 量化策略回测 7 步流程 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
|
||||
第一步:数据准备
|
||||
↓
|
||||
第二步:策略定义与参数设置
|
||||
↓
|
||||
第三步:数据集分割(训练/验证/测试)
|
||||
↓
|
||||
第四步:信号生成(严格避免前视偏差)
|
||||
↓
|
||||
第五步:参数优化(在验证集上)
|
||||
↓
|
||||
第六步:样本外测试(只执行一次)
|
||||
↓
|
||||
第七步:结果分析与决策
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、第一步:数据准备流程
|
||||
|
||||
```
|
||||
数据来源选择:
|
||||
├─ Binance API(推荐,数据质量最高)
|
||||
├─ CoinGecko(备用,部分历史数据)
|
||||
└─ 本地数据库(已采集的历史数据)
|
||||
│
|
||||
▼
|
||||
数据质量检查:
|
||||
├─ 检查缺失 K 线(时间戳连续性)
|
||||
│ └─ 缺失 > 5%:重新获取或标记为不可用
|
||||
├─ 检查异常值(单根 K 线涨跌幅 > 50%)
|
||||
│ └─ 确认是否为真实行情或数据错误
|
||||
├─ 检查成交量(成交量为 0 的 K 线)
|
||||
│ └─ 标记为低流动性时段,回测时跳过
|
||||
└─ 时区统一(统一转换为 UTC+8 北京时间)
|
||||
│
|
||||
▼
|
||||
数据格式标准化:
|
||||
列名:timestamp, open, high, low, close, volume
|
||||
时间格式:Unix 时间戳(毫秒)
|
||||
价格精度:保留 8 位小数
|
||||
存储格式:Parquet(推荐)或 CSV
|
||||
```
|
||||
|
||||
### 各品种推荐回测数据量
|
||||
|
||||
| 品种 | 最少数据量 | 推荐数据量 | 原因 |
|
||||
|------|----------|----------|------|
|
||||
| BTC | 6 个月 | 2 年 | 需覆盖牛熊周期 |
|
||||
| ETH | 6 个月 | 2 年 | 同 BTC |
|
||||
| SOL | 3 个月 | 1 年 | 历史数据较短 |
|
||||
| BNB | 6 个月 | 2 年 | 需覆盖季度销毁 |
|
||||
| DOGE | 3 个月 | 1 年 | 高度事件驱动 |
|
||||
| XAUT | 6 个月 | 2 年 | 需覆盖多个宏观周期 |
|
||||
|
||||
---
|
||||
|
||||
## 三、第三步:数据集分割规则
|
||||
|
||||
```
|
||||
时间顺序分割(不可随机分割!):
|
||||
|
||||
总数据时间范围:T_start → T_end
|
||||
│
|
||||
├─ 训练集(70%):T_start → T_split1
|
||||
│ 用途:策略开发和初步参数设置
|
||||
│
|
||||
├─ 验证集(15%):T_split1 → T_split2
|
||||
│ 用途:参数优化和过拟合检测
|
||||
│
|
||||
└─ 测试集(15%):T_split2 → T_end
|
||||
用途:最终策略评估(只能使用一次!)
|
||||
|
||||
示例(2 年数据):
|
||||
训练集:2023-01 至 2024-04(16 个月)
|
||||
验证集:2024-04 至 2024-10(6 个月)
|
||||
测试集:2024-10 至 2025-03(5 个月)
|
||||
```
|
||||
|
||||
**重要原则**:测试集只能在策略完全确定后使用一次。如果在测试集上调整参数,则测试集实际上变成了验证集,需要重新收集新数据作为真正的测试集。
|
||||
|
||||
---
|
||||
|
||||
## 四、第四步:信号生成注意事项
|
||||
|
||||
### 前视偏差检查清单
|
||||
|
||||
```
|
||||
□ 所有指标计算是否只使用已收线的 K 线数据?
|
||||
□ EWO 转换信号是否在"已收线确认"后才触发?
|
||||
□ 入场价格是否使用下一根 K 线的开盘价?
|
||||
□ ATR 计算是否使用当根 K 线收盘后的数据?
|
||||
□ 大周期偏向是否使用已完成的 4h K 线?
|
||||
□ 止损价格是否在入场后才设置(不使用未来数据)?
|
||||
```
|
||||
|
||||
### tradehk 信号系统的正确回测时序
|
||||
|
||||
```
|
||||
时间 T(K 线收盘):
|
||||
→ 计算所有指标(使用 T 及之前的数据)
|
||||
→ 判断 EWO 是否发生转换
|
||||
→ 如果触发信号:记录信号,等待下一根 K 线
|
||||
|
||||
时间 T+1(下一根 K 线开盘):
|
||||
→ 以 T+1 开盘价执行入场
|
||||
→ 设置止损价格
|
||||
|
||||
时间 T+1 至平仓:
|
||||
→ 每根 K 线检查止损是否触发
|
||||
→ 每根 K 线检查是否有反向信号(平仓条件)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、第五步:参数优化流程
|
||||
|
||||
### 网格搜索(适合参数少的情况)
|
||||
|
||||
```
|
||||
定义参数搜索空间:
|
||||
EWO 幅度阈值:[5, 8, 10, 12, 15, 20]
|
||||
阶段持续时间阈值:[10, 15, 20, 25, 30]
|
||||
信号执行分数阈值:[4, 5, 6, 7]
|
||||
|
||||
对每个参数组合:
|
||||
→ 在验证集上运行回测
|
||||
→ 计算评估指标(夏普比率、卡尔玛比率)
|
||||
→ 记录结果
|
||||
|
||||
选择最优参数:
|
||||
→ 优先选择夏普比率 > 1.5 的参数组合
|
||||
→ 在多个优秀组合中选择参数最稳健的(参数稍变化结果不大变)
|
||||
```
|
||||
|
||||
### 过拟合检测
|
||||
|
||||
```
|
||||
计算样本内外性能比(IS/OOS Ratio):
|
||||
|
||||
IS_Sharpe = 训练集夏普比率
|
||||
OOS_Sharpe = 验证集夏普比率
|
||||
|
||||
IS/OOS Ratio = OOS_Sharpe ÷ IS_Sharpe
|
||||
|
||||
判断标准:
|
||||
> 0.7:良好,过拟合风险低
|
||||
0.5-0.7:一般,谨慎使用
|
||||
< 0.5:严重过拟合,需要简化策略
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、第七步:结果分析标准
|
||||
|
||||
### 通过标准(全部满足才考虑实盘)
|
||||
|
||||
| 指标 | 最低要求 | 优秀标准 |
|
||||
|------|---------|---------|
|
||||
| 年化收益率 | > 20% | > 50% |
|
||||
| 夏普比率 | > 1.0 | > 2.0 |
|
||||
| 最大回撤 | < 25% | < 15% |
|
||||
| 卡尔玛比率 | > 1.0 | > 2.5 |
|
||||
| 胜率 | > 45% | > 55% |
|
||||
| 盈亏比 | > 1.2 | > 2.0 |
|
||||
| 交易次数 | > 100 | > 300 |
|
||||
| IS/OOS 比率 | > 0.5 | > 0.7 |
|
||||
|
||||
### 压力测试
|
||||
|
||||
```
|
||||
在以下极端场景下重新运行回测:
|
||||
|
||||
场景一:2025 年 4 月关税战(BTC -30%,3 天内)
|
||||
→ 策略最大回撤是否可接受?
|
||||
|
||||
场景二:2025 年 10 月黑色星期六($190 亿清算)
|
||||
→ 策略是否触发连续亏损保护?
|
||||
|
||||
场景三:手续费提高 2 倍
|
||||
→ 策略是否仍然盈利?
|
||||
|
||||
场景四:滑点提高 3 倍
|
||||
→ 策略是否仍然盈利?
|
||||
|
||||
全部通过 → 可以考虑模拟盘验证
|
||||
任一失败 → 需要改进策略后重新回测
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、从回测到实盘的路径
|
||||
|
||||
```
|
||||
回测通过
|
||||
↓
|
||||
模拟盘(Paper Trading)验证:至少 1-3 个月
|
||||
├─ 使用真实市场数据
|
||||
├─ 不使用真实资金
|
||||
└─ 记录每笔信号和执行情况
|
||||
↓
|
||||
模拟盘结果评估:
|
||||
├─ 模拟盘夏普比率 ≥ 回测夏普比率 × 0.7?
|
||||
├─ 模拟盘最大回撤 ≤ 回测最大回撤 × 1.5?
|
||||
└─ 信号触发频率与回测接近?
|
||||
↓
|
||||
小资金实盘(账户 10% 资金):至少 1 个月
|
||||
↓
|
||||
全资金实盘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、相关文档
|
||||
|
||||
- [回测方法论与实践](../../07_回测框架/回测方法论与实践.md)
|
||||
- [回测名词解释](../名词解释/回测.md)
|
||||
- [夏普比率名词解释](../名词解释/夏普比率.md)
|
||||
- [最大回撤名词解释](../名词解释/最大回撤.md)
|
||||
- [tradehk 信号评分引擎](../tradehk/信号评分引擎.md)
|
||||
- [数据采集与处理流程](./数据采集与处理流程.md)
|
||||
在新工单中引用
屏蔽一个用户