diff --git a/wiki/流程图解/回测完整流程.md b/wiki/流程图解/回测完整流程.md new file mode 100644 index 0000000..d94a65b --- /dev/null +++ b/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) diff --git a/wiki/流程图解/风险管理完整流程.md b/wiki/流程图解/风险管理完整流程.md new file mode 100644 index 0000000..0e4d1e5 --- /dev/null +++ b/wiki/流程图解/风险管理完整流程.md @@ -0,0 +1,237 @@ +# 风险管理完整流程图解 + +> 返回:[流程图解目录](./README.md) | [Wiki 主索引](../README.md) +> 相关文档:[风险管理体系](../../08_风险管理/风险管理体系.md) | [仓位管理](../名词解释/仓位管理.md) | [清算](../名词解释/清算.md) | [Kelly公式](../名词解释/Kelly公式.md) + +--- + +## 一、风险管理总体框架 + +量化交易的风险管理分为四个层次,从宏观到微观依次管控: + +``` +┌─────────────────────────────────────────────────────────────┐ +│ 风险管理四层架构 │ +├─────────────────────────────────────────────────────────────┤ +│ 第一层:账户级风险 │ +│ ├─ 最大总仓位:账户资产的 50% │ +│ ├─ 最大单品种仓位:账户资产的 20% │ +│ └─ 最大同时持仓品种数:3 个 │ +├─────────────────────────────────────────────────────────────┤ +│ 第二层:单笔交易风险 │ +│ ├─ 单笔最大亏损:账户资产的 1-2% │ +│ ├─ 止损方式:ATR 动态止损 │ +│ └─ 止盈方式:ATR 动态止盈 或 信号反转平仓 │ +├─────────────────────────────────────────────────────────────┤ +│ 第三层:信号质量过滤 │ +│ ├─ 信号强度阈值(STRONG/MEDIUM/WEAK) │ +│ ├─ EWO 幅度阈值(品种专项) │ +│ └─ 大周期偏向过滤(不逆势操作) │ +├─────────────────────────────────────────────────────────────┤ +│ 第四层:市场环境过滤 │ +│ ├─ 宏观事件日历(FOMC、财报等) │ +│ ├─ 极端波动过滤(VIX > 40 时降低仓位) │ +│ └─ 流动性检查(非交易时段屏蔽信号) │ +└─────────────────────────────────────────────────────────────┘ +``` + +--- + +## 二、单笔交易风险控制流程 + +### 2.1 入场前风险评估 + +``` +收到信号通知 + │ + ▼ +【第一关】信号强度检查 + ├─ STRONG(≥6分)→ 继续 + ├─ MEDIUM(4-5分)→ 降低仓位 50%,继续 + └─ WEAK(≤3分)→ 拒绝入场,等待更强信号 + │ + ▼ +【第二关】大周期偏向检查 + ├─ 顺势(信号方向与大周期一致)→ 继续 + ├─ 中性 → 仓位降低 50%,继续 + └─ 逆势(信号方向与大周期相反)→ 拒绝入场 + │ + ▼ +【第三关】账户风险检查 + ├─ 当前总仓位 < 50%? + │ ├─ 是 → 继续 + │ └─ 否 → 拒绝入场(账户已满仓) + ├─ 该品种当前仓位 = 0? + │ ├─ 是 → 继续 + │ └─ 否 → 检查是否加仓(需更强信号) + └─ 同时持仓品种数 < 3? + ├─ 是 → 继续 + └─ 否 → 拒绝入场(品种数已满) + │ + ▼ +【第四关】市场环境检查 + ├─ 当前是否在宏观事件窗口期? + │ ├─ 是 → 拒绝入场或降低仓位 + │ └─ 否 → 继续 + └─ 是否在正常交易时段?(代币化美股专用) + ├─ 是 → 继续 + └─ 否 → 拒绝入场 + │ + ▼ +通过所有检查 → 计算仓位大小 → 执行入场 +``` + +### 2.2 仓位大小计算流程 + +``` +输入:账户总资产(A)、信号强度、当前 ATR(14) + +第一步:确定基础风险金额 + STRONG 信号:风险金额 = A × 2% + MEDIUM 信号:风险金额 = A × 1% + WEAK 信号:风险金额 = A × 0.5% + +第二步:计算止损距离 + 止损距离 = ATR(14) × 止损倍数 + 止损倍数:STRONG → 1.5,MEDIUM → 2.0,WEAK → 2.5 + +第三步:计算仓位大小 + 仓位大小(币数)= 风险金额 ÷ 止损距离 + +第四步:验证仓位上限 + 仓位金额 = 仓位大小 × 当前价格 + 如果仓位金额 > A × 20%: + → 仓位大小 = (A × 20%) ÷ 当前价格 + +第五步:应用杠杆 + 实际保证金 = 仓位金额 ÷ 杠杆倍数 + 确保实际保证金 ≤ A × 20% +``` + +--- + +## 三、止损管理流程 + +### 3.1 ATR 动态止损设置 + +``` +入场后立即设置止损: + +做多止损价格 = 入场价格 - ATR(14) × 止损倍数 +做空止损价格 = 入场价格 + ATR(14) × 止损倍数 + +止损倍数对照表: +┌──────────┬──────────┬──────────┬──────────┐ +│ 品种 │ STRONG │ MEDIUM │ WEAK │ +├──────────┼──────────┼──────────┼──────────┤ +│ BTC │ 1.5× │ 2.0× │ 2.5× │ +│ ETH │ 1.5× │ 2.0× │ 2.5× │ +│ SOL │ 2.0× │ 2.5× │ 3.0× │ +│ BNB │ 1.8× │ 2.2× │ 2.8× │ +│ DOGE │ 2.5× │ 3.0× │ 3.5× │ +│ XAUT │ 1.8× │ 2.2× │ 2.8× │ +└──────────┴──────────┴──────────┴──────────┘ +``` + +### 3.2 移动止损(Trailing Stop)流程 + +``` +持仓盈利达到 ATR × 1.5 后,启动移动止损: + +每根新 K 线收盘后: + 如果当前浮盈 > 历史最高浮盈: + → 更新最高浮盈记录 + → 新止损价格 = 当前最高价 - ATR(14) × 1.0(做多) + → 新止损价格 = 当前最低价 + ATR(14) × 1.0(做空) + + 如果价格触及移动止损: + → 执行平仓 + → 记录盈利 +``` + +--- + +## 四、账户级风险监控 + +### 4.1 每日风险检查清单 + +``` +每日开盘前执行: + +□ 账户总资产是否正常(无异常变动)? +□ 当前总仓位是否超过 50%? +□ 是否有持仓品种的大周期偏向已反转? +□ 今日是否有重大宏观事件(FOMC、财报等)? +□ 各持仓品种的止损是否仍然有效? +□ 过去 7 天的连续亏损次数是否超过 3 次? +``` + +### 4.2 连续亏损保护机制 + +``` +连续亏损计数器: + +每次止损触发:计数器 +1 +每次盈利平仓:计数器清零 + +连续亏损 3 次: + → 所有仓位降低 50% + → 信号执行阈值提高 1 分 + → 持续到连续盈利 2 次 + +连续亏损 5 次: + → 暂停交易 24 小时 + → 复盘分析亏损原因 + → 手动确认后才能恢复 + +连续亏损 7 次: + → 暂停交易 1 周 + → 全面回测检查策略是否失效 +``` + +### 4.3 最大回撤保护 + +``` +实时监控账户回撤: + +当前回撤 = (账户峰值 - 当前账户价值) ÷ 账户峰值 × 100% + +回撤 > 10%: + → 所有新信号仓位降低 50% + → 发送警报通知 + +回撤 > 15%: + → 暂停新开仓 + → 仅允许平仓操作 + → 发送紧急警报 + +回撤 > 20%: + → 全部平仓 + → 暂停交易,等待人工审核 +``` + +--- + +## 五、各品种风险参数速查表 + +| 品种 | 最大杠杆 | 最大单品种仓位 | 止损倍数(STRONG)| 特殊风险 | +|------|---------|-------------|----------------|---------| +| BTC | 5x | 20% | 1.5× ATR | 政策风险 | +| ETH | 5x | 20% | 1.5× ATR | 协议升级风险 | +| SOL | 3x | 15% | 2.0× ATR | 网络故障风险 | +| BNB | 3x | 15% | 1.8× ATR | 监管风险 | +| DOGE | 2x | 10% | 2.5× ATR | 推文风险 | +| XAUT | 3x | 20% | 1.8× ATR | 宏观事件风险 | +| xTSLA | 2x | 10% | 2.5× ATR | 财报+推文风险 | +| xAAPL | 3x | 15% | 2.0× ATR | 财报风险 | + +--- + +## 六、相关文档 + +- [风险管理体系](../../08_风险管理/风险管理体系.md) +- [仓位管理名词解释](../名词解释/仓位管理.md) +- [清算名词解释](../名词解释/清算.md) +- [Kelly公式名词解释](../名词解释/Kelly公式.md) +- [信号系统完整流程图](./信号系统完整流程图.md) +- [tradehk 大周期偏向判定](../tradehk/大周期偏向判定.md)