第4章:单资产收益与风险——收益率计算、年化处理与波动率

各位同学,欢迎来到第四讲。今天咱们聊点实在的——单资产的收益和风险怎么算。

说实话,我见过不少刚入行的朋友,一上来就搞复杂的多因子模型,结果连最基础的收益率都算错了。嗯,这其实挺要命的。我个人习惯是,先把单资产这关过扎实了,再去碰组合优化。你想想看,连一支股票的收益都算不明白,怎么去衡量几十支股票的组合风险?

4.1 简单收益率 vs 对数收益率

先问个问题:你今天买了100块的股票,明天涨到110块,你赚了多少?

大部分人会说10%。没错,这就是简单收益率

简单收益率公式:

R_simple = (P_t - P_{t-1}) / P_{t-1}

说白了就是:今天的价格减去昨天的价格,再除以昨天的价格。

但我在项目中遇到过一个问题:当我们要计算多期收益率时,简单收益率就有点尴尬了。比如连续两天涨10%,总收益不是20%,而是21%——因为复利效应。这就引出了另一个概念:对数收益率

对数收益率公式:

R_log = ln(P_t / P_{t-1})

为什么用对数?两个原因:

  • 可加性:多期对数收益率可以直接相加。比如两天各涨10%,对数收益率加起来就是总的对数收益率。
  • 正态性假设:金融数据里,对数收益率更接近正态分布。这对后续的统计建模很重要。

我的建议:做学术研究或风险建模时,优先用对数收益率。做日常汇报或绩效展示时,用简单收益率——因为老板更容易理解“我赚了10%”而不是“我的对数收益率是0.0953”。

4.2 年化处理——把不同时间尺度的收益拉到同一把尺子上

你有一个策略,一个月赚了2%。另一个策略,半年赚了10%。哪个更好?

没法直接比,对吧?因为时间尺度不一样。这时候就需要年化处理

年化收益率的核心思想很简单:假设收益可以复利滚动,把短期收益换算成一年的收益。

年化收益率公式:

R_annual = (1 + R_period)^(252 / n) - 1

其中 n 是持有天数,252 是一年大概的交易天数。

举个例子:你持有某股票30天,收益5%。那年化收益就是:

(1 + 0.05)^(252/30) - 1 ≈ 49.8%

嗯,看着很诱人对吧?但我要泼盆冷水——年化收益率不代表你每年都能赚这么多。它只是一个标准化工具,方便你比较不同策略。

我曾经踩过的坑:有一回我拿一个高频策略的周收益做年化,算出来年化300%多。当时兴奋得不行,结果实盘跑了一个月就亏回去了。为什么?因为那周的收益是运气,不是能力。年化处理假设收益模式可以持续,但现实中很少有这么完美的事。

另外,年化处理也适用于年化波动率。公式类似:

σ_annual = σ_daily × √252

这里有个细节:波动率是用平方根法则,不是乘法。因为波动率是标准差,而标准差随时间的增长是平方根关系。

4.3 波动率计算——风险到底怎么量化?

说到风险,大部分人第一反应是“亏钱的可能性”。但在量化金融里,我们通常用波动率来度量风险。说白了,就是收益率的波动幅度。

波动率的计算分三步:

  1. 计算每日收益率(建议用对数收益率)
  2. 计算这些收益率的标准差
  3. 年化处理(乘以√252)

代码实现其实很简单:

import numpy as np
import pandas as pd

# 假设 prices 是价格序列
returns = np.log(prices / prices.shift(1))
daily_vol = returns.std()
annual_vol = daily_vol * np.sqrt(252)

print(f"日波动率: {daily_vol:.4f}")
print(f"年化波动率: {annual_vol:.4f}")

注意:这里用的是样本标准差(ddof=1),不是总体标准差。因为我们是拿样本估计总体,少一个自由度更准确。我见过有人直接用 np.std() 默认参数,结果算出来的波动率偏小——嗯,这种细节往往就是专业和业余的分水岭。

4.4 一张图看懂本章核心

下面这张SVG图,把本章的知识结构串起来了。你可以把它当作一个思维导图来看:

单资产收益与风险 收益率计算 简单收益率 对数收益率 年化处理 年化收益率 年化波动率 波动率计算 日波动率 年化波动率 核心逻辑: 收益率 → 年化 → 波动率 → 风险度量

4.5 实战中的几个要点

最后,我分享几个实战中容易忽略的点:

  • 数据频率问题:日数据用252,周数据用52,月数据用12。别搞混了。
  • 分红和拆股:计算收益率时,要用复权价格。否则分红那天你会看到价格突然跳空,收益率算出来是负的——其实你并没有亏钱。
  • 缺失值处理:如果某天没有交易(比如停牌),收益率应该用NaN,而不是0。用0会低估波动率。

我曾经犯过的错:有一回我处理美股数据,没注意节假日。结果周五到周一算出来一个3天的收益率,波动率一下子被拉高了。后来我改成只计算相邻交易日的收益率,才把问题解决。所以,永远检查你的数据是否有跳空

好了,这一章的内容就到这里。收益率计算、年化处理、波动率计算——这三板斧看似简单,但用好了,你就能对任何单资产的风险收益特征有个清晰的判断。下一章我们会把这些工具用到多资产上,开始接触真正的组合优化。


公众号:蓝海资料掘金营,微信deep3321