查看全集:💎Quantopia量化分析56讲
当投资组合充分分散时,只有系统性风险需要补偿:
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}')
通过优化算法寻找最优投资组合:
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)]
资本市场线的斜率即最大夏普比率:
def sharpe_ratio(returns, rf):
excess = returns - rf
return excess.mean() / excess.std()
APT基本公式:
其中:
表示资产i的预期收益率
表示无风险利率
表示资产i对第j个因子的敏感度
表示第j个因子的风险溢价
表示模型中包含的因子数量
分两步估计因子风险溢价:
# 因子数据准备
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()
特征 | CAPM | APT |
因子数量 | 单一市场因子 | 多个宏观因子 |
假设条件 | 较多 | 较少 |
数据需求 | 较低 | 较高 |
实践应用 | 简单易用 | 需因子选择 |
# 练习参考答案
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)
通过本教程,读者可以系统掌握资产定价的核心模型,理解市场风险定价机制,并具备实际建模分析能力。建议通过练习巩固知识,并持续关注最新研究进展。