Machine Learning for Trading实战:用Kill-gate五道门槛评估贵州茅台策略
一、问题引入:机器学习交易策略回测,从理论到实践有多远?
Stefan Jansen 的《Machine Learning for Trading》是量化交易领域公认的经典教材——从数据获取、特征工程、模型训练到策略回测,覆盖了 ML 驱动交易策略的完整链路。书中的 Backtest Case Study 章节更是精华所在:它不仅教你跑回测,还引入了 Kill-gate 评估机制——设置最低绩效门槛,策略必须通过所有门槛才算合格。但问题在于,书中配套代码需要手动配置数据源、逐个运行回测、手动汇总图表。如果能把这本书的回测框架变成一条指令就能触发的 Skill——输入股票代码,自动输出 2-panel 图表 + Metrics 表 + Kill-gate 结果,实操门槛将大幅降低。
本文分 5 步展示:如何用自然语言让 EasyClaw 自动拉取《ML for Trading》配套代码、分析回测框架、转化为 Skill。
二、成果展示:ML Backtest Case Study 的完整输出
以下是 Skill 创建后执行一次回测的完整输出。所有分析逻辑基于 Stefan Jansen 书中的回测框架,由 EasyClaw Skill 自动执行。
2.1 输出文件结构
ml4t_backtest_output/
├── chart.png ← 2-panel 图表(累计收益 + 回撤曲线)
├── metrics.json ← 完整绩效指标表
└── kill_gate.json ← Kill-gate 评估结果
2.2 2-Panel 图表说明

