2658 字
13 分钟
第一次策略回测
什么是回测?
回测(Backtesting) 是使用历史数据模拟交易策略的过程,目的是评估策略在过去的表现。
回测的工作原理
历史数据 → 策略逻辑 → 模拟交易 → 性能报告 ↓ ↓ ↓ ↓ K线数据 买卖信号 开平仓记录 收益统计举例说明:
- 假设今天是 2025-09-30
- 我们用 2025-09-01 到 2025-09-30 的历史数据
- 模拟如果在这 30 天里运行策略会发生什么
- 统计盈亏、胜率、最大回撤等指标
回测 vs 实盘的区别
| 维度 | 回测 | 实盘 |
|---|---|---|
| 数据 | 历史数据(已知) | 实时数据(未知) |
| 执行 | 瞬间完成 | 真实等待 |
| 滑点 | 可能忽略 | 真实存在 |
| 手续费 | 估算 | 真实扣除 |
| 心理 | 无压力 | 有情绪波动 |
⚠️重要提示:回测好不代表实盘好,但回测差一定实盘差!
为什么要回测?
5个关键原因
- 验证策略逻辑
- 策略思路是否正确?
- 买卖信号是否合理?
- 评估盈利能力
- 能赚钱吗?赚多少?
- 胜率如何?
- 评估风险水平
- 最大回撤多少?
- 能承受吗?
- 优化参数
- 哪些参数效果更好?
- 如何调整止损止盈?
- 建立信心
- 策略经过验证才敢用真金白银
回测的局限性
❌ 回测不能做的事:
- 不能预测未来(历史不会完全重演)
- 不能消除所有风险
- 不能替代实盘验证
✅ 回测能做的事:
- 快速筛选策略
- 发现明显的问题
- 提供优化方向
回测的基本流程
graph LR
A[准备数据] --> B[选择策略]
B --> C[设置参数]
C --> D[执行回测]
D --> E[分析结果]
E --> F{策略好吗?}
F -->|Yes| G[进入实盘测试]
F -->|No| H[优化或放弃]
H --> C
回测命令
freqtrade backtesting -c config.json --strategy Strategy001回测报告完整解读
BACKTESTING REPORT(核心报告)
BACKTESTING REPORT┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩│ BTC/USDT │ 7 │ 0.52 │ 3.643 │ 0.36 │ 3 days, 20:05:00 │ 6 0 1 85.7 ││ ETH/USDT │ 6 │ -0.98 │ -5.897 │ -0.59 │ 4 days, 5:28:00 │ 5 0 1 83.3 ││ BNB/USDT │ 10 │ 0.92 │ 9.137 │ 0.91 │ 2 days, 7:17:00 │ 10 0 0 100 ││ SOL/USDT │ 17 │ -0.29 │ -4.912 │ -0.49 │ 1 day, 3:23:00 │ 15 0 2 88.2 ││ XRP/USDT │ 16 │ 0.21 │ 3.366 │ 0.34 │ 1 day, 9:40:00 │ 14 0 2 87.5 ││ TOTAL │ 56 │ 0.1 │ 5.338 │ 0.53 │ 2 days, 2:11:00 │ 50 0 6 89.3 │└──────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘逐列解释:
- Pair(交易对)
- 每个交易对的单独表现
- TOTAL 行是所有交易对的汇总
- Trades(交易次数)
- 完成的交易笔数
- ⚠️ 太少(<10):样本不足,不可靠
- ✅ 适中(10-100):比较合理
- ⚠️ 太多(>200):可能过度交易
- Avg Profit %(平均收益率)
- 每笔交易的平均盈亏百分比
- 示例:0.52% 表示平均每笔赚 0.52%
- ✅ > 0.5%:不错
- ⚠️ < 0.1%:扣除手续费后可能亏损
- Tot Profit USDT(总收益 USDT)
- 该交易对的总盈亏(单位:USDT)
- 示例:BTC/USDT 赚了 3.643 USDT
- Tot Profit %(总收益率)
- 相对于初始资金的总收益率
- 计算:总盈亏 / 初始资金
- 示例:0.36% 表示 1000 USDT 赚了 3.6 USDT
- Avg Duration(平均持仓时间)
- 每笔交易的平均持仓时长
- 示例:3 days, 20:05:00 = 3天20小时5分钟
- ⚠️ 太长:资金利用率低,隔夜风险
- ⚠️ 太短:手续费占比高
- Win Draw Loss Win%(胜负统计)
- Win:盈利交易数
- Draw:持平交易数
- Loss:亏损交易数
- Win%:胜率 = Win / (Win + Loss)
- 示例:6 胜 0 平 1 负,胜率 85.7%
关键观察点:
- ✅ BNB/USDT 表现最好:10 笔全胜,总收益 +0.91%
- ❌ ETH/USDT 表现最差:总收益 -0.59%
- ✅ 整体表现:56 笔交易,50 胜 6 负,胜率 89.3%,总收益 +0.53%
LEFT OPEN TRADES REPORT(未平仓报告)
LEFT OPEN TRADES REPORT┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓┃ Pair ┃ Trades ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩│ ETH/USDT │ 1 │ 0.28 │ 0.277 │ 0.03 │ 7 days, 10:40:00 │ 1 0 0 100 ││ BNB/USDT │ 1 │ 0.17 │ 0.167 │ 0.02 │ 7 days, 10:30:00 │ 1 0 0 100 ││ XRP/USDT │ 1 │ -0.76 │ -0.762 │ -0.08 │ 4:10:00 │ 0 0 1 0 ││ BTC/USDT │ 1 │ -2.33 │ -2.313 │ -0.23 │ 12 days, 21:25:00 │ 0 0 1 0 ││ TOTAL │ 4 │ -0.66 │ -2.631 │ -0.26 │ 6 days, 23:41:00 │ 2 0 2 50.0 │└──────────┴────────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘含义:
- 回测结束时仍未平仓的交易
- 这些交易没有被计入上面的总收益
- ⚠️注意:未平仓交易可能是亏损的(如 BTC/USDT -2.33%)
为什么会有未平仓交易?
- 策略还在等待卖出信号
- 回测时间到了但交易还没完成
- 实盘时这些交易还会继续
如何评估?
- 未平仓数量少(<5):正常
- 未平仓整体亏损:需要关注,可能是策略卖出条件太严格
ENTER TAG STATS(入场标签统计)
ENTER TAG STATS┏━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓┃ Enter Tag ┃ Entries ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃┡━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩│ OTHER │ 56 │ 0.1 │ 5.338 │ 0.53 │ 2 days, 2:11:00 │ 50 0 6 89.3 ││ TOTAL │ 56 │ 0.1 │ 5.338 │ 0.53 │ 2 days, 2:11:00 │ 50 0 6 89.3 │└───────────┴─────────┴──────────────┴─────────────────┴──────────────┴─────────────────┴────────────────────────┘含义:
- 按入场原因分类的统计
- Strategy001 所有买入都标记为 “OTHER”(默认标签)
- 高级策略可以设置多个入场标签,这里可以看出哪种入场方式更好
示例(高级策略):
Enter Tag | Entries | Avg Profit %-------------+---------+--------------breakout | 20 | 1.2% ← 突破入场表现好oversold | 15 | -0.5% ← 超卖入场表现差EXIT REASON STATS(退出原因统计)
EXIT REASON STATS┏━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓┃ Exit Reason ┃ Exits ┃ Avg Profit % ┃ Tot Profit USDT ┃ Tot Profit % ┃ Avg Duration ┃ Win Draw Loss Win% ┃┡━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩│ roi │ 48 │ 1.01 │ 48.639 │ 4.86 │ 1 day, 10:01:00 │ 48 0 0 100 ││ force_exit │ 4 │ -0.66 │ -2.631 │ -0.26 │ 6 days, 23:41:00 │ 2 0 2 50.0 ││ stop_loss │ 4 │ -10.18 │ -40.670 │ -4.07 │ 5 days, 6:40:00 │ 0 0 4 0 ││ TOTAL │ 56 │ 0.1 │ 5.338 │ 0.53 │ 2 days, 2:11:00 │ 50 0 6 89.3 │└─────────────┴───────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘退出原因解释:
- roi(止盈)
- 达到 ROI 目标自动止盈
- 示例:48 笔通过 ROI 止盈,平均收益 +1.01%
- ✅ 表现优秀:全部盈利
- exit_signal(信号卖出)
- 策略产生卖出信号
- 示例:没有出现在这个回测中
- 📝 Strategy001 使用了
exit_profit_only = True,只在盈利时才响应卖出信号
- stop_loss(止损)
- 触发止损
- 示例:4 笔止损,平均亏损 -10.18%
- ⚠️警告:止损占比高说明策略风险大
- force_exit(强制平仓)
- 回测结束时未平仓的交易被强制平仓
- 示例:4 笔,平均 -0.66%
- 📝 这些就是上面”未平仓报告”中的交易
关键观察:
- ✅ 大部分交易(48/56 = 85.7%)通过 ROI 止盈
- ⚠️ 4 笔止损造成 -40.670 USDT 的亏损
- 📊 如果没有止损,总收益会是 +46 USDT(5.338 + 40.670)
SUMMARY METRICS(汇总指标)
SUMMARY METRICS┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃ Metric ┃ Value ┃┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩│ Backtesting from │ 2025-09-01 00:00:00 ││ Backtesting to │ 2025-09-30 00:00:00 ││ Trading Mode │ Spot ││ Max open trades │ 5 ││ │ ││ Total/Daily Avg Trades │ 56 / 1.93 ││ Starting balance │ 1000 USDT ││ Final balance │ 1005.338 USDT ││ Absolute profit │ 5.338 USDT ││ Total profit % │ 0.53% ││ CAGR % │ 6.93% ││ Sortino │ 0.86 ││ Sharpe │ 1.22 ││ Calmar │ 9.71 ││ SQN │ 0.24 ││ Profit factor │ 1.12 ││ Expectancy (Ratio) │ 0.10 (0.01) ││ Avg. daily profit │ 0.184 USDT ││ Avg. stake amount │ 99.739 USDT ││ Total trade volume │ 11198.536 USDT ││ │ ││ Best Pair │ BNB/USDT 0.91% ││ Worst Pair │ ETH/USDT -0.59% ││ Best trade │ SOL/USDT 1.45% ││ Worst trade │ SOL/USDT -10.18% ││ Best day │ 7.981 USDT ││ Worst day │ -29.492 USDT ││ Days win/draw/lose │ 19 / 8 / 3 ││ Min/Max/Avg. Duration Winners │ 0d 01:00 / 8d 02:35 / 1d 15:48 ││ Min/Max/Avg. Duration Losers │ 0d 04:10 / 12d 21:25 / 5d 16:42 ││ Max Consecutive Wins / Loss │ 40 / 3 ││ Rejected Entry signals │ 0 ││ Entry/Exit Timeouts │ 0 / 0 ││ │ ││ Min balance │ 1000.996 USDT ││ Max balance │ 1040.2 USDT ││ Max % of account underwater │ 3.62% ││ Absolute drawdown │ 37.676 USDT (3.62%) ││ Drawdown duration │ 4 days 07:15:00 ││ Profit at drawdown start │ 40.2 USDT ││ Profit at drawdown end │ 2.524 USDT ││ Drawdown start │ 2025-09-21 03:50:00 ││ Drawdown end │ 2025-09-25 11:05:00 ││ Market change │ 6.66% │└───────────────────────────────┴─────────────────────────────────┘核心指标详解:
📈 收益指标
- Total profit %:总收益率 0.53%
- 1000 USDT → 1005.338 USDT
- CAGR %:年化收益率 6.93%
- 如果这个收益率持续一年,年化收益 6.93%
- ⚠️ 注意:这只是 1 个月的数据年化,不代表真实年化
- Avg. daily profit:日均收益 0.184 USDT
- 每天平均赚 0.184 USDT
📊 风险指标
- Max % of account underwater(最大回撤):3.62%
- 从最高点到最低点的最大跌幅
- 示例:账户最高 1040.2 USDT,最低跌到 1002.524 USDT
- 计算:(1040.2 - 1002.524) / 1040.2 = 3.62%
- ✅ < 10%:风险可控
- ⚠️ 10-20%:中等风险
- ❌ > 20%:高风险
- Sharpe Ratio(夏普比率):1.22
- 风险调整后的收益指标
- ✅ > 1.0:不错
- ✅ > 2.0:优秀
- ❌ < 0:亏损
- Sortino Ratio:0.86
- 类似 Sharpe,但只考虑下行风险
- ✅ > 1.0:不错
📉 胜负统计
- Win rate(胜率):89.3%(50 胜 / 56 笔)
- ✅ > 60%:不错
- ⚠️ < 50%:需要提高盈亏比
- Profit factor(盈利因子):1.12
- 总盈利 / 总亏损
- 计算:(48.639 + …其他盈利) / (40.670 + …其他亏损)
- ✅ > 1.5:优秀
- ✅ > 1.0:盈利
- ❌ < 1.0:亏损
- Max Consecutive Wins / Loss:40 连胜 / 3 连败
- 最长连胜和连败次数
- ⚠️ 连败太长会影响心态
🔍 其他关键指标
- Best trade / Worst trade:+1.45% / -10.18%
- 最好和最差的单笔交易
- 风险警告:最差交易 -10.18% = 策略的 stoploss
- Days win/draw/lose:19 盈利天 / 8 持平 / 3 亏损天
- 按天统计的盈亏
- 📊 30 天中有 19 天是盈利的
- Market change:6.66%
- 同期市场涨幅
- 对比:策略赚 0.53%,市场涨 6.66%
- ⚠️跑输大盘!简单持有 BTC 可能更好
如何判断策略好坏?
根据这份回测报告,我们来评估 Strategy001:
✅ 优点
- 胜率高:89.3%,非常稳定
- 回撤小:3.62%,风险可控
- 止盈效率高:85.7% 交易通过 ROI 止盈
- Sharpe > 1:风险调整后收益不错
❌ 缺点
- 收益低:0.53%,跑输大盘(6.66%)
- 止损太大:-10% 止损导致单笔大亏
- 持仓时间长:平均 2 天,资金利用率低
- 样本较少:只有 56 笔交易
🎯 综合评价
等级:⭐⭐⭐ / ⭐⭐⭐⭐⭐
适用场景:
- ✅ 保守型投资者
- ✅ 震荡市场
- ❌ 牛市(跑输大盘)
- ❌ 追求高收益
建议:
- 可以尝试 Dry-run 验证
- 需要优化止损策略
- 考虑降低持仓时间
- 在牛市中不推荐使用
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
最后更新于 2026-01-05,距今已过 44 天
部分内容可能已过时