练习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基准数据,完成以下任务:
-
计算组合与基准的滚动60日贝塔系数(使用pyfolio.plot_rolling_beta)
-
绘制组合的滚动60日夏普比率(使用pyfolio.plot_rolling_sharpe)
-
生成累积收益对比图(使用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]补充说明:#
-
所有收益率数据均已进行空值处理
-
基准数据与组合数据已做日期对齐
-
pyfolio绘图函数需要matplotlib的Axes对象作为参数
-
注意处理日期索引的时区问题(如有必要使用tz_localize)