51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

请用Python(pandas)实现计算股票组合的夏普比率,假设输入是股票日收益率数据(DataFrame),包含多个股票的日收益率列,以及无风险利率(如1年期国债收益率),请解释计算步骤并给出代码示例。

招商证券研究发展中心研究助理岗实习生难度:中等

答案

1) 【一句话结论】

夏普比率衡量投资组合在承担单位风险下获得的超额收益,计算需先求组合日收益率、减去无风险利率得到超额收益,再计算超额收益的均值和标准差,公式为(组合平均超额收益)/(组合收益率的标准差)。

2) 【原理/概念讲解】

夏普比率(Sharpe Ratio)是衡量投资组合风险调整后收益效率的核心指标,核心逻辑是“收益与风险的权衡”。公式为:
[ \text{夏普比率} = \frac{R_p - R_f}{\sigma_p} ]
其中,(R_p) 是投资组合的日收益率均值,(R_f) 是无风险利率(如1年期国债收益率),(\sigma_p) 是组合日收益率的样本标准差(衡量收益波动性/风险)。

类比:就像“每跑1公里消耗的卡路里”,夏普比率是“每承担1单位风险获得的超额收益”,能更客观比较不同组合的收益效率(比如基金、股票组合)。

3) 【对比与适用场景】

指标定义计算方式适用场景注意点
夏普比率风险调整后超额收益(组合均值 - 无风险利率)/标准差比较不同组合的收益效率(如基金、股票组合)需匹配无风险利率的时点(如日利率对应日数据)
特雷诺比率基于贝塔的风险调整收益(组合均值 - 无风险利率)/贝塔侧重系统风险(贝塔)的影响需已知市场指数收益率
詹森Alpha超额收益的绝对值组合均值 - [无风险利率 + 贝塔×市场超额收益]衡量组合是否跑赢市场(超越贝塔贡献)需市场指数收益率

4) 【示例】

假设输入数据:

  • DataFrame df 包含列:'stock1', 'stock2', 'stock3'(各股票日收益率),以及 'risk_free'(无风险利率,日值)。
  • 组合权重:等权重(1/3)。

计算步骤(伪代码):

import pandas as pd

# 假设数据(日收益率)
data = {
    'stock1': [0.01, -0.02, 0.03],  # 日收益率
    'stock2': [0.005, 0.01, -0.01],
    'stock3': [-0.01, 0.02, 0.00],
    'risk_free': [0.002, 0.002, 0.002]  # 无风险利率(日值)
}
df = pd.DataFrame(data)

# 1. 计算组合日收益率(等权重加权)
portfolio_return = (df[['stock1', 'stock2', 'stock3']].sum(axis=1)) / 3

# 2. 计算平均超额收益(组合均值 - 无风险利率均值)
avg_excess = portfolio_return.mean() - df['risk_free'].mean()

# 3. 计算组合收益率的标准差(波动率)
std_dev = portfolio_return.std()

# 4. 计算夏普比率(日数据,若需年化乘以√252)
sharpe_ratio = avg_excess / std_dev
print(f"夏普比率: {sharpe_ratio:.4f}")

5) 【面试口播版答案】

“夏普比率是衡量投资组合风险调整后收益的指标,核心公式是(组合平均日收益率减去无风险利率)除以组合日收益率的标准差。计算步骤第一步,先计算组合日收益率,比如用等权重加权各股票日收益率,得到组合的每日收益;第二步,计算这个组合收益率的平均值,然后减去无风险利率(比如1年期国债的日收益率),得到超额收益的均值;第三步,计算组合收益率的样本标准差,即波动率;最后用超额收益均值除以标准差,就是夏普比率。比如假设有一个包含三只股票的组合,各股票日收益率和1年期国债日利率,通过pandas计算组合收益,再按上述步骤算出夏普比率,就能评估这个组合的收益效率。”

6) 【追问清单】

  • 如何处理数据中的缺失值?
    回答要点:通常用前向填充(df.fillna(method='ffill'))或均值填充,避免计算时出错。
  • 如果组合权重不是等权重,如何调整计算?
    回答要点:用权重列加权计算组合收益率,即 portfolio_return = df[stock_cols] * weight_vector.sum(axis=1),再按上述步骤计算。
  • 夏普比率是否需要年化?为什么?
    回答要点:通常需要年化(乘以√252),因为日数据计算的是日夏普比率,年化后更直观比较不同时间跨度的组合。
  • 无风险利率的时点是否需要与收益率数据匹配?
    回答要点:必须匹配(如日收益率用日无风险利率),否则会导致超额收益计算偏差。
  • 如果组合收益率波动很大(标准差很大),夏普比率会很低,如何解释?
    回答要点:说明组合风险高,收益的稳定性差,即使收益高,但风险过高,效率低。

7) 【常见坑/雷区】

  • 忽略无风险利率的时点匹配:比如用月无风险利率计算日收益率,导致超额收益计算错误。
  • 标准差计算错误(用总体标准差而非样本标准差):样本标准差分母为(n-1),总体为(n),会导致结果偏小或偏大。
  • 组合收益率计算错误(未加权或权重错误):比如直接求均值而非加权,导致结果偏差。
  • 夏普比率未年化:日数据直接计算,未乘以√252,导致结果与市场标准不一致。
  • 忽略数据的时间区间一致性:比如计算某年数据,但无风险利率用了不同年份的值,导致结果无效。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1