2658 字
13 分钟

第一次策略回测

什么是回测?#

回测(Backtesting) 是使用历史数据模拟交易策略的过程,目的是评估策略在过去的表现。

回测的工作原理#

历史数据 → 策略逻辑 → 模拟交易 → 性能报告
↓ ↓ ↓ ↓
K线数据 买卖信号 开平仓记录 收益统计

举例说明

  • 假设今天是 2025-09-30
  • 我们用 2025-09-01 到 2025-09-30 的历史数据
  • 模拟如果在这 30 天里运行策略会发生什么
  • 统计盈亏、胜率、最大回撤等指标

回测 vs 实盘的区别#

维度回测实盘
数据历史数据(已知)实时数据(未知)
执行瞬间完成真实等待
滑点可能忽略真实存在
手续费估算真实扣除
心理无压力有情绪波动

⚠️重要提示:回测好不代表实盘好,但回测差一定实盘差!

为什么要回测?#

5个关键原因#

  1. 验证策略逻辑
    • 策略思路是否正确?
    • 买卖信号是否合理?
  2. 评估盈利能力
    • 能赚钱吗?赚多少?
    • 胜率如何?
  3. 评估风险水平
    • 最大回撤多少?
    • 能承受吗?
  4. 优化参数
    • 哪些参数效果更好?
    • 如何调整止损止盈?
  5. 建立信心
    • 策略经过验证才敢用真金白银

回测的局限性#

回测不能做的事

  • 不能预测未来(历史不会完全重演)
  • 不能消除所有风险
  • 不能替代实盘验证

回测能做的事

  • 快速筛选策略
  • 发现明显的问题
  • 提供优化方向

回测的基本流程#

graph LR A[准备数据] --> B[选择策略] B --> C[设置参数] C --> D[执行回测] D --> E[分析结果] E --> F{策略好吗?} F -->|Yes| G[进入实盘测试] F -->|No| H[优化或放弃] H --> C

回测命令#

Terminal window
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 │
└──────────┴────────┴──────────────┴─────────────────┴──────────────┴──────────────────┴────────────────────────┘

逐列解释

  1. Pair(交易对)
    • 每个交易对的单独表现
    • TOTAL 行是所有交易对的汇总
  2. Trades(交易次数)
    • 完成的交易笔数
    • ⚠️ 太少(<10):样本不足,不可靠
    • ✅ 适中(10-100):比较合理
    • ⚠️ 太多(>200):可能过度交易
  3. Avg Profit %(平均收益率)
    • 每笔交易的平均盈亏百分比
    • 示例:0.52% 表示平均每笔赚 0.52%
    • ✅ > 0.5%:不错
    • ⚠️ < 0.1%:扣除手续费后可能亏损
  4. Tot Profit USDT(总收益 USDT)
    • 该交易对的总盈亏(单位:USDT)
    • 示例:BTC/USDT 赚了 3.643 USDT
  5. Tot Profit %(总收益率)
    • 相对于初始资金的总收益率
    • 计算:总盈亏 / 初始资金
    • 示例:0.36% 表示 1000 USDT 赚了 3.6 USDT
  6. Avg Duration(平均持仓时间)
    • 每笔交易的平均持仓时长
    • 示例:3 days, 20:05:00 = 3天20小时5分钟
    • ⚠️ 太长:资金利用率低,隔夜风险
    • ⚠️ 太短:手续费占比高
  7. 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 │
└─────────────┴───────┴──────────────┴─────────────────┴──────────────┴───────────────────┴────────────────────────┘

退出原因解释

  1. roi(止盈)
    • 达到 ROI 目标自动止盈
    • 示例:48 笔通过 ROI 止盈,平均收益 +1.01%
    • ✅ 表现优秀:全部盈利
  2. exit_signal(信号卖出)
    • 策略产生卖出信号
    • 示例:没有出现在这个回测中
    • 📝 Strategy001 使用了 exit_profit_only = True,只在盈利时才响应卖出信号
  3. stop_loss(止损)
    • 触发止损
    • 示例:4 笔止损,平均亏损 -10.18%
    • ⚠️警告:止损占比高说明策略风险大
  4. 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:

✅ 优点#

  1. 胜率高:89.3%,非常稳定
  2. 回撤小:3.62%,风险可控
  3. 止盈效率高:85.7% 交易通过 ROI 止盈
  4. Sharpe > 1:风险调整后收益不错

❌ 缺点#

  1. 收益低:0.53%,跑输大盘(6.66%)
  2. 止损太大:-10% 止损导致单笔大亏
  3. 持仓时间长:平均 2 天,资金利用率低
  4. 样本较少:只有 56 笔交易

🎯 综合评价#

等级:⭐⭐⭐ / ⭐⭐⭐⭐⭐

适用场景

  • ✅ 保守型投资者
  • ✅ 震荡市场
  • ❌ 牛市(跑输大盘)
  • ❌ 追求高收益

建议

  1. 可以尝试 Dry-run 验证
  2. 需要优化止损策略
  3. 考虑降低持仓时间
  4. 在牛市中不推荐使用

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
第一次策略回测
https://blog.smyb.fun/posts/aitrade/05_第一次策略回测/
作者
三木羽冰
发布于
2026-01-05
许可协议
CC BY-NC-SA 4.0
最后更新于 2026-01-05,距今已过 44 天

部分内容可能已过时

Profile Image of the Author
三木羽冰
嵌言片语
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
21
分类
3
标签
6
总字数
24,212
运行时长
0
最后活动
0 天前

目录