| 面板 | 内容 | 展示元素 |
|---|---|---|
| 面板一:累计收益 | 策略累计收益 vs 基准累计收益的双线对比 | 策略净值曲线 + 基准净值曲线 + 超额收益阴影区域 |
| 面板二:回撤曲线 | 策略回撤随时间的演变 | 回撤深度曲线 + 最大回撤标注 + 回撤持续期标注 |
2.3 Metrics 指标表
| 指标类别 | 包含指标 | 说明 |
|---|---|---|
| 收益类 | 总收益率、年化收益率、超额收益(vs 基准) | 策略的绝对和相对盈利能力 |
| 风险类 | 年化波动率、最大回撤、VaR(95%) | 策略的风险暴露水平 |
| 风险调整 | 夏普比率、索提诺比率、卡玛比率、信息比率 | 单位风险换取的回报 |
| 交易类 | 总交易次数、胜率、盈亏比、平均持仓天数 | 交易行为特征 |
| [此处插入 metrics.json 关键指标截图或数据表] | ||
2.4 Kill-gate 评估
Kill-gate 是 Stefan Jansen 书中引入的核心概念——在策略上线前设置多个最低绩效门槛,任何一项不达标即"杀死"策略,避免不合格策略进入实盘。以下是 Skill 输出的 Kill-gate 评估结构:
| Gate | 门槛标准 | 说明 |
|---|---|---|
| Gate 1:收益 | 年化收益 > 0% | 策略必须盈利 |
| Gate 2:风险 | 最大回撤 < 30% | 回撤控制在可承受范围内 |
| Gate 3:风险调整 | 夏普比率 > 0 | 承担风险必须有正回报 |
| Gate 4:超额 | 信息比率 > 0.5 | 相对基准有稳定的超额能力 |
| Gate 5:稳定性 | 胜率 > 35% 或 盈亏比 > 1.5 | 盈利不依赖单次极端交易 |
三、Step 1:环境准备
从 EasyClaw 官网下载并安装最新版。本文所有操作均通过自然语言对话完成,不需要手动配置 Python 环境或安装 ML 依赖。
打开 EasyClaw → 左侧面板 →「Skill」→「Skill Creator」。如看不到该入口,在「设置 → 通用」中启用「开发者模式」后重启。
| 问题 | 解决方法 |
|---|---|
| Skill Creator 灰显 | 「设置 → 通用 → 启用开发者模式」,重启 EasyClaw |
| 网络连接失败 | 「设置 → 网络 → 检查代理设置」,确保能访问 GitHub |
四、Step 2:项目架构分析
在 Skill Creator 中输入:
从 GitHub 拉取《Machine Learning for Trading》(Stefan Jansen, 3rd Ed)的配套代码仓库(https://github.com/stefan-jansen/machine-learning-for-trading),先展示目录结构,重点标注 Backtest Case Study 章节对应的回测框架模块。
EasyClaw 自动扫描后输出关键模块:
machine-learning-for-trading/
├── 09_backtesting/
│ ├── backtest_engine.py ← ★ 回测引擎(策略执行+绩效计算)
│ ├── kill_gate.py ← ★ Kill-gate 评估(多门槛自动判定)
│ ├── metrics.py ← ★ 指标计算(收益/风险/风险调整/交易)
│ └── visualization.py ← ★ 图表渲染(累计收益+回撤2-panel)
├── data/ ← 数据源
└── requirements.txt
| 模块 | 职责 | Skill 中的角色 |
|---|---|---|
| backtest_engine.py | 事件驱动回测:逐日迭代、信号生成、订单执行、权益计算 | Skill 的核心执行引擎 |
| kill_gate.py | 多门槛策略评估:收益/风险/风险调整/超额/稳定性五道Gate | Skill 输出 kill_gate.json |
| metrics.py | 完整的绩效指标体系 | Skill 输出 metrics.json |
| visualization.py | 2-panel Matplotlib 图表:累计收益+回撤 | Skill 输出 chart.png |
这是 EasyClaw 自动识别出的结果,不需要你手动翻目录、读源码。
五、Step 3:核心参数配置与 Skill 创建
3.1 参数一览
| 参数名 | 所属模块 | 含义 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|---|---|
| symbol | 回测引擎 | 交易标的代码 | — | — | 必填 |
| start_date | 回测引擎 | 回测起始日期 | — | — | 至少覆盖2年以上 |
| end_date | 回测引擎 | 回测结束日期 | — | — | 格式 YYYY-MM-DD |
| initial_capital | 回测引擎 | 初始资金 | 100000 | 100000-1000000 | 根据实际资金设置 |
| model_type | ML 模型 | 机器学习模型类型 | random_forest | — | 可选:random_forest/xgboost/logistic/lstm |
| lookback_days | 特征工程 | 特征回溯天数 | 252 | 126-504 | 一年的交易日=252天 |
| kill_gate_mode | Kill-gate | 评估模式 | strict | strict/relaxed | strict=全部通过才算合格 |
3.2 用自然语言创建 Skill
在 Skill Creator 中粘贴以下内容。EasyClaw 自动完成代码拉取、架构分析、依赖安装和 Skill 封装。
从 GitHub 拉取《Machine Learning for Trading》(Stefan Jansen, 3rd Ed)配套代码仓库(https://github.com/stefan-jansen/machine-learning-for-trading),自动分析项目架构。
重点关注 09_backtesting/ 目录下的回测框架:
- backtest_engine.py:事件驱动回测引擎
- kill_gate.py:Kill-gate 多门槛评估(收益/风险/风险调整/超额/稳定性五道Gate)
- metrics.py:完整绩效指标计算
- visualization.py:2-panel 图表渲染(累计收益+回撤)
额外加入能力:
- 自动加载书中配套的数据源或从在线数据接口拉取
- 将 Kill-gate 最终判定结果以结构化 JSON 格式输出
- 在 chart.png 中标注策略名称、回测区间和核心指标
封装为 EasyClaw Skill:
- 名称:ML4T回测
- 输入:symbol、start_date、end_date、initial_capital(默认100000)、model_type(默认random_forest)、lookback_days(默认252)、kill_gate_mode(默认strict)
- 输出:chart.png(2-panel)+ metrics.json + kill_gate.json
点击「创建 Skill」,等待完成。
六、Step 4:运行回测与结果解读
4.1 启动回测
@ML4T回测 symbol=600519 start_date=2020-01-01 end_date=2024-12-31 model_type=xgboost
4.2 输出解读
| 文件 | 内容 | 用途 |
|---|---|---|
| chart.png | Panel 1:策略 vs 基准累计收益双线;Panel 2:回撤曲线+最大回撤标注 | 可视化评估策略表现,一图看清收益和风险 |
| metrics.json | 20+项绩效指标(收益/风险/风险调整/交易四维度) | 结构化数据供深度分析和对比 |
| kill_gate.json | 五道 Gate 的判定结果和最终通过/不通过判决 | 策略能否进入实盘的量化决策依据 |
4.3 Kill-gate 的价值
常规回测报告只告诉你"这个策略赚了多少、亏了多少"——然后你自己决定要不要用它。Kill-gate 的理念是:在情绪介入之前,先用客观标准过滤掉不合格的策略。五道 Gate 的设计覆盖了策略评估的核心维度:
- Gate 1(收益):策略必须盈利——最基础的生存门槛
- Gate 2(风险):回撤必须可控——再高的收益也扛不住腰斩
- Gate 3(风险调整):承担的风险必须有正回报——不能靠赌博赚钱
- Gate 4(超额):相对基准必须有稳定的超额——不能只是跟着大盘涨
- Gate 5(稳定性):盈利不能依赖单次极端交易——胜率或盈亏比必须有一项达标
4.4 效率对比
| 环节 | 手动运行书中代码 | EasyClaw Skill |
|---|---|---|
| 环境搭建 | Python + scikit-learn/xgboost/pandas/matplotlib,约30-60分钟 | 0 分钟(EasyClaw 内置环境) |
| 数据准备 | 手动拉取/配置数据源,约15分钟 | Skill 自动拉取,0 分钟 |
| 回测执行 | 运行 backtest_engine + 等待 ML 模型训练,约5-15分钟 | Skill 自动,— |
| 图表+指标+Gate | 手动调用三个模块逐一输出,约10分钟 | 一键输出三个文件,0 分钟 |
| 总计 | 约1-1.5小时 | — |
[注:本文方式的具体耗时取决于网络环境和硬件配置,实际测试后填写]
七、Step 5:进阶用法与常见问题
5.1 切换 ML 模型
@ML4T回测 symbol=600519 model_type=random_forest ← 随机森林
@ML4T回测 symbol=600519 model_type=xgboost ← XGBoost
@ML4T回测 symbol=600519 model_type=lstm lookback_days=504 ← LSTM+更长回溯
5.2 调整 Kill-gate 严格度
@ML4T回测 symbol=600519 kill_gate_mode=relaxed ← 允许1个Gate不通过即可合格
5.3 多模型横向对比
@ML4T回测 symbol=600519 compare_models=random_forest,xgboost,lstm
三种模型在同一标的上依次回测,输出横向对比的 Metrics 和 Kill-gate 汇总表。
5.4 常见问题排查
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
| 模型训练超时 | lookback_days 设置过大导致特征维度爆炸 | 减小 lookback_days 至252或126,或减少特征数量 |
| Kill-gate 全部不通过 | 策略本身在回测期表现差,或模型选择不当 | 切换 model_type 重试,或更换回测区间验证 |
| chart.png 未标注策略名称 | 未传入 symbol 参数 | 确认 symbol 参数已正确设置 |
八、总结
Stefan Jansen 的《Machine Learning for Trading》提供了 ML 驱动交易策略的完整方法论——从数据处理到模型训练再到 Kill-gate 评估。这套框架的理论价值很高,但手动运行的门槛也不低。本文通过 EasyClaw Skill 将书中的回测框架封装为一条指令——2-panel 图表 + Metrics 指标表 + Kill-gate 评估一次输出。Kill-gate 的核心价值在于把"这个策略能不能用"的主观判断变成可量化的客观标准——五道 Gate 逐一判定,不通过就下一个。
下一步可以尝试:
- 自定义 Gate 阈值:根据你的风险偏好调整 Kill-gate 的门槛值(如把回撤上限从30%调到20%)
- 特征工程扩展:基于书中的特征工程框架加入你自己的因子,看是否提升策略表现
- 多标的批量 Gate 筛选:在10只候选标的上逐一运行,只保留 Kill-gate 全部通过的策略
资源链接:
- EasyClaw 下载:https://easyclaw.cn/?f=704
- 《ML for Trading》GitHub:https://github.com/stefan-jansen/machine-learning-for-trading
你看过 Stefan Jansen 这本书吗?你觉得 Kill-gate 的理念在实际交易中实用吗——还是太机械?欢迎在评论区分享你对 ML 交易策略评估的看法和经验。如果你用书中的框架跑过自己的策略,也欢迎交流心得。

浙公网安备 33010602011771号