tushare写三因子模型
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写三因子模型相关推荐
- python量化:如何利用tushare构造FF三因子模型?
Python量化:如何利用tushare构造FF三因子模型? FF三因子模型介绍 代码实现 从tushare调取数据 利用数据构建因子 总结 笔者是一枚大二菜狗,最近刚上完学院开的python金融量化 ...
- 使用tushare社区实现简单的三因子模型
文章目录 一.关于Tushare 二.三因子模型 三.过程步骤 1.变量数据的选取 2.因子的计算方法 3.三因子模型回归选股 总结 最近在学习金融量化分析,找了一些网络接口都不太好用,昨天朋友推荐了 ...
- Fama-French 三因子模型
概述 自提出CAPM模型以后,不断有学者对其进行实证验证和应用.有证据表明,市场风险溢酬因子不能充分解释个别风险资产的收益率,因此学者们不断探寻影响资产定价的其它因子. Fama和French于199 ...
- Python量化交易06——Fama-French三因子模型(Rmt,SMB,HML)
参考书目:深入浅出Python量化交易实战 本次带来的是著名的获得了诺贝尔奖的三因子模型. 因子模型介绍 Fama和French从可以解释股票收益率的众多因素中提取出了三个重要的影响因子,即市场风险溢 ...
- python量化策略——Fama-French三因子模型
介绍:Fama-French三因子模型,是Fama和French 1992年对美国股票市场决定不同股票回报率差异的因素的研究发现,股票的市场的beta值不能解释不同股票回报率的差异,而上市公司的市值. ...
- Fama-French三因子模型
1,Fama-French三因子模型的由来 首先,马科维茨1952年发表了<投资组合选择>,开创了现代投资组合理论.他提出了"均值-方差"模型,认为要想使投资者的效用达 ...
- 一文教你看懂Fama-French三因子模型
Fama-French三因子模型概述 Fama-French三因子模型(Fama-French 3-factor model,简称FF3) Fama和French 1992年对美国股票市场决定不同股票 ...
- 数据分析---Fama-French三因子模型
大家好,今天带给大家一篇金融模型方面的python应用文章,在这篇文章中将会给大家介绍pandas和statsmodels.api,此外还会介绍Fama-French三因子模型的理论知识. 目录 Fa ...
- 【量化】通过Fama-French三因子模型选股,收益能达到多少?
作者:幻好 来源: 恒生LIGHT云社区 Fama-French三因子模型 基本概念 Fama和French 1993年指出可以建立一个三因子模型来解释股票 回报率 .模型认为,一个 投资组合 (包括 ...
最新文章
- PHP中session_register函数详解用法
- 配置Windows Server 2003 的RADIUS Server的方法
- Android之对Volley网络框架的一些理解
- 10、ctemplate文档,简记(3)
- Struts(十):OGNL表达式(一)
- 【Pthon入门学习】多级菜单小例子
- [云炬创业管理笔记]第五章打磨最有效的商业模式测试5
- python装饰器使用多吗_对于Python装饰器使用的一些建议
- 电脑复制粘贴_手机扫一扫,现实物体隔空复制粘贴进电脑!北大校友的AI新研究,现在变成AR酷炫应用...
- f12 卡 谷歌浏览器_抢券第二课:利用浏览器F12获取优惠券请求链接
- centos7 mysql还原dmp_Linux平台下RMAN异机恢复总结
- dio设置自定义post请求_基于dio库封装flutter项目的标准网络框架
- loadrunner-4-4事务摘要分析
- eeglab和matlab,哪位大神会eeglab
- Android 查看是否支持指定解码器(H265)
- 存储程序式计算机特征,冯.诺依曼机模型是以运算器为中心的存储程序式的计算机模型,它由五大部分构成,即运算器、控制器、存储器、输入设备和输出设备...
- CCD相机参数基本知识
- 计算机图形学课程设计内容及要求
- markdown提示错误HTML Rendering Error: An error occurred with the HTML rendering component
- MIT团队开发用脑电波和手势控制机器人的系统