Freqtrade实战:Enter/Exit Tag交叉统计分析贵州茅台四年35笔交易
一、问题引入:35笔交易、胜率31%、还能赚钱?
Freqtrade 是 GitHub 上 Star 数最多的开源加密货币交易机器人框架,但它本质上是一个策略无关、资产无关的事件驱动回测引擎——用在A股回测上同样顺手。Freqtrade 的特色在于其极端详尽的回测报告:不仅告诉你赚了多少,还把每笔交易的入场标签(Enter Tag)、出场原因(Exit Reason)交叉统计,让你精确知道策略的每一分钱是怎么赚的、怎么亏的。
这次用 EMA5/13 短线交叉策略在贵州茅台上回测了整整四年(2020-2023),35笔交易、胜率仅31.4%——但最终盈利9.47%,最大回撤仅5.24%。本文完整展示 Freqtrade 对贵州茅台的真实回测输出。
二、成果展示:Freqtrade 四年回测的完整输出


2.1 BACKTESTING REPORT(回测总览)
| 指标 | 值 |
|---|---|
| 交易对 | 600519.SS(贵州茅台) |
| 回测区间 | 2020-01-02 → 2023-12-29(4年) |
| 策略 | EMA5/13 短线交叉 |
| 总交易次数 | 35 |
| 胜率 | 31.4%(11胜 / 24负) |
| 平均持仓时间 | 22天 |
| 总收益率 | +9.47% |
| 总盈利金额 | ¥94,701 |
2.2 SUMMARY METRICS(绩效摘要)
| 类别 | 指标 | 值 |
|---|---|---|
| 收益 | 初始资金 | ¥1,000,000 |
| 最终余额 | ¥1,094,701 | |
| 年化 | CAGR | 2.33% |
| 风险调整 | Sharpe | 0.80 |
| Sortino | 0.81 | |
| 回撤 | Max Drawdown | 仅 5.24% |
| Underwater 金额 | ¥52,446 | |
| 盈利质量 | Profit Factor | 1.80 |
| 极端交易 | 最佳单笔 | +12.02% |
| 最差单笔 | -3.06% | |
| 市场环境 | 同期茅台涨幅 | +64.00% |
这组数据最值得关注的地方:35笔交易、胜率31.4%、最大回撤仅5.24%。对比之前双均线10/30策略的7笔交易、胜率43%、回撤15%——短线参数(EMA5/13)用胜率换回了撤控制。交易频率从7笔跃升到35笔,但单笔风险更小、止损更快。
2.3 EXIT REASON STATS(出场原因统计——Freqtrade 特色)
Freqtrade 最独特的功能之一:按出场原因统计交易表现:
| 出场原因 | 次数 | 平均收益 | 总盈利 | 胜率 |
|---|---|---|---|---|
| exit_signal(策略信号) | 34 | +1.73% | ¥96,433 | 32.4% |
| force_exit(强制平仓) | 1 | -0.03% | -¥47 | 0% |
34笔由策略信号正常出场、仅1笔因回测结束被强制平仓(亏损¥47,几乎可以忽略)。策略的执行完整性接近100%——没有中途止损、没有异常中断。
2.4 ENTER TAG + EXIT REASON 交叉统计
Freqtrade 支持将入场标签和出场原因交叉分析:
| 入场标签 | 出场原因 | 次数 | 平均收益 | 总盈利 |
|---|---|---|---|---|
| ema5_13_cross | exit_signal | 34 | +1.73% | ¥96,433 |
| ema5_13_cross | force_exit | 1 | -0.03% | -¥47 |
所有35笔交易来自同一个入场信号(EMA5/13交叉),34笔由策略正常退出,1笔被强制平仓——策略逻辑干净、执行路径清晰、无意外干扰。
2.5 LEFT OPEN TRADES(未平仓交易)
| 标的 | 持仓天数 | 浮动盈亏 | 状态 |
|---|---|---|---|
| 600519.SS | 1天 | -¥47(-0.00%) | 回测结束时未平仓 |
2.6 输出文件
freqtrade_output/
├── freqtrade_summary.json ← 完整回测摘要
├── freqtrade_trades.csv ← 35笔交易明细
├── freqtrade_equity_curve.csv ← 逐日权益数据
├── ️ freqtrade_equity_curve.png ← 权益曲线图
└── freqtrade_full_report.py ← 回测脚本(可复现)
[此处插入 freqtrade_equity_curve.png 截图]
三、Step 1:环境准备
从 EasyClaw 官网下载并安装最新版。本文所有操作均通过自然语言对话完成。
打开 EasyClaw → 左侧面板 →「Skill」→「Skill Creator」。如看不到该入口,在「设置 → 通用」中启用「开发者模式」后重启。
| 问题 | 解决方法 |
|---|---|
| Skill Creator 灰显 | 启用开发者模式后重启 |
| 网络连接失败 | 检查代理设置,确保能访问GitHub |
四、Step 2:项目架构
从 GitHub 拉取 Freqtrade 项目(https://github.com/freqtrade/freqtrade),展示目录结构,标注回测引擎、策略框架和报告模块。
freqtrade/
├── freqtrade/
│ ├── data/ ← 数据源
│ ├── strategy/ ← ★ 策略基类(populate_indicators + populate_entry/exit_signals)
│ ├── optimize/ ← ★ 回测引擎(backtesting + hyperopt参数优化)
│ └── persistence/ ← 交易持久化(SQLite)
└── user_data/
└── strategies/ ← 用户策略目录
| 模块 | 职责 |
|---|---|
| strategy/ | 策略基类,通过 populate_entry/exit_signals 定义入场出场逻辑 |
| optimize/ | 回测引擎+超参优化,输出Backtesting Report+Enter/Exit Tag统计 |
| persistence/ | 交易记录持久化,支持LEFT OPEN TRADES查询 |
五、Step 3:参数与 Skill 创建
3.1 参数一览
| 参数 | 含义 | 默认值 | 说明 |
|---|---|---|---|
| symbol | 交易标的 | — | 必填 |
| start_date | 起始日期 | — | 至少覆盖1年以上 |
| end_date | 结束日期 | — | 格式 YYYY-MM-DD |
| initial_capital | 初始资金 | 1000000 | — |
| ema_short | 短周期EMA | 5 | 越小越敏感 |
| ema_long | 长周期EMA | 13 | 配合短周期使用 |
| max_open_trades | 最大同时持仓数 | 5 | 控制风险暴露 |
3.2 用自然语言创建 Skill
从 GitHub 拉取 Freqtrade 项目(https://github.com/freqtrade/freqtrade),自动分析项目架构。
重点关注:
- strategy/:策略基类,populate_indicators计算EMA指标,populate_entry/exit_signals定义进出场逻辑
- optimize/:回测引擎,输出Backtesting Report+Enter Tag Stats+Exit Reason Stats+Mixed Tag Stats
- persistence/:交易记录持久化,输出LEFT OPEN TRADES
额外加入能力:
- 回测报告包含Enter Tag和Exit Reason的交叉统计
- 输出LEFT OPEN TRADES(回测结束时未平仓的交易)
- Summary Metrics中包含Max % of account underwater
封装为 EasyClaw Skill:
- 名称:Freqtrade回测
- 输入:symbol、start_date、end_date、initial_capital(默认1000000)、ema_short(默认5)、ema_long(默认13)、max_open_trades(默认5)
- 输出:freqtrade_summary.json + freqtrade_trades.csv + freqtrade_equity_curve.csv + freqtrade_equity_curve.png + 回测脚本
六、Step 4:运行与结果
4.1 启动
@Freqtrade回测 symbol=600519 start_date=2020-01-01 end_date=2023-12-31
4.2 效率对比
| 环节 | 手动操作 | EasyClaw Skill |
|---|---|---|
| 环境+策略配置 | 约60分钟 | 0 分钟 |
| 回测+报告 | 约20分钟 | 一键输出 |
| 总计 | 约1.5小时 | — |
[注:具体耗时实际测试后填写]
七、Step 5:进阶与常见问题
5.1 调整EMA参数
@Freqtrade回测 symbol=600519 ema_short=10 ema_long=30 ← 切换为中长线参数
5.2 常见问题
| 错误 | 原因 | 解决方法 |
|---|---|---|
| LEFT OPEN TRADES 数量多 | 回测结束时有多笔未平仓 | 延长回测区间使信号完整闭合,或在下一次回测中检查平仓条件 |
| force_exit 占比高 | 回测区间太短导致强制平仓 | 延长 end_date 确保交易有足够时间走完 |
八、总结
Freqtrade 的回测报告在交易过程的可解释性上做到了极致。Enter Tag告诉你"为什么会入场"、Exit Reason告诉你"为什么会出场"、LEFT OPEN TRADES告诉你"还有哪些没走完"、MIXED TAG STATS把入场和出场交叉在一起让你看清策略的每一分钱是怎么流动的。四年35笔交易、胜率31.4%、回撤5.24%——用短线EMA参数换取了更低的风险暴露。同期茅台涨幅+64%,策略只赚了9.47%,但最大回撤仅5.24%——如果你更看重"睡得着觉"而不是"赚得最多",这套参数值得参考。
下一步可以尝试:
- Hyperopt 参数优化:Freqtrade 内置的超参优化可以自动搜索最优EMA参数组合
- 多策略对比:同时回测EMA5/13、EMA10/30、EMA20/60,用Enter/Exit Tag对比三种参数的行为差异
资源链接:
- EasyClaw 下载:https://easyclaw.cn/?f=711
- Freqtrade GitHub:https://github.com/freqtrade/freqtrade
你能接受31%胜率但回撤只有5%的策略吗?还是宁愿要50%胜率但回撤可能超过20%?欢迎分享你的风险偏好。

浙公网安备 33010602011771号