7.7 可视化:收益曲线、回撤曲线、分布图
课前导读
本章目标
学完能解决什么困惑:为什么同一组收益数字,画成图以后更容易发现策略的强弱、风险和异常。
适合谁学习:刚学完量化入门,已经知道收益率、成本、滑点和数据口径的新手投资者。
难度:beginner
预计用时:约 35 分钟
你可以把本节想成一次“策略体检”。
体检报告不会只给你一句“身体还行”。
它会给你心率曲线、血压变化、化验分布和医生备注。
量化研究也是一样。
一条策略如果只告诉你“最后赚了 10%”,信息是不够的。
我们还想知道:它一路是平稳前进,还是大起大落。
我们还想知道:它最难受的时候亏到什么程度。
我们还想知道:它的每日收益是集中在小波动,还是经常出现极端跳动。
这就是可视化的价值。
知识正文
1. 从“数字表”到“体检报告图”
上一章我们已经知道,量化不是神秘公式,而是把投资想法写成规则,再用数据检查。
可是数据表像一张很长的体检明细单。
你一行一行看,当然能看懂。
但当交易日变成 200 天、500 天、1000 天时,人眼会开始疲劳。
图表的作用,就是把长表压缩成可观察的形状。
对 A 股研究来说,最常见的三张图是:收益曲线、回撤曲线、分布图。
它们不是为了让报告好看。
它们分别回答三个不同问题。
收益曲线回答:“资金整体怎么走?”
回撤曲线回答:“过程里最痛的下跌有多深、持续多久?”
分布图回答:“每日收益通常落在哪里,有没有特别极端的日子?”
这三张图合在一起,就像策略的体检报告。
flowchart TD
A[每日收益数据] --> B[收益曲线]
A --> C[回撤曲线]
A --> D[收益分布图]
B --> E[观察长期方向]
C --> F[观察承受压力]
D --> G[观察波动形态]2. 收益曲线:看资金一路怎么走
收益曲线也常被叫作资金曲线。
它把每天的收益连续累积起来,画成一条线。
如果你从 1 元本金开始,第一天涨 1%,资金变成 1.01 元。
第二天跌 1%,不是回到 1 元,而是 1.01 × 0.99。
所以收益曲线强调“连续复利后的路径”。
这比单独看每日涨跌更接近真实账户体验。
对于 A 股新手,收益曲线至少要看三件事。
第一,曲线是不是长期向上。
第二,曲线上涨是不是主要集中在少数几天。
第三,曲线下跌时是不是经常突然陡降。
如果一条曲线大部分时间横着走,只靠一次大涨撑起结果,你要谨慎。
这可能说明策略不是稳定有效,而是碰巧赶上某段行情。
3. 回撤曲线:看最难熬的坑
回撤可以先用生活语言理解。
假设你爬山,最高走到海拔 1000 米,后来退到 850 米。
从最高点往下掉的那 150 米,就是“从峰值回落”。
放到资金上,如果策略资金最高到 1.20,后来跌到 1.02。
回撤就是 1.02 / 1.20 - 1,也就是 -15%。
最大回撤就是整个观察期里最深的那一次回落。
新手常常只看“最终收益”。
但真正拿真钱时,最考验心态的是中途亏损。
如果一条策略最后涨了 20%,中途最大回撤却到 -35%,很多人根本坚持不到最后。
所以回撤曲线不是吓唬你。
它是在提前告诉你:这条路可能有多颠簸。
风险提醒
回撤曲线只能描述历史中出现过的坑,不能保证未来不会出现更深的坑。
4. 分布图:看每天收益的“脾气”
分布图像一张班级成绩直方图。
它不关心某一天具体是哪天。
它关心每日收益通常集中在哪个区间。
比如大多数日收益在 -1% 到 +1% 之间,说明日常波动相对温和。
如果经常出现 +6%、-7% 这类柱子,说明策略会遇到剧烈波动。
A 股有涨跌幅限制、停牌、复牌和公告冲击。
这些制度和事件会让收益分布出现尖峰或长尾。
长尾不是高级词。
你可以理解为“平时看着没事,偶尔来一下特别大的波动”。
分布图能帮助你提前问自己:我真的能承受这种波动吗?
5. 一个短小的 Python 示例
下面代码不要求你现在联网运行。
它展示了从每日策略收益,得到三张体检报告图的最小思路。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({
"date": pd.to_datetime(["2026-01-02", "2026-01-05", "2026-01-06", "2026-01-07"]),
"strategy_return": [0.01, -0.02, 0.015, -0.005],
}).set_index("date")
df["equity"] = (1 + df["strategy_return"]).cumprod()
df["peak"] = df["equity"].cummax()
df["drawdown"] = df["equity"] / df["peak"] - 1
df["equity"].plot(title="策略收益曲线")
df["drawdown"].plot(title="策略回撤曲线")
df["strategy_return"].hist(bins=10)
plt.show()这段代码里,cumprod() 的意思是连续相乘。
它模拟资金每天按收益率滚动变化。
cummax() 的意思是记录到当天为止出现过的最高资金值。
最高资金值和当前资金值一比较,就能得到回撤。
直方图的 bins=10 表示把收益分成 10 个小区间来数次数。
你现在不必记住所有参数。
先记住三张图各自回答什么问题,比记参数更重要。
6. A 股案例:同样赚 8%,过程可能完全不同
假设你研究一个简单观察规则。
规则是:当某只沪深 300 成分股站上 20 日均线时持有,否则空仓观察。
我们暂时不讨论完整回测系统。
这里只看图表如何帮助理解结果。
策略甲最终收益 8%。
策略乙最终收益也是 8%。
但策略甲的收益曲线缓慢上行,中途最大回撤 -5%。
策略乙前三个月下跌 -18%,后来靠一段快速反弹回到 8%。
如果只看最终数字,两者一样。
如果看收益曲线和回撤曲线,两者完全不是同一种体验。
新手投资者需要明白:你买到的是过程,不只是终点。
量化开发者需要明白:图表能帮你发现规则是否稳定,是否只依赖少数行情。
专业研究者需要明白:图表不是结论,而是进一步追问的线索。
7. 读图时的四个固定问题
第一问:收益曲线的上升来自多数时间,还是少数几天。
第二问:回撤最深的位置,发生在什么市场环境。
第三问:分布图是否有明显极端亏损日。
第四问:图表是否和你的策略规则相匹配。
如果一个低频趋势规则,却画出每天剧烈跳动的收益分布,就要检查数据或规则。
如果一个强调稳健的规则,却长期出现深回撤,就要重新评估风险边界。
如果图表只在某一小段时间好看,也要小心样本太短。
图表不会替你做决定。
它让你更快发现应该问的问题。
关键心得
可视化不是把策略包装得更漂亮,而是把隐藏在表格里的路径、压力和异常暴露出来。
8. 常见误区
误区一:只画收益曲线,不画回撤。
这就像体检只看身高体重,不看血压血糖。
误区二:把不同数据口径放在同一张图里比较。
例如一条用前复权价格,一条用未复权价格,结论可能被口径污染。
误区三:忽略交易成本和滑点。
图表再平滑,如果收益没有扣除现实成本,也只是纸面结果。
误区四:看到图表好看就急着实盘。
图表只能帮助研究复盘,不能替代交易计划和风险控制。
交互实验室
练习 1:手工判断三张图分别回答什么
请拿出一张纸,写下下面三句话。
“收益曲线回答:资金一路怎么走。”
“回撤曲线回答:中途最难受的下跌是什么样。”
“分布图回答:每日收益通常集中在哪里。”
然后找一只你熟悉的 A 股观察对象。
不用下单,也不用预测涨跌。
只在行情软件里观察过去一段走势。
问自己:如果这是一条策略曲线,我最担心哪一段。
这个练习的目标不是做判断,而是训练读图问题意识。
练习 2:用表格模拟收益曲线
在电子表格里建立四列。
第一列写日期。
第二列写每日收益率,例如 1%、-2%、0.5%。
第三列写资金值,第一天从 1 开始连续相乘。
第四列写到当天为止的最高资金值。
第五列写当前资金值除以最高资金值再减 1。
你会看到,回撤不是“当天跌幅”。
回撤是“从曾经最高点掉下来多少”。
练习 3:给研究图表写一句话结论
请用下面格式记录。
收益曲线:整体方向是上行、下行还是震荡。
回撤曲线:最大压力大约出现在什么时候。
分布图:大多数日收益是集中还是分散。
下一步:我需要检查哪一段原始数据或规则。
这四句话就是最小图表复盘。
核心复盘
知识清单:
- [ ] 我能说出收益曲线、回撤曲线、分布图分别回答的问题。
- [ ] 我理解最终收益相同,不代表持有体验相同。
- [ ] 我知道回撤是从历史高点往下掉的幅度,不是单日跌幅。
- [ ] 我能用 pandas 的
cumprod()和cummax()理解资金曲线和回撤。 - [ ] 我不会因为一张漂亮图表就直接把策略用于实盘。
金句总结
图表不是策略的化妆品,而是策略的体检报告。