hello,我是毛豆。本系列用最精简的代码和案例带你快速入门量化,只讲最干的干货,想要学习量化又不知道该如何上手的小伙伴赶紧看过来!

本期内容将介绍资本资产定价模型。

资本资产定价模型(Capital Asset Pricing Model 简称CAPM),是在资产组合理论的基础上发展起来的,是现代金融市场价格理论的支柱。主要研究证券市场中资产的预期收益率与风险资产之间的关系,以及均衡价格是如何形成的。CAPM是一个单一指数模型,认为一个资产的预期收益率与衡量该资产风险的一个尺度β值之间存在正相关关系。

当资本市场达到均衡时,风险的边际价格是不变的,任何改变市场组合的投资所带来的边际效果是相同的,即增加一个单位的风险所得到的补偿是相同的。按照β的定义,代入均衡的资本市场条件下,得到资本资产定价模型:

E(ri)=rf+βim(E(rm)-rf)

E(ri):资产i的预期回报率

rf:无风险利率

βim:资产i的β系数,即资产i的系统系风险

E(rm):市场m的预期回报率

E(rm)-rf:市场的风险溢价

资本资产定价模型的说明如下:1.单个证券的期望收益率由两个部分组成,无风险利率以及对所承担风险的补偿-风险溢价。2.风险溢价的大小取决于β值的大小。β值越高,表明单个证券的风险越高,所得到的补偿也就越高。3. β度量的是单个证券的系统风险,非系统性风险没有风险补偿。

CAPM给出了一个非常简单的结论:只有一种原因会使投资者得到更高回报,那就是投资高风险的股票。CAPM不是一个完美的模型,但它提供了一个可以衡量风险大小的模型,来帮助投资者决定所得到的额外回报是否与当中的风险相匹配。

下面我们来看看如何用python构建CAPM模型。毛豆在每周末都会更新这个系列,建议大家收藏起来方便学习。

构建CAPM模型

首先导入相关的包,并认证Tushare Pro账号。

import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
import scipy.stats as stats

pro = ts.pro_api(&39;your token&39;)

获取今年以来的沪深300指数数据,并计算收益率:

df1=ts.get_k_data(&39;hs300&39;,start=&39;2023-01-01&39;,end=&39;2023-06-02&39;)沪深300
df1[&39;lagclose&39;]=df1.close.shift(1)
df1[&39;mktRet&39;]=(df1[&39;close&39;]-df1[&39;lagclose&39;])/df1[&39;lagclose&39;]
df1.tail()

返回如下:

以东方财富(300059)为例,获取今年以来的行情数据,并计算收益率:

df2=ts.get_k_data(&39;300059&39;,start=&39;2023-01-01&39;,end=&39;2023-06-02&39;)东方财富
df2[&39;lagclose&39;]=df2[&39;close&39;].shift(1)
df2[&39;dcRet&39;]=(df2[&39;close&39;]-df2[&39;lagclose&39;])/df2[&39;lagclose&39;]
df2.tail()

返回如下:

合并两组收益率:

合并两组收益率
df_mktRet=df1[[&39;date&39;,&39;mktRet&39;]].dropna()
df_dcRet=df2[[&39;date&39;,&39;dcRet&39;]].dropna()
Ret=pd.merge(df_mktRet,df_dcRet,on=&39;date&39;,how=&39;inner&39;)
Ret.tail()

绘制收益率散点图:

解决中文乱码
plt.rcParams[&39;font.sans-serif&39;]=[&39;Arial Unicode MS&39;]用于mac
plt.rcParams[&39;font.sans-serif&39;]=[&39;SimHei&39;]用于windows
plt.rcParams[&39;axes.unicode_minus&39;] = False

plt.scatter(Ret[&39;dcRet&39;],Ret[&39;mktRet&39;])
plt.title(&39;东方财富收益率与沪深300收益率散点图&39;)
plt.xlabel(&39;东方财富收益率&39;)
plt.ylabel(&39;沪深300收益率&39;)
plt.savefig(&39;fig1.png&39;,dpi=400,bbox_inches=&39;tight&39;)

返回如下:

计算无风险利率,无风险收益率是指将资金投资于某一项没有任何风险的投资对象而能得到的利息率,可以选用短期国债利率作为无风险利率。

 以国债年化利率3.6%计算无风险收益率
rf=1.036**(1/360)-1
rf

用上一节学习到的线性回归来拟合CAPM模型:

 用简单线性回归ols拟合CAPM模型
model=sm.OLS((Ret[&39;dcRet&39;]-rf),sm.add_constant(Ret[&39;mktRet&39;]-rf))
result=model.fit()
result.summary()

返回如下:

结果表明东方财富股票的β系数为2.07,即市场收益率每波动1%,该股收益率就会波动2.07%。对于投资者而言,在市场价格下降的时候,他们可以投资于β值较低的股票,而当市场上升的时候,他们则可投资β值较高的股票上。

以上是今天的全部干货内容,毛豆会在每周末更新这个系列,也会在每个交易日继续和大家分享旋风冲锋量化策略的实盘情况,欢迎大家点赞关注。