CAPM模型经历了大量的实证和应用之后,有证据表明,市场风险溢酬并不能充分解释个别风险资产的收益率。于是很多研究者开始探索其他的因素,比如公司市值、PE、杠杆比例、账面市值比等。Fama和French两个人对于各种因素进行了全面的组合分析,当单独使用Beta或者用Beta分别与其他几个因子相结合时,Beta的解释能力很弱;市值、PE(市盈率)、杠杆比例、BM(账面市值比,PB的倒数)单独来用时,对于收益率的解释能力都很强,但是组合起来时,市值、BM会弱化杠杆比例和PE的解释能力。后来Fama和French两人提取了3个重要因子:市场风险溢酬因子、市值因子和账面市值比因子,以收益率作为因变量构建了一个类似CAPM的线性模型,即著名的三因子模型。
import tushare as ts
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
import datetime
import pandas as pd
sns.set()
mpl.rcParams['font.sans-serif'] = 'WenQuanYi Micro Hei'
pro = ts.pro_api()def cal_smb_hml(df):#划分大小市值公司df['SB'] = df['circ_mv'].map(lambda x: 'B' if x >= df['circ_mv'].median() else 'S')#求账面市值比:PB的倒数df['BM'] = 1/df['pb']#划分高中低账面市值比公司border_down,border_up = df['BM'].quantile([0.3,0.7])border_down,border_updf['HML'] = df['BM'].map(lambda x: 'H' if x >= border_up else 'M')df['HML'] = df.apply(lambda row:'L' if row['BM'] <= border_down else row['HML'],axis = 1)#组合划分为6组df_SL = df.query('(SB=="S") & (HML == "L")')df_SM = df.query('(SB=="S") & (HML == "M")')df_SH = df.query('(SB=="S") & (HML == "H")')df_BL = df.query('(SB=="B") & (HML == "L")')df_BM = df.query('(SB=="B") & (HML == "M")')df_BH = df.query('(SB=="B") & (HML == "H")')#计算各组收益率R_SL = (df_SL['pct_chg'] * df_SL['circ_mv'] / 100).sum() / df_SL['circ_mv'].sum()R_SM = (df_SM['pct_chg'] * df_SM['circ_mv'] / 100).sum() / df_SM['circ_mv'].sum()R_SH = (df_SH['pct_chg'] * df_SH['circ_mv'] / 100).sum() / df_SH['circ_mv'].sum()R_BL = (df_BL['pct_chg'] * df_BL['circ_mv'] / 100).sum() / df_BL['circ_mv'].sum()R_BM = (df_BM['pct_chg'] * df_BM['circ_mv'] / 100).sum() / df_BM['circ_mv'].sum()R_BH = (df_BH['pct_chg'] * df_BH['circ_mv'] / 100).sum() / df_BH['circ_mv'].sum()#计算SMB,HML并返回smb = (R_SL + R_SM + R_SH - R_BL -R_BM - R_BH) / 3hml = (R_SH + R_BH - R_SL - R_BL ) / 3return smb, hmldata = []
df_cal = pro.trade_cal(start_date = '20170101',end_date = '20190110')
df_cal = df_cal.query('(exchange=="SSE") & (is_open==1)')
for date in df_cal.cal_date:df_daily = pro.daily(trade_date=date)df_basic = pro.daily_basic(trade_date=date)df = pd.merge(df_daily,df_basic,on='ts_code',how='inner')smb,hml = cal_smb_hml(df)data.append([date,smb,hml])print(date,smb,hml)df_tfm = pd.DataFrame(data,columns=['trade_date','SMB','HML'])
df_tfm['trade_date'] = pd.to_datetime(df_tfm.trade_date)
df_tfm = df_tfm.set_index('trade_date')
df_tfm.to_csv('df_three_factor_model.csv')
df_tfm.head()
#获取数据
wanke = pro.daily(ts_code='000002.SZ',start_date='20170101',end_date = '20190110')
pingan = pro.daily(ts_code='601318.SH',start_date='20170101',end_date = '20190110')
maotai = pro.daily(ts_code='600519.SH',start_date='20170101',end_date = '20190110')
wanhua = pro.daily(ts_code='002415.SZ',start_date='20170101',end_date = '20190110')
keda = pro.daily(ts_code='002230.SZ',start_date='20170101',end_date = '20190110')
gzA = pro.index_daily(ts_code='399317.SZ',start_date='20170101',end_date = '20190110')#仅保留收益率数据,且用日期作为index
#然后按照日期排序(增序)
stock_list = [wanke,pingan,maotai,wanhua,keda,gzA]
for stock in stock_list:stock.index = pd.to_datetime(stock.trade_date)
df_stock = pd.concat([stock.pct_chg / 100 for stock in stock_list],axis=1)
df_stock.columns = ['wanke','pingan','maotai','wanhua','keada','gzA']
df_stock = df_stock.sort_index(ascending=True)
df_stock.head()df = pd.merge(df_stock,df_tfm,left_index=True,right_index=True,how='inner')
df = df.fillna(0)
#无风险收益率,以年化3.2%计算
rf = 1.032**(1/360)-1
df= df-rf
df2 = df.copy()
df =df['20180101':]
df.head()
sns.heatmap(df.corr(),cmap='bwr')
plt.figure(figsize=(10,5))
for col in df.columns:plt.plot((df[col]+1).cumprod()-1,label=col)
plt.title('累计收益率时序图(2019至今)',fontsize=20)
plt.legend();
import statsmodels.api as sm
stock_names = {    'wanke':'万科A','pingan':'中国平安','maotai':'贵州茅台','wanhua':'万华化学','keda':'科大讯飞',
}
for stock in ['wanke','pingan','maotai','wanhua','keda']:model = sm.OLS(df[stock],sm.add_constant(df[['gzA','SMB','HML']].values))result = model.fit()print(stock_names[stock] + '\n')print(result.summary())print('\n\n')

