欢迎光临
我们一直在努力

计算股票收益率与波动率

计算股票收益率与波动率

问题引入:为什么收益率和波动率是投资决策的「指南针」与「安全气囊」?

假设你已经掌握了数据获取、清洗和时间序列操作技能,面对处理完善的A股历史行情数据,准备开始核心的量化分析。这时,你需要回答几个关键问题:

  • 收益评估:一只股票在过去一年中的整体表现如何?是简单收益率更能反映实际回报,还是对数收益率更适合长期分析?
  • 风险度量:股票价格的波动有多大?日波动率和年化波动率有何区别?如何通过滚动波动率观察风险的变化趋势?
  • 组合构建:多只股票之间的收益率相关性如何?哪些股票可以分散风险,哪些会放大波动?
  • 策略基础:收益率和波动率数据如何为后续的因子计算、策略回测奠定基础?

根据《量化投资:以Python为工具》统计,超过80%的量化策略直接或间接依赖于收益率和波动率指标。但实际应用中常见两大误区:

  • 方法混淆:错误使用简单收益率进行长时间跨度的复利计算,导致收益被高估或低估
  • 口径不一致:未对波动率进行年化处理,导致不同频率数据无法直接比较
  • 核心问题:如何通过Python准确计算股票的各类收益率和波动率指标,并将这些基础指标转化为有实际投资指导意义的分析工具?

    知识铺垫:收益率与波动率的四大核心体系

    2.1 简单收益率 vs 对数收益率:应用场景的本质区别

    收益率类型计算公式金融意义适用场景代码实现
    简单收益率

    R

    t

    =

    P

    t

    P

    t

    1

    P

    t

    1

    R_t = \\frac{P_t – P_{t-1}}{P_{t-1}}

    Rt=Pt1PtPt1

    相邻价格的变化率,反映单期实际盈亏 短期分析、每日盈亏计算、投资者直观理解 df['close'].pct_change()
    对数收益率

    r

    t

    =

    ln

    (

    P

    t

    P

    t

    1

    )

    r_t = \\ln\\left(\\frac{P_t}{P_{t-1}}\\right)

    rt=ln(Pt1Pt)

    连续复利收益率,具有时间可加性和近似正态分布特性 长时间序列分析、投资组合理论、风险模型、衍生品定价 np.log(df['close'] / df['close'].shift(1))

    关键原则:

    • 短期投资(<1个月):简单收益率更直观,直接反映盈亏百分比
    • 长期分析(>1个月):对数收益率更科学,多期总收益等于各期对数收益率之和
    • 统计建模:对数收益率更接近正态分布,便于假设检验和模型构建

    2.2 累计收益率:复利奇迹的数学表达

    累计收益率衡量从投资起始点到当前时点的总回报,有两种等效计算方法:

    计算方法公式特点
    累计简单收益率

    C

    t

    =

    i

    =

    1

    t

    (

    1

    +

    R

    i

    )

    1

    C_t = \\prod_{i=1}^t (1 + R_i) – 1

    Ct=i=1t(1+Ri)1

    直观反映实际复利过程,但计算稍复杂
    累计对数收益率

    c

    t

    =

    i

    =

    1

    t

    r

    i

    c_t = \\sum_{i=1}^t r_i

    ct=i=1tri

    对数收益率之和,数学性质优良,转换后与简单收益率等价

    实践建议:优先使用(1 + 简单收益率).cumprod() – 1计算累计收益率,因其更贴近投资者的实际感受。

    2.3 波动率体系:从日频波动到年化风险

    波动率是收益率标准差的统计度量,金融实践中需根据分析目的选择合适口径:

    波动率类型计算公式金融意义应用场景
    日波动率

    σ

    d

    a

    i

    l

    y

    =

    std

    (

    r

    t

    )

    \\sigma_{daily} = \\text{std}(r_t)

    σdaily=std(rt)

    日收益率的波动程度 日内交易风险监控
    年化波动率

    σ

    a

    n

    n

    u

    a

    l

    =

    σ

    d

    a

    i

    l

    y

    ×

    252

    \\sigma_{annual} = \\sigma_{daily} \\times \\sqrt{252}

    σannual=σdaily×252

    标准化为年度的风险水平,便于跨资产比较 组合风险管理、绩效评估
    滚动波动率

    σ

    r

    o

    l

    l

    i

    n

    g

    (

    t

    )

    =

    std

    (

    r

    t

    w

    +

    1

    :

    t

    )

    ×

    252

    \\sigma_{rolling}(t) = \\text{std}(r_{t-w+1 : t}) \\times \\sqrt{252}

    σrolling(t)=std(rtw+1:t)×252

    动态风险监控,捕捉市场波动率变化 趋势策略、止损设置、风险预警

    关键假设:金融市场一年约有252个交易日(扣除周末和节假日),这是年化计算的基础。

    2.4 收益率相关性:投资组合的「化学键」

    相关系数矩阵是多资产分析的核心工具,其金融意义如下:

    相关系数范围关系强度投资组合意义
    +0.8 ~ +1.0 强正相关 风险高度集中,分散效果差
    +0.3 ~ +0.7 中等正相关 适度分散,但仍受市场共同因素影响
    -0.3 ~ +0.3 弱相关 理想分散标的,能有效降低组合波动
    -0.7 ~ -0.3 中等负相关 对冲潜力,但需注意风险收益平衡

    实践建议:构建投资组合时,优先选择相关系数在0.3以下的股票组合,以实现风险分散最大化。

    数据准备:三只代表性A股的1年历史行情数据

    3.1 股票选择逻辑

    为保证分析的代表性和对比性,选择三只来自不同行业、市值规模的A股:

    股票代码股票名称所属行业市值规模选择理由
    600519.SH 贵州茅台 食品饮料 超大盘 消费龙头,波动相对稳定
    000001.SZ 平安银行 银行 大盘 金融板块代表,低波动特征
    300750.SZ 宁德时代 电力设备 大盘 新能源龙头,高成长高波动

    3.2 数据获取与预处理

    基于Tushare实战技能,获取2025年1月1日至2025年12月31日的日线行情数据,并进行数据清洗:

  • 数据获取:使用Tushare pro.daily()接口,获取三只股票的后复权收盘价
  • 缺失值处理:对停牌日数据采用前向填充,保持时间序列连续性
  • 异常值检测:应用滚动窗口3σ原则,过滤可能的「乌龙指」异常价格
  • 多股票对齐:确保三只股票具有完全相同的交易日索引
  • 3.3 基础数据概览

    通过Python代码输出三只股票的基本统计特征,为后续分析奠定数据基础。

    收益率与波动率实战:四大核心计算与可视化

    4.1 简单收益率与对数收益率对比分析

    计算三只股票的日简单收益率和对数收益率,并通过统计描述和分布图对比差异:

    • 统计对比:均值、标准差、偏度、峰度
    • 数值关系:验证当收益率较小时,简单收益率 ≈ 对数收益率
    • 极端值影响:分析大涨大跌时两种计算方法的差异

    4.2 累计收益率计算与可视化

    分别计算三只股票的累计收益率,并通过图表展示:

    • 累计收益率曲线:直观展示投资回报随时间增长
    • 对比分析:观察不同股票累计收益率的差异和变化趋势
    • 关键时点标记:标注收益率大幅波动的时期

    4.3 波动率计算体系实现

    系统实现三大波动率指标的计算:

    • 日波动率:计算每日收益率的标准差
    • 年化波动率:基于252个交易日的年化处理
    • 滚动波动率:计算20日滚动窗口的年化波动率,观察动态风险变化

    4.4 多股票收益率相关性分析

    构建三只股票收益率的相关系数矩阵,并通过热力图直观展示:

    • 相关性矩阵:计算皮尔逊相关系数
    • 热力图可视化:使用seaborn生成专业热力图
    • 解读分析:识别强相关和弱相关股票对

    结果解读:数据背后的投资逻辑

    5.1 收益率分析:谁是真正的「收益王者」?

    基于计算结果,回答以下问题:

  • 收益水平:哪只股票的简单收益率均值最高?对数收益率均值是否一致?
  • 收益稳定性:哪只股票的收益率标准差最小?其收益分布有何特征?
  • 累计收益表现:从起始点到结束点,哪只股票的累计收益率最高?期间最大回撤如何?
  • 5.2 波动率分析:风险与收益的平衡艺术

    解读波动率数据的投资意义:

  • 风险等级:哪只股票的年化波动率最高?与直观感受是否一致?
  • 动态风险:滚动波动率曲线揭示了哪些市场风险变化规律?
  • 风险收益比:结合收益率数据,计算夏普比率初探(收益率均值/波动率)
  • 5.3 相关性分析:构建分散化组合的线索

    基于相关系数矩阵,提出投资组合建议:

  • 最优分散组合:哪两只股票的相关系数最低?适合作为分散化投资的基础
  • 行业效应:同行业股票(如消费与新能源)是否呈现较高相关性?
  • 对冲潜力:是否存在负相关或接近零相关的股票对?
  • 5.4 方法论验证:理论与实践的一致性

    验证本文学到的理论知识在实际数据中的表现:

  • 简单 vs 对数收益率:当收益率较小时(如<5%),两者差异是否<0.1%?
  • 年化波动率:年化处理后的波动率是否处于合理区间(A股年化波动率通常20%-40%)?
  • 相关性稳定性:不同时间段计算的相关性矩阵是否基本一致?
  • 拓展思考:从基础指标到量化策略的进阶路径

    6.1 进阶指标:夏普比率、信息比率与最大回撤

    在掌握收益率和波动率基础上,可进一步学习:

    • 夏普比率:超额收益与总风险的比率,衡量风险调整后收益
    • 信息比率:主动收益与跟踪误差的比率,评估主动管理能力
    • 最大回撤:投资期间最大可能的亏损幅度,极端风险度量

    6.2 投资组合优化:马科维茨均值-方差模型

    利用收益率、波动率和相关性数据,可进行:

  • 有效前沿计算:寻找给定收益水平下风险最小的组合
  • 最优权重分配:基于风险偏好确定最佳资产配置比例
  • 组合绩效评估:对比不同组合的风险收益特征
  • 6.3 波动率建模:从历史波动率到预测波动率

    波动率分析可进一步深入:

    • GARCH模型:捕捉波动率聚集性和均值回归特性
    • 已实现波动率:基于高频数据的波动率估计方法
    • 波动率曲面:期权市场隐含的未来波动率预期

    6.4 实战应用:从数据分析到策略构建

    将本文学到的技能应用于实际投资场景:

  • 选股策略:基于收益率和波动率特征构建股票筛选规则
  • 组合管理:利用相关性分析动态调整资产配置
  • 风险监控:建立基于滚动波动率的市场风险预警系统
  • 6.5 后续学习路径建议

    完成收益率和波动率基础学习后,推荐以下学习顺序:

  • 技术指标计算:MACD、RSI、布林带等常见技术指标
  • 基本面因子:PE、PB、ROE等基本面指标计算
  • 回测框架:策略回测引擎原理与实现
  • 实盘衔接:交易接口与风险控制系统
  • 核心提醒:收益率和波动率是量化分析的基石,后续所有高级策略都建立在这些基础指标之上。确保完全掌握本内容后,再进入更复杂的因子和策略学习。

    文中源码均可在公众号《量化双码研习社》免费获取~这里专注Python + 量化双码实操,持续更新 A 股数据清洗、策略回测、Tushare 取数、券商量化面试等硬核干货,和千名量化爱好者一起深耕实战、少走弯路! 关注不迷路,后续干货第一时间推送给你 ✨

    赞(0)
    未经允许不得转载:171主机测评 » 计算股票收益率与波动率
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址