跳到主内容
研究主线因子策略、对冲与尾部风险 · 第37–42讲4/6 · 配套练习模块导览 →
练习

第40讲:为什么要对贝塔和行业暴露进行对冲 I(Why Hedge Beta and Sector Exposures I) · 练习

复现行业组合的市场与行业对冲,验证有效广度公式,并比较个股在各阶段的相关性和残余暴露。

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

基础习题#

习题1:行业组合对冲复现#

问题:使用科技行业ETF(XLK)和医疗行业ETF(XLV),复现行业对冲策略的全过程

依赖数据

code
sector_etf = {'科技': 'XLK', '医疗': 'XLV'}
tickers = ['AAPL', 'MSFT', 'GOOGL', 'JNJ', 'PFE', 'MRK', 'SPY', 'XLK', 'XLV']
start = '2018-01-01'
end = '2020-12-31'

# 数据获取示例
prices = yf.download(tickers, start=start, end=end)['Close']
returns = prices.pct_change().dropna()

习题2:Buckle公式验证#

问题:修改有效广度计算函数,验证当资产间平均相关系数ρ=0时,有效广度等于资产数量N

依赖函数

code
def effective_breadth(N, rho):
    return N / (1 + rho*(N-1))

# 测试用例
test_cases = [(5,0), (10,0), (20,0)]  # 应返回5,10,20

进阶习题#

习题3:个股对冲分析#

问题:计算苹果(AAPL)与微软(MSFT)在不同对冲阶段的相关性变化

依赖数据

code
tickers = ['AAPL', 'MSFT', 'SPY', 'XLK']  # XLK为科技行业ETF
start = '2019-01-01'
end = '2021-12-31'

# 数据准备
prices = yf.download(tickers, start=start, end=end)['Close']
returns = prices.pct_change().dropna()

习题4:动态对冲效果分析#

问题:使用滚动窗口计算动态Beta值,比较静态Beta对冲与动态Beta对冲的效果差异

依赖代码框架

code
window_size = 60  # 滚动窗口长度
dynamic_residuals = pd.DataFrame()

for i in range(window_size, len(returns)):
    # 滚动窗口数据切片
    window_returns = returns.iloc[i-window_size:i]

    # 在此处补充动态Beta计算代码
    # ...

挑战习题#

习题5:多因子风险模型实现#

问题:在行业对冲基础上加入规模因子(SMB)和价值因子(HML),构建多因子对冲模型

依赖数据

code
# 三因子数据获取
ff_factors = yf.download('^SMB ^HML', start=start, end=end)['Close']
merged_returns = pd.concat([returns, ff_factors], axis=1).dropna()

习题6:对冲成本优化模拟#

问题:在考虑交易手续费(0.1%每次调仓)的情况下,优化对冲策略的调仓频率

依赖参数

code
transaction_cost = 0.001  # 单边交易成本
rebalance_freq_options = [5, 10, 20]  # 调仓周期选项(交易日)
initial_capital = 1_000_000  # 初始资金

完成练习后,自评一次

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