一、基础概念与CAPM模型#
1.1 风险类型解析#
-
系统性风险:影响整个市场的风险(如利率变化、经济衰退),无法通过分散投资消除
-
特异性风险:单个公司特有的风险(如高管变动、产品问题),可通过分散投资降低
1.2 风险溢价机制#
当投资组合充分分散时,只有系统性风险需要补偿:
1.3 CAPM核心公式#
-
:资产i的预期收益
-
:无风险利率
-
:资产的系统风险系数
-
:市场组合预期收益
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基本公式:
其中:
表示资产i的预期收益率
表示无风险利率
表示资产i对第j个因子的敏感度
表示第j个因子的风险溢价
表示模型中包含的因子数量
3.2 Fama-MacBeth回归#
分两步估计因子风险溢价:
-
时间序列回归估计因子载荷
-
横截面回归估计风险溢价
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对比#
| 特征 | CAPM | APT |
|---|---|---|
| 因子数量 | 单一市场因子 | 多个宏观因子 |
| 假设条件 | 较多 | 较少 |
| 数据需求 | 较低 | 较高 |
| 实践应用 | 简单易用 | 需因子选择 |
4.3 实战练习#
-
使用yfinance获取特斯拉(TSLA)过去3年数据
-
计算其相对于NASDAQ指数(^IXIC)的Beta值
-
比较实际收益与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)五、注意事项与更新#
-
市场数据接口已更新为yfinance
-
实际应用需考虑交易成本与市场摩擦
-
定期检查因子有效性(每季度或半年)
-
结合基本面分析验证模型结果
通过本教程,读者可以系统掌握资产定价的核心模型,理解市场风险定价机制,并具备实际建模分析能力。建议通过练习巩固知识,并持续关注最新研究进展。