跳到主内容
研究主线资产定价与组合构建 · 第30–36讲4/7 · 配套练习模块导览 →
练习

第33讲:投资组合分析 (Portfolio Analysis) · 练习

构造等权组合并计算年化波动,绘制滚动 Beta 与夏普指标,再识别最大回撤区间和数据对齐问题。

← 返回本讲讲义
完成状态保存在当前浏览器,可随时取消。

练习1:计算投资组合年化波动率#

问题描述#

使用yfinance获取2014年至2015年期间苹果公司(AAPL)、微软(MSFT)和标普500指数(SPY)的收盘价数据,构建等权重投资组合,计算该组合的年化波动率(使用empyrical库实现)

依赖数据#

code
import yfinance as yf
import pandas as pd
from empyrical import annual_volatility

# 数据获取
start_date = '2014-01-01'
end_date = '2015-01-01'

# 获取三组资产数据
assets = yf.download(['AAPL', 'MSFT', 'SPY'],
                    start=start_date,
                    end=end_date)['Close']

# 创建投资组合收益率
portfolio_returns = assets[['AAPL', 'MSFT']].pct_change().mean(axis=1).dropna()

练习2:可视化滚动风险指标#

问题描述#

基于上述投资组合收益率数据和标普500基准数据,完成以下任务:

  1. 计算组合与基准的滚动60日贝塔系数(使用pyfolio.plot_rolling_beta)

  2. 绘制组合的滚动60日夏普比率(使用pyfolio.plot_rolling_sharpe)

  3. 生成累积收益对比图(使用pyfolio.plot_rolling_returns)

依赖数据#

code
import yfinance as yf
import pandas as pd
import pyfolio as pf
import matplotlib.pyplot as plt

# 获取基准数据
benchmark = yf.download('SPY',
                       start='2014-01-01',
                       end='2015-01-01')['Close']

# 生成收益率序列
portfolio_returns = assets[['AAPL', 'MSFT']].pct_change().mean(axis=1).dropna()
benchmark_rets = benchmark.pct_change().dropna()

# 统一日期索引
combined = pd.concat([portfolio_returns, benchmark_rets], axis=1).dropna()
portfolio_aligned = combined.iloc[:,0]
benchmark_aligned = combined.iloc[:,1]

补充说明:#

  1. 所有收益率数据均已进行空值处理

  2. 基准数据与组合数据已做日期对齐

  3. pyfolio绘图函数需要matplotlib的Axes对象作为参数

  4. 注意处理日期索引的时区问题(如有必要使用tz_localize)

完成练习后,自评一次

建议先独立作答,再展开参考答案进行核对。