第 19 课:可视化分析工具
⏱ 课时:1.5 小时
🎯 学习目标:学会使用图表分析工具,通过可视化手段深入理解策略信号和市场行为
📚 课程大纲:
- 19.1 plot-dataframe 生成图表
- 19.2 图表解读
课程概述
可视化是理解交易策略的强大工具。通过图表,你可以直观地看到:
- 买卖信号在 K 线图上的位置
- 技术指标的变化趋势
- 策略在不同市场条件下的表现
- 信号质量和时机的准确性
Freqtrade 提供的 plot-dataframe 和 plot-profit 命令可以生成交互式 HTML 图表,帮助你从视觉角度分析策略。
19.1 plot-dataframe 生成图表
19.1.1 基础用法
plot-dataframe 命令可以为指定的交易对生成 K 线图和指标图表。
基本命令格式
freqtrade plot-dataframe \
-c config.json \
--strategy YourStrategy \
--pairs BTC/USDT ETH/USDT \
--timerange 20230101-20230131 \
--no-trades
参数说明:
-
-c config.json: 指定配置文件 -
--strategy: 要分析的策略名称 -
--pairs: 要绘制的交易对(可指定多个) -
--timerange: 时间范围(格式:YYYYMMDD-YYYYMMDD)
示例:绘制单个交易对
freqtrade plot-dataframe \
-c config.json \
--strategy Strategy001 \
--pairs BTC/USDT \
--timerange 20250601-20251001 \
--no-trades
输出:
Loading data from 2023-01-01 to 2023-02-01 ...
Analyzing Strategy001 on BTC/USDT ...
Generating plot ...
Saved plot to user_data/plot/freqtrade-plot-BTC_USDT-5m.html
19.1.2 高级参数
1. 指定指标
使用 --indicators1 和 --indicators2 参数可以控制显示哪些指标:
freqtrade plot-dataframe \
-c config.json \
--strategy MovingAverageCrossStrategy \
--pairs BTC/USDT \
--indicators1 ema_fast ema_slow \
--indicators2 rsi macd \
--timerange 20251001-20251015 \
--no-trades
指标分组说明:
-
--indicators1: 显示在主图(K 线图)上的指标(如均线) -
--indicators2: 显示在副图上的指标(如 RSI、MACD)
2. 包含交易信号
添加 --trade-source 参数可以在图表上标注实际的交易:
# 从回测结果中加载交易
freqtrade plot-dataframe \
-c config.json \
--strategy Strategy001 \
--pairs BTC/USDT \
--trade-source file \
--export-filename user_data/backtest_results/backtest-result-2023-01-15.json
3. 绘制多个时间周期
freqtrade plot-dataframe \
-c config.json \
--strategy MultiTimeframeTrendStrategy \
--pairs BTC/USDT \
--timeframe 5m \
--timerange 20230101-20230107 \
--no-trades
19.1.3 完整示例
# 绘制带有完整交易信号的图表
freqtrade plot-dataframe \
-c config.json \
--strategy MovingAverageCrossStrategy \
--pairs BTC/USDT ETH/USDT BNB/USDT \
--timerange 20230101-20230131 \
--indicators1 ema_fast ema_slow \
--indicators2 rsi volume \
--trade-source file \
--export-filename user_data/backtest_results/backtest-result-2023-01-20.json
19.1.4 plot-profit 利润图表
除了 K 线图,还可以生成利润曲线图:
# 使用回测结果查看:
freqtrade backtesting-show -c config.json --backtest-filename user_data/backtest_results/backtest-result-2025-11-03_15-55-45.zip
# 查看具体交易记录:
freqtrade show-trades -c config.json --db-url sqlite:///tradesv3.dryrun.sqlite
freqtrade plot-profit \
-c config.json \
--strategy Strategy001 \
--pairs BTC/USDT ETH/USDT \
--timerange 20250101-20250331 \
--export-filename user_data/backtest_results/backtest-result-2025-01-20.json
输出:
Saved plot to user_data/plot/freqtrade-profit-plot.html
利润图表包含:
- 累计利润曲线
- 每日利润柱状图
- 回撤曲线
- 持仓数量变化
19.2 图表解读
19.2.1 K 线图解读
生成的 HTML 图表是交互式的,可以使用 Plotly 的功能进行缩放、平移和悬停查看数据。
图表结构
典型的 plot-dataframe 图表包含三个部分:
┌─────────────────────────────────────────┐
│ 主图:K线 + 均线指标 │
│ 📈 蜡烛图 + EMA/SMA 曲线 │
│ 🟢 买入信号点 🔴 卖出信号点 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ 副图1:震荡指标 (RSI, Stochastic) │
│ 📊 0-100 范围的指标 │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ 副图2:MACD 或其他指标 │
│ 📉 柱状图 + 信号线 │
└─────────────────────────────────────────┘
信号标记
- 🟢 绿色三角形(向上):买入信号
- 🔴 红色三角形(向下):卖出信号
- 蓝色实线区域:持仓期间
19.2.2 优质信号特征
通过可视化分析,可以识别优质的交易信号:
✅ 好的买入信号
特征:
1. 价格在支撑位附近反弹
2. 多个指标同时发出信号(EMA 金叉 + RSI 超卖恢复)
3. 成交量放大确认
4. 趋势与信号一致
示例场景:
- RSI 从 30 以下回升
- 快速 EMA 向上穿越慢速 EMA
- MACD 柱状图由负转正
- 价格突破短期下降趋势线
❌ 差的买入信号
特征:
1. 横盘震荡中的假突破
2. 指标背离(价格新低,RSI 未创新低)
3. 成交量萎缩
4. 逆势交易(下跌趋势中买入)
示例场景:
- RSI 在 50-70 区间反复波动
- EMA 交叉频繁但价格横盘
- 下跌趋势中的短暂反弹
- MACD 柱状图变化微弱
19.2.3 实际案例分析
案例1:趋势跟随策略
假设使用 MovingAverageCrossStrategy,查看图表:
观察要点:
1. 金叉买入信号
- EMA(20) 向上穿越 EMA(50)
- 此时 RSI 应该在 50 以上(确认上涨动能)
- 价格应该在均线之上运行
2. 死叉卖出信号
- EMA(20) 向下穿越 EMA(50)
- RSI 跌破 50(动能转弱)
- 价格跌破均线支撑
3. 持仓期间
- 价格沿着快速均线运行
- RSI 保持在 40-70 区间(健康趋势)
- 无大幅回撤
图表示例分析:
时间轴 │ K线价格 │ EMA20 │ EMA50 │ RSI │ 信号
────────────┼───────────┼─────────┼─────────┼───────┼─────────
2023-01-05 │ 16500 │ 16450 │ 16600 │ 45 │ 空仓
2023-01-06 │ 16800 ↗ │ 16520 ↗ │ 16580 ↗ │ 58 ↗ │ 🟢 买入
2023-01-07 │ 17200 │ 16680 │ 16570 │ 65 │ 持仓
2023-01-08 │ 17500 │ 16890 │ 16560 │ 72 │ 持仓
2023-01-09 │ 17300 │ 17050 │ 16560 │ 68 │ 持仓
2023-01-10 │ 16900 ↘ │ 17100 ↘ │ 16570 ↗ │ 52 ↘ │ 🔴 卖出
分析:
- 金叉买入时,RSI 刚突破 50,动能确认
- 持仓期间,价格稳定运行在 EMA20 之上
- 死叉卖出时,RSI 回落至 50 附近,及时止盈
- 盈利:17300 - 16800 = +500 (+2.98%)
案例2:震荡市场的假信号
观察要点:
1. 频繁交叉
- 短期内多次金叉死叉
- 每次持仓时间很短(<10 根 K 线)
- 价格上下反复,无明确方向
2. 指标混乱
- RSI 在 40-60 区间反复
- MACD 柱状图正负交替
- 成交量无明显特征
3. 结果
- 频繁交易,累计手续费高
- 盈亏交替,整体收益差
改进建议:
1. 增加过滤条件
- 要求趋势确认(ADX > 25)
- 限制最小持仓时间
- 增加成交量确认
2. 调整参数
- 使用更长周期的均线(减少交叉频率)
- 提高 RSI 阈值(70/30 改为 80/20)
3. 市场环境识别
- 震荡市场暂停交易
- 只在趋势明确时入场
19.2.4 利润图表解读
plot-profit 生成的利润图表包含关键信息:
累计利润曲线
理想曲线特征:
✅ 稳定上升,斜率均匀
✅ 回撤幅度小且快速恢复
✅ 无长期横盘或下跌
需要警惕:
❌ 陡峭上升后急剧回撤(高风险)
❌ 长期横盘不涨(资金效率低)
❌ 频繁的小幅波动(过度交易)
回撤分析
观察要点:
1. 最大回撤深度
- 优秀:< 10%
- 可接受:10-20%
- 高风险:> 20%
2. 回撤持续时间
- 短暂回撤(几天):正常波动
- 长期回撤(数周):策略可能失效
3. 回撤频率
- 偶尔回撤:健康
- 频繁回撤:策略不稳定
19.2.5 图表分析检查清单
使用图表时,按以下清单逐项检查:
信号质量检查
- [ ] 买入信号是否出现在合理位置(支撑位、趋势起点)
- [ ] 卖出信号是否及时(趋势反转、止盈位)
- [ ] 多个指标是否相互确认(不矛盾)
- [ ] 成交量是否支持信号的有效性
策略行为检查
- [ ] 持仓时间是否合理(不过短或过长)
- [ ] 止损是否有效触发
- [ ] 盈利交易与亏损交易的比例
- [ ] 在不同市场环境下的表现(趋势、震荡、暴跌)
指标设置检查
- [ ] 均线周期是否适合时间框架
- [ ] RSI 阈值是否合理(70/30 或 80/20)
- [ ] MACD 参数是否匹配市场节奏
- [ ] 是否有指标冗余(多个指标给出相同信号)
📝 实践任务
任务 1:生成基础图表
- 选择一个已测试的策略(如
Strategy001) - 生成 BTC/USDT 的 K 线图表:
freqtrade plot-dataframe \
-c config.json \
--strategy Strategy001 \
--pairs BTC/USDT \
--timerange 20230101-20230131
- 在浏览器中打开生成的 HTML 文件
- 观察并记录:
- 总共有多少个买入信号?
- 总共有多少个卖出信号?
- 最长持仓时间是多久?
任务 2:分析信号质量
- 在图表中找出 3 个最好的买入信号
- 分析为什么这些信号质量高:
- 技术指标的配合情况
- 价格所处的位置(支撑/阻力)
- 市场趋势环境
- 找出 3 个最差的买入信号(导致亏损)
- 分析失败原因:
- 是假突破吗?
- 是逆势交易吗?
- 止损设置是否合理?
任务 3:生成利润图表
- 运行回测并导出结果:
freqtrade backtesting \
-c config.json \
--strategy Strategy001 \
--timerange 20230101-20230331 \
--export trades
- 生成利润图表:
freqtrade plot-profit \
-c config.json \
--strategy Strategy001 \
--export-filename user_data/backtest_results/backtest-result-YYYY-MM-DD_HH-MM-SS.json
- 分析利润曲线:
- 最大回撤在哪个时间段?
- 最大盈利在哪个时间段?
- 曲线是否平滑上升?
任务 4:对比不同策略
- 分别绘制 3 个不同策略的图表
- 使用相同的交易对和时间范围
- 对比分析:
- 哪个策略的信号最清晰?
- 哪个策略的信号数量最合理?
- 哪个策略在震荡市场中表现更好?
任务 5:优化指标显示
- 尝试只显示关键指标:
freqtrade plot-dataframe \
-c config.json \
--strategy MovingAverageCrossStrategy \
--pairs BTC/USDT \
--indicators1 ema_fast ema_slow \
--indicators2 rsi
- 清理冗余指标,保持图表简洁
- 确保每个显示的指标都有明确作用
🧪 知识检查
选择题
-
plot-dataframe命令主要用于:- A. 下载历史数据
- B. 生成 K 线和指标图表
- C. 执行回测
- D. 优化参数
-
图表中的绿色三角形表示:
- A. 价格上涨
- B. 买入信号
- C. 指标超买
- D. 止损触发
-
--indicators1参数用于指定:- A. 显示在主图上的指标
- B. 显示在副图上的指标
- C. 第一个交易对的指标
- D. 最重要的指标
-
以下哪个是优质买入信号的特征?
- A. 价格在阻力位附近
- B. 多个指标同时确认
- C. 成交量萎缩
- D. RSI 处于超买区
-
plot-profit命令生成的图表不包括:- A. 累计利润曲线
- B. 回撤曲线
- C. K 线图
- D. 每日利润柱状图
简答题
解释为什么可视化分析对策略开发很重要?
如何通过图表识别震荡市场中的假信号?
描述一个理想的买入信号应该具备哪些特征?
利润曲线中出现长期横盘说明什么问题?如何改进?
在图表中看到频繁的买卖信号交替时,应该如何调整策略?
实践题
-
生成
MeanReversionStrategy的图表,分析:- 该策略在趋势市场中表现如何?
- 是否有过多的逆势交易?
- 如何通过图表优化进出场时机?
-
对比同一交易对在 5m、15m、1h 三个时间框架的图表:
- 信号数量有何差异?
- 哪个时间框架的信号更清晰?
- 如何选择最佳时间框架?
📌 核心要点
关键命令
# 生成 K 线图表
freqtrade plot-dataframe \
-c config.json \
--strategy YourStrategy \
--pairs BTC/USDT \
--timerange 20230101-20230131
# 指定显示的指标
freqtrade plot-dataframe \
-c config.json \
--strategy YourStrategy \
--pairs BTC/USDT \
--indicators1 ema_fast ema_slow \
--indicators2 rsi macd
# 生成利润图表
freqtrade plot-profit \
-c config.json \
--strategy YourStrategy \
--export-filename user_data/backtest_results/backtest-result.json
图表解读要点
- 信号位置:好的信号出现在支撑/阻力位、趋势起点
- 指标确认:多个指标同时给出信号,可靠性更高
- 成交量:放量确认信号有效性
- 趋势环境:顺势交易成功率更高
优质信号特征
✅ 买入信号:
- 价格在支撑位反弹
- RSI 从超卖区恢复
- EMA 金叉确认
- 成交量放大
✅ 卖出信号:
- 价格触及阻力位
- RSI 进入超买区
- EMA 死叉确认
- 上涨动能衰竭
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 信号过多 | 参数过于敏感 | 增加均线周期,提高 RSI 阈值 |
| 信号过少 | 参数过于保守 | 降低均线周期,放宽条件 |
| 假信号频繁 | 震荡市场 | 增加趋势过滤(ADX),避免横盘交易 |
| 止损频繁触发 | 止损太紧 | 适当放宽止损,或使用 ATR 动态止损 |
🎯 下节预告
第 20 课:模拟交易验证
在下一课中,我们将学习:
- 20.1 模拟交易的重要性
- 20.2 监控指标与警报
关键内容:
- 如何运行长期 Dry-run(1-2 周)
- 如何监控实时表现
- 如何设置 Telegram 警报
- 如何判断策略是否准备好实盘
可视化分析帮助你理解策略的历史表现,而模拟交易将验证策略在实时市场中的表现。两者结合,才能全面评估策略的可靠性。
🎓 学习建议:
- 每个策略都应该生成图表分析
- 重点关注亏损交易,找出失败模式
- 对比不同时间周期,选择最佳设置
- 使用图表优化参数,而不是盲目调整
- 保存优秀和失败的案例,建立自己的分析库
通过反复的图表分析和优化,你将逐渐形成对市场和策略的直觉。记住:看懂图表,才能理解策略;理解策略,才能持续盈利。
Top comments (0)