🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

练习

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

问题描述

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

依赖数据

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)
  1. 绘制组合的滚动60日夏普比率(使用pyfolio.plot_rolling_sharpe)
  1. 生成累积收益对比图(使用pyfolio.plot_rolling_returns)

依赖数据

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. 所有收益率数据均已进行空值处理
  1. 基准数据与组合数据已做日期对齐
  1. pyfolio绘图函数需要matplotlib的Axes对象作为参数
  1. 注意处理日期索引的时区问题(如有必要使用tz_localize)