CAPM模型的Python版详解

一、CAPM 模型和公式

参考作者:肖睿在量化课堂的文章

CAPM 公式

CAPM 公式是从以上模型框架推导出的数学表达式,它表达了任何风险资产的收益率和市场组合的收益率之间关系。在这个公式中,任何风险资产的收益率都可以被分为两个部分:无风险收益(利率)和风险收益(ββ 收益)。我们先看公式。

定理(CAPM 公式). 对于某一风险资产 S(可以把 SS想象为一种证券),有

其中:
r_{S}是组合 S 的收益变量;
r_{M}是市场组合的收益变量;
− r_{f}是市场的无风险利率;
− \beta _{S}是组合 SS 对于市场风险的敏感度,计算公式为

在现实环境里,我们可以将一个概括市场整体的组合(比如大盘指数)作为市场组合,并以其为基准计算每个风险资产的系统性风险 ββ。这样,我们根据对市场整体趋势的判断以及对风险控制的需要,选择适当的 ββ 进行资产配置。

二、Python 代码实现

以美的股票为例, 按过去两年美的的日收益率(先不考虑分红),当前的合理定价是多少? 以3年期定期存款作为无风险收益率,通过CAPM模型计算美的的合理定价。 P.S: 这里把定价按收益率处理, 没有转换成价格。

#环境&数据准备
import sys as sy
import numpy as np
import pandas as pd
import tushare as ts
import pyecharts as pye
from sklearn import datasets as ds
import matplotlib as mpl
from matplotlib import pyplot as plt
import seaborn as sns
import pyecharts as pye

#读入美的“000333”2017-01-01 到 2018-11-08复权后数据
#美的取了前复权数据
df_000333 = ts.get_h_data('000333', start='2017-01-01', end='2018-11-8') 
#深成指数木有复权一说
df_sz = ts.get_hist_data('sz',start='2017-01-01', end='2018-11-8') 

#数据准备
df_tmp1 = pd.DataFrame()
df_tmp2 = pd.DataFrame()
df_tmp1['rt_000333'] =(df_000333.close.diff(1))/df_000333.close.shift(1)
df_tmp2['rt_sz'] =(df_sz.close.diff(1))/df_sz.close.shift(1)
df_tmp = df_tmp1.join(df_tmp2)
df_tmp = df_tmp.dropna()
del df_tmp1
del df_tmp2


#计算Beta系数
cov_sm = np.cov(df_tmp.rt_000333, df_tmp.rt_sz)[0,1]
var_m = np.var(df_tmp.rt_sz)
Beta = cov_sm/var_m

#下面的例子是为了告诉大家Beta可通过线性回归系数来求得, 效果有一点不一样一样的。
#from scipy import stats
#Beta_ln = stats.linregress(df_tmp.rt_sz,  df_tmp.rt_000333)
#这个算法不是很好, 不应该把SZ的日均收益率转换成年化收益率的,用365天来差分,可能合理一些
Erm = df_tmp.rt_sz.mean()*365  #计算年化市场期望收益率
Rf = 0.015 #央行一年期定存利率, 也可也换成10年期债券, 其实每个人眼里的无风险收益的欧是不一样的。

#根据公司Ers = rf + Beta*(Erm - rf)
Ers = Rf + Beta*(Erm - Rf)

print('Bata = ' + str(Beta))
print('Rf = ' + str(Rf))
print('Erm = ' + str(Erm))
print('Ers = ' + str(Ers))
Bata = 1.0479583979512406
Rf = 0.015
Erm = 0.16496466600799972
Ers = 0.1721567311390363

 

参考文章:

https://xueqiu.com/4357289637/42671711

  • 3
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值