← 上一课程:实战热身:拉数据画图下一课程:第一个策略:定投 vs 动量 →

第 3 课:用 Python 量化收益与风险

上一课程回顾(含自测参考答案)

课程 2 的四个自测题,参考答案如下:

1. 说清图上横轴、纵轴、收盘价线分别是什么

横轴是日期(从早到晚,本图应为 2021 → 2026 左右的"近 5 年");纵轴是价格(510300 每份多少钱,元);收盘价线是每天收盘价的连线——它忽略了盘中波动,只保留每天的"结局",所以看起来是一条干净的线,比 K 线更适合看趋势。

2. 对照行情 App:最新收盘价差多少?大形状一致吗?

最新收盘价差一两分钱以内都正常(App 是盘中实时价 vs 数据源当天收盘价的时间差)。5 年走势的"大形状"应该基本一致:2021 年前后高点、2022~2023 回落、2024 见底回升的节奏一致。如果形状有差异,大概率是复权口径不同:yfinance 默认拉的是不复权价(真实成交价,分红除息时价格跳空),App 默认显示前复权(把历史价统一到现在的口径)——数据口径不同,图就不同,这是本课的起点认知。

3. 观察笔记(无标准答案,示例)

示例:"这 5 年沪深300 整体几乎没涨,2021 年高点约 4.5 元,2024 年低点约 3.0 元,中间 2022 年跌得最连续;我的疑问是'现在这个位置算高还是低?'"——你的笔记是直觉锚点,本课(第 3 课)会算体检表数字,到时候回来验证你的直觉对不对。

4. 加餐:前复权 vs 不复权对比

差异出现在分红除息日附近:不复权图上除息当天价格会"跳空下跌"(比如跌 3 分钱),前复权图会把分红部分回填到历史价格里,所以越早的历史价格,两种口径差得越多。结论:两张图都没有错,只是口径不同——分析前先问清楚数据口径。


学习目标

前置要求

正文

3.1 风险收益体检表:四个数字管一辈子

上一课你拉到了价格曲线,但"涨了还是跌了"用眼睛看不够精确。本课把这 5 年压缩成四个数字,就像体检报告:不看过程,只看关键指标。

指标 回答的问题 越大越好吗
年化收益率 这 5 年平均每年赚多少? 越大越好
波动率 每天涨跌起伏有多剧烈? 越小越稳
最大回撤 最惨时从高点亏了多少? 越小越好
夏普比率 每承担一份风险换几份收益? 越大越好

这四个数字合起来就是风险收益体检表。后面所有策略(定投、动量、多资产组合)跑完回测,输出的核心也就是这四件套。本课的目标:看到这四个数字,能说出它说明什么。

任何理财 App 的基金页面(天天基金/雪球/蛋卷)都能找到类似指标,名字可能叫"近 5 年年化收益""历史波动率""最大回撤""夏普比率"——都是同一套东西。

3.2 年化收益率:把 5 年涨跌换算成"每年赚多少"

直觉:510300 从 5 年前的 3.0 元涨到今天 4.0 元(举例,以你实际数据为准),5 年一共涨了 33%。但这 33% 摊到每年是多少?不是 33% ÷ 5 = 6.6%——因为收益会"利滚利",前一年赚的钱第二年也在赚钱。

正确算法(复利/年化):

年化收益率=(期末价格期初价格)1年数−1年化收益率 = \left(\frac{期末价格}{期初价格}\right)^{\frac{1}{年数}} - 1

套进例子:(4.0/3.0)1/5−1≈5.9%(4.0/3.0)^{1/5} - 1 ≈ 5.9\%。意思是:每年稳定赚 5.9%,5 年后就能从 3.0 变成 4.0——和实际 5 年起伏涨到 4.0 是"等效"的。这就是为什么基金页面上"近 5 年年化收益 5.9%"是这样算出来的。

三个容易错的地方:

  1. 年化 ≠ 平均:5 年涨 33% 的年化是 5.9%,不是 6.6%,因为中间有复利。
  2. 年化可以是负的:期末 4.0 → 期初 5.0,年化就是负的(每年平均亏一点)。
  3. 看年化必须带区间:"近 1 年年化 20%"和"近 5 年年化 5%"说的是不同的事,别拿两个区间比。

3.3 波动率:风险的第一种度量

直觉:两只基金年化收益都是 8%,但 A 每天 ±0.2% 平稳爬升,B 动不动 ±3% 过山车——B 的波动率大。波动率 = 收益率的波动幅度,数学上就是每日收益率的"标准差"再年化(AI 会算,你不用动手)。

对 510300 这种宽基 ETF,年化波动率大约在 15%~25% 区间(具体以数据为准)。

怎么理解这个数字:

💡 关键认知:收益可以平均,风险不行。年化收益率是把 5 年"平均"成一个数字,但波动率告诉你这 5 年实际有多颠簸。只看收益不看波动,就像只看工资不看加班。

3.4 最大回撤:最惨的时候亏多少

直觉:从曲线的任意一个高点跌到之后的最低点,最大的那次跌幅就是最大回撤。它回答的问题是:如果我在最倒霉的时候进场,最多会亏多少?

拿课程 2 的图举例:2021 年高点约 4.5 元 → 2024 年低点约 3.0 元,最大回撤 ≈ (3.0 − 4.5) / 4.5 ≈ −33%(以你实际数据为准)。意思是:5 年里最惨的一波,从山顶到谷底亏了三分之一。

