1563 字
8 分钟

策略批量对比

批量回测命令#

基础批量回测#

Terminal window
# 一次性回测多个策略
freqtrade backtesting \
-c config.json \
--strategy-list Strategy001 Strategy002 Strategy003 \
--timerange 20250701-20250930 \
--timeframe 15m

输出特点

  • 每个策略依次执行
  • 最后显示汇总对比表
  • 自动按关键指标排序

批量回测的汇总报告#

Freqtrade 会在所有策略回测完成后显示汇总对比表:

STRATEGY SUMMARY
┏━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Strategy ┃ Trades ┃ Avg Profit ┃ Tot Profit % ┃ Win Rate % ┃ Max Drawdown ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ MomentumTrendStrategy │ 68 │ 1.52 │ 23.45 │ 89.7 │ 3.21 │
│ Strategy003 │ 42 │ 1.31 │ 18.72 │ 85.7 │ 4.15 │
│ Strategy001 │ 127 │ 0.85 │ 15.33 │ 72.4 │ 6.82 │
│ MeanReversionStrategy │ 89 │ 0.62 │ 11.28 │ 78.6 │ 5.43 │
│ Strategy002 │ 35 │ 0.43 │ 8.95 │ 68.6 │ 7.21 │
└─────────────────────────┴────────┴────────────┴──────────────┴────────────┴──────────────┘

关键信息

  • 默认排序:按总收益从高到低
  • 快速识别:一眼看出最佳策略
  • 多维对比:同时展示多个关键指标

策略对比表格解读#

如何快速识别最佳策略#

1. 收益优先型(Profit-First)#

关注指标

  • 总收益 % > 15%
  • 平均收益 % > 0.8%

案例

MomentumTrendStrategy: 总收益 23.45%,平均 1.52% ✅

适合人群

  • 激进型投资者
  • 追求高收益
  • 可承受较大回撤

2. 风险优先型(Risk-First)#

关注指标

  • 最大回撤 < 5%
  • Sharpe Ratio > 2.5
  • 胜率 > 80%

案例

Strategy003: 回撤 4.15%,胜率 85.7% ✅

适合人群

  • 保守型投资者
  • 注重资金安全
  • 无法承受大回撤

3. 平衡型(Balanced)#

关注指标

  • 总收益 > 12%
  • 最大回撤 < 7%
  • 胜率 > 75%
  • Sharpe Ratio > 2.0

案例

Strategy003: 收益 18.72%,回撤 4.15%,胜率 85.7% ✅✅✅

适合人群

  • 大多数量化交易者
  • 追求稳健收益
  • 长期持续盈利

多维度评分体系#

评分公式(100 分制)#

# 权重分配
收益权重 = 0.30 # 30%
风险权重 = 0.25 # 25%
胜率权重 = 0.20 # 20%
Sharpe权重 = 0.15 # 15%
交易频率权重 = 0.10 # 10%
总分 = (
(总收益% / 30 × 100) × 0.30 +
((10 - 最大回撤%) / 10 × 100) × 0.25 +
(胜率%) × 0.20 +
(min(Sharpe, 5) / 5 × 100) × 0.15 +
(交易频率得分) × 0.10
)

交易频率得分标准#

交易次数(30天)得分说明
< 1060太少,样本不足
10-3085理想,低频高质
30-80100完美,适中频率
80-15080可接受,略高频
> 15050过度交易

实际评分案例#

MomentumTrendStrategy

收益分:(23.45 / 30 × 100) × 0.30 = 23.45
风险分:((10 - 3.21) / 10 × 100) × 0.25 = 16.98
胜率分:89.7 × 0.20 = 17.94
Sharpe分:(3.5 / 5 × 100) × 0.15 = 10.50
频率分:(85 / 100) × 0.10 = 8.50
总分 = 77.37 ⭐⭐⭐⭐

Strategy001

收益分:(15.33 / 30 × 100) × 0.30 = 15.33
风险分:((10 - 6.82) / 10 × 100) × 0.25 = 7.95
胜率分:72.4 × 0.20 = 14.48
Sharpe分:(2.1 / 5 × 100) × 0.15 = 6.30
频率分:(80 / 100) × 0.10 = 8.00
总分 = 52.06 ⭐⭐⭐

策略选择决策树#

决策流程图#

开始选择策略
├─ 第一步:排除不合格策略
│ ├─ 总收益 < 5% → ❌ 淘汰
│ ├─ 最大回撤 > 15% → ❌ 淘汰
│ ├─ 胜率 < 50% → ❌ 淘汰
│ └─ Sharpe < 1.0 → ❌ 淘汰
├─ 第二步:根据目标分类
│ ├─ 追求高收益 → 按总收益排序
│ ├─ 追求低风险 → 按最大回撤排序
│ └─ 追求平衡 → 按综合评分排序
├─ 第三步:验证样本量
│ ├─ 交易次数 < 10 → ⚠️ 样本不足,需更长测试
│ ├─ 交易次数 10-50 → ✅ 合格
│ └─ 交易次数 > 150 → ⚠️ 过度交易,检查手续费
└─ 第四步:最终确认
├─ 检查退出原因分布
├─ 检查持仓时间分布
├─ 进行样本外测试
└─ 选定策略 ✅

