Skip to content

7.7 可视化:收益曲线、回撤曲线、分布图

课前导读

本章目标

学完能解决什么困惑:为什么同一组收益数字,画成图以后更容易发现策略的强弱、风险和异常。

适合谁学习:刚学完量化入门,已经知道收益率、成本、滑点和数据口径的新手投资者。

难度:beginner

预计用时:约 35 分钟

你可以把本节想成一次“策略体检”。

体检报告不会只给你一句“身体还行”。

它会给你心率曲线、血压变化、化验分布和医生备注。

量化研究也是一样。

一条策略如果只告诉你“最后赚了 10%”,信息是不够的。

我们还想知道:它一路是平稳前进,还是大起大落。

我们还想知道:它最难受的时候亏到什么程度。

我们还想知道:它的每日收益是集中在小波动,还是经常出现极端跳动。

这就是可视化的价值。

知识正文

1. 从“数字表”到“体检报告图”

上一章我们已经知道,量化不是神秘公式,而是把投资想法写成规则,再用数据检查。

可是数据表像一张很长的体检明细单。

你一行一行看,当然能看懂。

但当交易日变成 200 天、500 天、1000 天时,人眼会开始疲劳。

图表的作用,就是把长表压缩成可观察的形状。

对 A 股研究来说,最常见的三张图是:收益曲线、回撤曲线、分布图。

它们不是为了让报告好看。

它们分别回答三个不同问题。

收益曲线回答:“资金整体怎么走?”

回撤曲线回答:“过程里最痛的下跌有多深、持续多久?”

分布图回答:“每日收益通常落在哪里,有没有特别极端的日子?”

这三张图合在一起,就像策略的体检报告。

mermaid
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 示例

下面代码不要求你现在联网运行。

它展示了从每日策略收益,得到三张体检报告图的最小思路。

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() 理解资金曲线和回撤。
  • [ ] 我不会因为一张漂亮图表就直接把策略用于实盘。

金句总结

图表不是策略的化妆品,而是策略的体检报告。

本文档仅供学习交流用途,不构成任何投资建议。股市有风险,入市需谨慎。