三个要点:

  1. 回撤是"从高点算"的:哪怕最终年化收益是正的,中间也可能有 −33% 的回撤。收益与回撤是两回事。
  2. 回撤最考验人性:−33% 意味着 10 万变 6.7 万,很多人就是在这个位置割肉离场的——这正是"纪律"要对抗的东西(课程 1 的三要素之一)。
  3. 回撤和波动率的区别:波动率描述"平时有多颠",回撤描述"最坏一次有多惨"。两者通常相关,但一个 30% 回撤 + 15% 波动率 vs 一个 30% 回撤 + 30% 波动率的基金,体验完全不同。

3.5 夏普比率:每承担一份风险,换几份收益

直觉:波动率 20% 赚 8%,和波动率 10% 赚 8%,后者明显更划算。夏普比率就是把"划算程度"变成一个数字:

夏普比率=年化收益率−无风险利率年化波动率夏普比率 = \frac{年化收益率 - 无风险利率}{年化波动率}

怎么读这个数字:

夏普比率 含义(粗略)
0 以下 冒着风险还没跑赢存款,不如不折腾
0 ~ 0.5 收益对得起风险,但不算出色
0.5 ~ 1 不错的性价比
1 以上 很优秀(长期能做到的不多)

注意两个坑:

3.6 让 AI 生成体检表 + 对照验证(本课实战)

主路径(不碰代码):打开理杏仁或雪球,找到一只沪深300 指数基金(如 510300 或它的联接基金),把页面上的"近 5 年年化收益、波动率、最大回撤、夏普比率"抄下来,对照 3.2~3.5 节逐个说出它是什么意思。

AI 加餐(可选):把下面这句话发给 AI,让它跑出体检表并逐项解释:

"用 Python(yfinance)拉取沪深300 ETF(510300.SS)近 5 年日线,计算年化收益率、年化波动率、最大回撤、夏普比率(无风险利率按 1.5%),输出一张风险收益体检表,并逐项解释每个数字的含义。"

跑完后对照验证(沿用课程 2 的"交叉验证"习惯):

  1. 数字差多少? 你抄的网站数字和 AI 算的差一点很正常,可能来自:区间不同(网站可能用近 3 年/近 5 年)、复权口径不同、是否扣费(基金页面通常是扣费后净值)、无风险利率假设不同。
  2. 方向一致吗? 如果网站说"近 5 年年化为正",AI 也算出正的——方向对就行,别纠结小数点。
  3. 回到观察笔记(重点):课程 2 你写了三句话。现在对照体检表验证:
    • 你说"整体是涨/跌的" → 年化收益率的正负对吗?
    • 你说"某段跌得最惨" → 最大回撤发生的时间段和你印象一致吗?
    • 你的疑问("现在算高还是低")→ 体检表回答不了这个问题(它只描述过去),但第 5 课"估值百分位"会开始回答。

💡 一次验证就够:把"网站抄的"和"AI 算的"放在同一张表里对比,你就完成了量化里最重要的一步——不轻信任何单一来源。

自测练习

  1. 用 3.6 节的模板让 AI 生成 510300 近 5 年的风险收益体检表,写出四个数字,并用一句话解释每个数字是什么意思。
  2. 对照理杏仁/雪球上同一只基金:四个数字和 AI 算的差多少?说出至少两个可能的差异来源。
  3. 回到课程 2 的观察笔记,对照体检表验证:你的直觉(涨/跌、最惨时段)和数字结论一致吗?哪里不一致?
  4. 加餐(可选):让 AI 分别按"近 3 年"和"近 10 年"各出一份体检表,比较四个数字的变化,说说为什么同一只基金不同区间的数字差这么多。

答案不需要现在核对;第 4 课开头会回顾。到时候你会发现:这四个数字也是回测报告的核心输出。

学习要点小结

答疑记录

Q1(2026-08-08):什么是夏普比率

引用的内容: 无

答: 夏普比率一句话概括:每承担一份风险,换来几份收益,衡量的是投资的"性价比"。公式为:夏普比率 =(年化收益率 − 无风险利率)/ 年化波动率。分子是扣除无风险利率后的超额收益,分母是承担的风险(波动率),结果就是每承担 1 份风险换几份超额收益。

举例:510300 年化收益率 5.9%、无风险利率 1.5%、波动率 18%,夏普 = (5.9% − 1.5%) / 18% ≈ 0.24,意思是每承担 1 份风险只换来 0.24 份超额收益,性价比一般。读数参考:0 以下 = 冒着风险还不如存钱;00.5 = 收益对得起风险但不算出色;0.51 = 不错的性价比;1 以上 = 很优秀(长期不多见)。

两个关键提醒:① 夏普高 ≠ 不会亏——它只衡量性价比,不衡量会不会亏,波动率 30% 的基金夏普也可能到 1,照样可能大回撤,所以要跟最大回撤、波动率一起看;② 样本太短没意义——拿 1 个月数据算的夏普是噪音,至少看 35 年。实战提示:宽基 ETF 长期夏普一般在 0.30.8,如果某个策略回测跑出 1.5 以上的夏普,大概率是数据或参数有问题。

由此暴露的薄弱点: 无

← 上一课程:实战热身:拉数据画图下一课程:第一个策略:定投 vs 动量 →