首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用 Python 分析股票收益率分布?(偏度、峰度与"尖峰厚尾")

如何用 Python 分析股票收益率分布?(偏度、峰度与"尖峰厚尾")

原创
作者头像
用户7083614
发布于 2026-10-01 10:01:38
发布于 2026-10-01 10:01:38
250
举报

一句话回答: 用 AlphaFeed 取复权日线、算日收益率,再用 pandas 的 mean/std/skew/kurtosis 几行就能刻画收益率分布——真实数据会告诉你:股票日收益并不服从正态分布,而是"尖峰厚尾"(峰度远大于 0、极端涨跌远比正态频繁),这对风险管理至关重要。

为什么会有这个问题 / 传统做法的痛点

很多风险模型(如用标准差算 VaR、用正态假设定价)默认收益率服从正态分布。但实际股票收益:

  • 厚尾:极端大涨大跌的频率远高于正态预测,"黑天鹅"没那么稀有;
  • 尖峰:大量收益集中在均值附近,中间比正态更"尖";
  • 有偏:涨跌不对称(偏度非 0)。

要验证这些,需要干净的前复权日线和正确的统计口径。AlphaFeed 提供复权日线,统计用 pandas 即可。

分步骤解决(每步配可运行代码)

第 1 步:取复权日线并算日收益率

代码语言:python
复制
from alphafeed import AlphaFeed

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

df = af.klines.get("600519.SH", period="1d", count=500,
                   adjust="forward", to_dataframe=True).sort_values("trade_date").reset_index(drop=True)
ret = df["close"].pct_change().dropna()      # 日简单收益率

第 2 步:计算分布特征

代码语言:python
复制
def return_distribution(ret):
    return {"n": int(ret.shape[0]),
            "mean_%": round(float(ret.mean()) * 100, 3),
            "std_%": round(float(ret.std()) * 100, 2),
            "skew": round(float(ret.skew()), 2),
            "kurt_excess": round(float(ret.kurtosis()), 2),  # pandas 为超额峰度(正态=0)
            "min_%": round(float(ret.min()) * 100, 2),
            "max_%": round(float(ret.max()) * 100, 2)}

print(return_distribution(ret))

分布特征含义:

指标

含义

正态基准

mean

平均日收益

—

std

日收益标准差(波动率)

—

skew(偏度)

分布左右不对称程度

0(对称)

kurt_excess(超额峰度)

尖峰厚尾程度

0(pandas 已减 3)

min/max

极端单日涨跌

—

第 3 步:多标的对比

代码语言:python
复制
for s in ["600519.SH", "000001.SZ"]:
    d = af.klines.get(s, period="1d", count=500, adjust="forward",
                      to_dataframe=True).sort_values("trade_date")
    print(s, return_distribution(d["close"].pct_change().dropna()))

实测(约 500 个交易日):

标的

日均收益

日波动

偏度

超额峰度

单日最大跌/涨

贵州茅台 600519.SH

0.004%

1.56%

1.52

8.78

−7.42% / +9.29%

平安银行 000001.SZ

0.051%

1.26%

−0.07

10.03

−9.32% / +6.92%

结论很清楚:两只票的超额峰度都远大于 0(8.78、10.03),说明明显尖峰厚尾——极端涨跌远比正态分布预测的频繁。用正态假设会严重低估尾部风险。

关键坑与注意事项

  • 别默认正态:如上,股票收益超额峰度远大于 0,极端行情频率被正态严重低估。用正态算 VaR/期权定价会低估风险。
  • 峰度口径:pandas 的 kurtosis() 返回"超额峰度"(已减 3,正态=0);有些库返回"峰度"(正态=3)。对照时务必确认口径。
  • 极端值影响大:偏度、峰度对少数极端值非常敏感,样本区间含不含某次暴涨暴跌会显著改变结果。
  • 简单收益 vs 对数收益:本文用简单收益 pct_change();做加总/多期分析时对数收益 log(1+r) 更方便,口径别混用。
  • 前复权:一律 adjust="forward",否则除权跳空会制造假的极端收益。

常见问题(FAQ)

Q:超额峰度大于 0 意味着什么?

A:意味着分布比正态"更尖、尾更厚"——大部分日子波动很小,但极端大涨大跌的概率明显高于正态预测,即"厚尾"。

Q:偏度正负代表什么?

A:偏度>0(右偏)表示大涨的极端值更突出,偏度<0(左偏)表示大跌更极端。本例茅台右偏、平安近似对称。

Q:怎么直观看分布?

A:用直方图 + 正态曲线叠加(matplotlib 画 ret 的 hist,叠加同均值方差的正态密度),或用 QQ 图,能直观看到厚尾偏离。

Q:需要付费吗?

A:单只标的 500 根日线在免费额度内即可试;多标的/长历史批量需 Starter 及以上,详见 AlphaFeed 定价页。

小结

分析收益率分布的核心结论是:股票收益不是正态分布,而是尖峰厚尾、常带偏度。这意味着基于正态的风险度量会低估极端风险。AlphaFeed 提供干净的前复权日线,让你几行算出均值/波动/偏度/峰度看清真相——记得确认峰度口径、注意极端值敏感,别再默认正态。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 为什么会有这个问题 / 传统做法的痛点
  • 分步骤解决(每步配可运行代码)
    • 第 1 步:取复权日线并算日收益率
    • 第 2 步:计算分布特征
    • 第 3 步:多标的对比
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档