Python 自动化选择脚本#

创建 strategy_selector.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
策略自动选择工具
根据回测结果自动评分和排序
"""
strategies = [
{
"name": "MomentumTrendStrategy",
"trades": 68,
"avg_profit": 1.52,
"total_profit": 23.45,
"win_rate": 89.7,
"max_drawdown": 3.21,
"sharpe": 3.5
},
{
"name": "Strategy003",
"trades": 42,
"avg_profit": 1.31,
"total_profit": 18.72,
"win_rate": 85.7,
"max_drawdown": 4.15,
"sharpe": 3.2
},
{
"name": "Strategy001",
"trades": 127,
"avg_profit": 0.85,
"total_profit": 15.33,
"win_rate": 72.4,
"max_drawdown": 6.82,
"sharpe": 2.1
}
]
def calculate_score(strategy):
"""计算综合评分"""
# 收益分 (30%)
profit_score = min(strategy["total_profit"] / 30 * 100, 100) * 0.30
# 风险分 (25%)
risk_score = (10 - min(strategy["max_drawdown"], 10)) / 10 * 100 * 0.25
# 胜率分 (20%)
winrate_score = strategy["win_rate"] * 0.20
# Sharpe 分 (15%)
sharpe_score = min(strategy["sharpe"] / 5 * 100, 100) * 0.15
# 交易频率分 (10%)
trades = strategy["trades"]
if trades < 10:
freq_score = 60
elif 10 <= trades < 30:
freq_score = 85
elif 30 <= trades <= 80:
freq_score = 100
elif 80 < trades <= 150:
freq_score = 80
else:
freq_score = 50
freq_score *= 0.10
total_score = profit_score + risk_score + winrate_score + sharpe_score + freq_score
return round(total_score, 2)
def filter_strategies(strategies):
"""过滤不合格策略"""
qualified = []
for s in strategies:
if (s["total_profit"] >= 5 and
s["max_drawdown"] <= 15 and
s["win_rate"] >= 50 and
s["sharpe"] >= 1.0):
qualified.append(s)
return qualified
def rank_strategies(strategies):
"""策略排名"""
for s in strategies:
s["score"] = calculate_score(s)
return sorted(strategies, key=lambda x: x["score"], reverse=True)
# 主程序
print("=" * 60)
print("策略自动选择工具")
print("=" * 60)
# 过滤
qualified = filter_strategies(strategies)
print(f"\n合格策略数: {len(qualified)} / {len(strategies)}")
# 排名
ranked = rank_strategies(qualified)
# 输出结果
print("\n策略排名(按综合评分):")
print("-" * 60)
for i, s in enumerate(ranked, 1):
print(f"{i}. {s['name']}")
print(f" 总分: {s['score']} | 收益: {s['total_profit']}% | "
f"回撤: {s['max_drawdown']}% | 胜率: {s['win_rate']}%")
print()
# 推荐
print("=" * 60)
print("🏆 推荐策略:", ranked[0]["name"])
print(f" 综合评分: {ranked[0]['score']}")
print("=" * 60)

不同市况下的策略选择#

市场类型识别#

1. 牛市(Bull Market)#

特征

  • 持续上涨
  • 回调幅度小
  • 成交量放大

推荐策略类型

  • ✅ 趋势跟踪策略
  • ✅ 动量策略
  • ✅ 突破策略
  • ❌ 避免均值回归策略

案例策略

  • MomentumTrendStrategy
  • BreakoutTrendStrategy
  • ADXTrendStrategy

2. 熊市(Bear Market)#

特征

  • 持续下跌
  • 反弹无力
  • 成交量萎缩

推荐策略类型

  • ✅ 保守型策略
  • ✅ 防守型策略
  • ✅ 做空策略(如果支持)
  • ❌ 避免激进追涨策略

应对措施

  • 降低仓位
  • 提高止损标准
  • 减少交易频率
  • 考虑暂停交易

3. 震荡市(Range-Bound Market)#

特征

  • 横盘整理
  • 区间波动
  • 假突破多

推荐策略类型

  • ✅ 均值回归策略
  • ✅ 网格交易策略
  • ✅ RSI 超买超卖策略
  • ❌ 避免趋势跟踪策略

案例策略

  • MeanReversionStrategy
  • GridTradingStrategy
  • Bollinger Bands 反转策略

策略适应性矩阵#

策略类型牛市熊市震荡市综合适应性
趋势跟踪⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
均值回归⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
动量策略⭐⭐⭐⭐⭐⭐⭐
突破策略⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
网格策略⭐⭐⭐⭐⭐⭐⭐

支持与分享

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

赞助
策略批量对比
https://blog.smyb.fun/posts/aitrade/08_策略批量对比/
作者
三木羽冰
发布于
2026-01-08
许可协议
CC BY-NC-SA 4.0
最后更新于 2026-01-08,距今已过 41 天

部分内容可能已过时

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

音乐

暂未播放

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

目录