代码用于 financial asset pricing 课程,三因子模型可见其他博文。
主要参考了这篇博客https://blog.csdn.net/weixin_42152885/article/details/80239226
#载入股指数据
import tushare as ts
mydf_sz = ts.get_hist_data('sz',start='2005-01-01',end='2019-5-7')
mydf_sh = ts.get_hist_data('sh',start='2005-01-01',end='2019-5-7')
mydf_sh_md = ts.get_hist_data('000002',start='2005-01-01',end='2019-5-7')
mydf_sh_md.head()
import pandas as pd
sh_md_merge = pd.merge(pd.DataFrame(mydf_sh.p_change),
pd.DataFrame(mydf_sh_md.p_change),
left_index=True,right_index=True,how='inner')
#计算日无风险利率
Rf_annual=0.0385 #以2017年中国一年期的国债利率为无风险利率
Rf_daily=(1+Rf_annual)**(1/365)-1 #年利率转化为日利率
#计算风险溢价:Ri-Rf
risk_premium=sh_md_merge-Rf_daily;
risk_premium.head()
#画出两个风险溢价的散点图,查看相关性
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
plt.scatter(risk_premium.values[:,0],risk_premium.values[:,1])
plt.show()
sh_md_merge.info()
##利用最小二乘法进行线性回归,拟合CAPM模型
import statsmodels.api as sm
md_capm=sm.OLS(risk_premium.p_change_y[1:],sm.add_constant(risk_premium.p_change_x[1:]))
result=md_capm.fit()
print(result.summary())
# plt.title('wanke')
plt.plot(mydf_sh_md.index.get_level_values(0).values[1:], risk_premium.p_change_y[1:])
plt.plot(mydf_sh_md.index.get_level_values(0).values[1:], risk_premium.p_change_x[1:])
# plt.legend(['wanke','Rp','SML'])
plt.show()