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

第30讲:资本资产定价模型与套利定价理论 (CAPM and APT)

对比 CAPM 与 APT 的风险溢价结构,演示 Beta、有效前沿和多因子回归,并说明模型假设与数据限制。

完成状态保存在当前浏览器,可随时取消。

阶段 3 · 研究主线 · 第30–36讲

资产定价与组合构建

本模块要解决

  • 掌握 CAPM/APT、因子风险模型、组合优化与PCA
  • 把预期收益、风险暴露和约束统一到组合构建

研究纪律

  • 优化输入必须做误差和情景敏感度分析
  • PCA与因子暴露必须给出经济解释和漂移监控

一、基础概念与CAPM模型#

1.1 风险类型解析#

  • 系统性风险:影响整个市场的风险(如利率变化、经济衰退),无法通过分散投资消除

  • 特异性风险:单个公司特有的风险(如高管变动、产品问题),可通过分散投资降低

1.2 风险溢价机制#

当投资组合充分分散时,只有系统性风险需要补偿:

预期收益=无风险利率+风险溢价预期收益 = 无风险利率 + 风险溢价

1.3 CAPM核心公式#

E(Ri)=Rf+βi(E(Rm)Rf)E(R_i) = R_f + β_i(E(R_m) - R_f)
  • E(Ri)E(R_i):资产i的预期收益

  • RfR_f:无风险利率

  • βiβ_i:资产的系统风险系数

  • E(Rm)E(R_m):市场组合预期收益

1.4 Beta系数计算实战#

code
import yfinance as yf
import statsmodels.api as sm

# 获取数据
start = '2020-01-01'
end = '2021-01-01'
aapl = yf.download('AAPL', start, end)['Close'].pct_change().dropna()
spy = yf.download('SPY', start, end)['Close'].pct_change().dropna()
risk_free = yf.download('^IRX', start, end)['Close'].iloc[-1]/25200  # 转换为日利率

# 计算超额收益
excess_asset = aapl - risk_free
excess_market = spy - risk_free

# 回归计算Beta
model = sm.OLS(excess_asset, sm.add_constant(excess_market))
results = model.fit()
beta = results.params[1]
print(f'AAPL Beta: {beta:.2f}')

二、CAPM模型进阶应用#

2.1 有效前沿构建#

通过优化算法寻找最优投资组合:

code
import cvxopt as opt

# 生成随机收益数据
np.random.seed(42)
returns = np.random.randn(4, 1000)

# 投资组合优化
n = len(returns)
S = opt.matrix(np.cov(returns))
pbar = opt.matrix(returns.mean(axis=1))

# 约束条件
G = -opt.matrix(np.eye(n))
h = opt.matrix(0.0, (n,1))
A = opt.matrix(1.0, (1,n))
b = opt.matrix(1.0)

# 有效前沿计算
portfolios = [opt.solvers.qp(mu*S, -pbar, G, h, A, b)['x']
             for mu in np.logspace(-3, 3, 50)]

2.2 市场组合与CML线#

资本市场线的斜率即最大夏普比率:

code
def sharpe_ratio(returns, rf):
    excess = returns - rf
    return excess.mean() / excess.std()

三、套利定价理论(APT)解析#

3.1 多因子模型#

APT基本公式:

E(Ri)=Rf+βi1F1+βi2F2+...+βikFkE(R_i) = R_f + \beta_{i1}F_1 + \beta_{i2}F_2 + ... + \beta_{ik}F_k

其中:

E(Ri)E(R_i)表示资产i的预期收益率

RfR_f表示无风险利率

βij\beta_{ij} 表示资产i对第j个因子的敏感度

FjF_j 表示第j个因子的风险溢价

kk 表示模型中包含的因子数量

3.2 Fama-MacBeth回归#

分两步估计因子风险溢价:

  1. 时间序列回归估计因子载荷

  2. 横截面回归估计风险溢价

code
# 因子数据准备
factors = pd.DataFrame({
    'Market': spy,
    'SMB': small_portfolio - big_portfolio,
    'HML': value_portfolio - growth_portfolio
})

# 第一步:时间序列回归
betas = []
for asset in assets:
    model = sm.OLS(asset_returns[asset], sm.add_constant(factors))
    betas.append(model.fit().params[1:])

# 第二步:横截面回归
final_model = sm.OLS(mean_returns, sm.add_constant(pd.DataFrame(betas)))
results = final_model.fit()

四、模型对比与实践应用#

4.1 CAPM vs APT对比#

特征CAPMAPT
因子数量单一市场因子多个宏观因子
假设条件较多较少
数据需求较低较高
实践应用简单易用需因子选择

4.3 实战练习#

  1. 使用yfinance获取特斯拉(TSLA)过去3年数据

  2. 计算其相对于NASDAQ指数(^IXIC)的Beta值

  3. 比较实际收益与CAPM预测收益的差异

code
# 练习参考答案
tsla = yf.download('TSLA', '2020-01-01', '2023-01-01')['Adj Close'].pct_change().dropna()
nasdaq = yf.download('^IXIC', '2020-01-01', '2023-01-01')['Adj Close'].pct_change().dropna()

model = sm.OLS(tsla - risk_free, sm.add_constant(nasdaq - risk_free))
results = model.fit()
beta_tsla = results.params[1]
predicted_return = risk_free + beta_tsla*(nasdaq.mean() - risk_free)

五、注意事项与更新#

  1. 市场数据接口已更新为yfinance

  2. 实际应用需考虑交易成本与市场摩擦

  3. 定期检查因子有效性(每季度或半年)

  4. 结合基本面分析验证模型结果

通过本教程,读者可以系统掌握资产定价的核心模型,理解市场风险定价机制,并具备实际建模分析能力。建议通过练习巩固知识,并持续关注最新研究进展。