tushare写三因子模型相关推荐

  1. python量化:如何利用tushare构造FF三因子模型?

    Python量化:如何利用tushare构造FF三因子模型? FF三因子模型介绍 代码实现 从tushare调取数据 利用数据构建因子 总结 笔者是一枚大二菜狗,最近刚上完学院开的python金融量化 ...

  2. 使用tushare社区实现简单的三因子模型

    文章目录 一.关于Tushare 二.三因子模型 三.过程步骤 1.变量数据的选取 2.因子的计算方法 3.三因子模型回归选股 总结 最近在学习金融量化分析,找了一些网络接口都不太好用,昨天朋友推荐了 ...

  3. Fama-French 三因子模型

    概述 自提出CAPM模型以后,不断有学者对其进行实证验证和应用.有证据表明,市场风险溢酬因子不能充分解释个别风险资产的收益率,因此学者们不断探寻影响资产定价的其它因子. Fama和French于199 ...

  4. Python量化交易06——Fama-French三因子模型(Rmt,SMB,HML)

    参考书目:深入浅出Python量化交易实战 本次带来的是著名的获得了诺贝尔奖的三因子模型. 因子模型介绍 Fama和French从可以解释股票收益率的众多因素中提取出了三个重要的影响因子,即市场风险溢 ...

  5. python量化策略——Fama-French三因子模型

    介绍:Fama-French三因子模型,是Fama和French 1992年对美国股票市场决定不同股票回报率差异的因素的研究发现,股票的市场的beta值不能解释不同股票回报率的差异,而上市公司的市值. ...

  6. Fama-French三因子模型

    1,Fama-French三因子模型的由来 首先,马科维茨1952年发表了<投资组合选择>,开创了现代投资组合理论.他提出了"均值-方差"模型,认为要想使投资者的效用达 ...

  7. 一文教你看懂Fama-French三因子模型

    Fama-French三因子模型概述 Fama-French三因子模型(Fama-French 3-factor model,简称FF3) Fama和French 1992年对美国股票市场决定不同股票 ...

  8. 数据分析---Fama-French三因子模型

    大家好,今天带给大家一篇金融模型方面的python应用文章,在这篇文章中将会给大家介绍pandas和statsmodels.api,此外还会介绍Fama-French三因子模型的理论知识. 目录 Fa ...

  9. 【量化】通过Fama-French三因子模型选股,收益能达到多少?

    作者:幻好 来源: 恒生LIGHT云社区 Fama-French三因子模型 基本概念 Fama和French 1993年指出可以建立一个三因子模型来解释股票 回报率 .模型认为,一个 投资组合 (包括 ...

最新文章

  1. PHP中session_register函数详解用法
  2. 配置Windows Server 2003 的RADIUS Server的方法
  3. Android之对Volley网络框架的一些理解
  4. 10、ctemplate文档,简记(3)
  5. Struts(十):OGNL表达式(一)
  6. 【Pthon入门学习】多级菜单小例子
  7. [云炬创业管理笔记]第五章打磨最有效的商业模式测试5
  8. python装饰器使用多吗_对于Python装饰器使用的一些建议
  9. 电脑复制粘贴_手机扫一扫,现实物体隔空复制粘贴进电脑!北大校友的AI新研究,现在变成AR酷炫应用...
  10. f12 卡 谷歌浏览器_抢券第二课:利用浏览器F12获取优惠券请求链接
  11. centos7 mysql还原dmp_Linux平台下RMAN异机恢复总结
  12. dio设置自定义post请求_基于dio库封装flutter项目的标准网络框架
  13. loadrunner-4-4事务摘要分析
  14. eeglab和matlab,哪位大神会eeglab
  15. Android 查看是否支持指定解码器(H265)
  16. 存储程序式计算机特征,冯.诺依曼机模型是以运算器为中心的存储程序式的计算机模型,它由五大部分构成,即运算器、控制器、存储器、输入设备和输出设备...
  17. CCD相机参数基本知识
  18. 计算机图形学课程设计内容及要求
  19. markdown提示错误HTML Rendering Error: An error occurred with the HTML rendering component
  20. MIT团队开发用脑电波和手势控制机器人的系统

热门文章

  1. Java基础——线程及并发机制
  2. 提高程序员职场价值的10大技巧
  3. 分配内存的方法,需要32位对齐
  4. 我们真的需要统一的编程规范?
  5. 成功人士都是这样逼出来的
  6. 浅谈如何学习linux
  7. Linux rm命令、Linux touch命令、Linux tee命令
  8. GitHub(从安装到使用)
  9. 【C/C++开发】C++11 并发指南二(std::thread 详解)
  10. 列出一个目录中所有文件及大小