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')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449610.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Duplicate entry ‘XXX‘ for key

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff1a;Duplicate entry XXX for key 意思是說有唯一約束&#xff0c;所以不能重復。 而我的情況是&#xff0c;有兩個表…

list c++template

以一個現成的模板實現了線性表的順序結構實現&#xff0c;VC6.0調試OK 請大家以開源的方式來完善這個算法 &#xff0c;以跟貼方式來添加代碼 請大家往這個下面繼續添加完整的可以運行的線性表的順序結構實現代碼 /* 線性表的順序結構實現&#xff0c;數組C實現法&#xff0c;V…

聊聊composer.lock

composer.lock 即鎖定文件 其中會存在項目中所有的依賴包&#xff0c;方便協同合作時都得到同樣的以來版本 composer install 命令從當前目錄讀取 composer.json 文件&#xff0c;處理依賴關系&#xff0c;并把依賴安裝到 vendor 目錄下。 如果當前目錄下存在 composer.lock 文…

如何保證MongoDB的安全性?

上周寫了個簡短的新聞《MongoDB裸奔&#xff0c;2億國人求職簡歷泄漏&#xff01;》&#xff1a; 根據安全站點HackenProof的報告&#xff0c;由于MongoDB數據庫沒有采取任何安全保護措施&#xff0c;導致共計202,730,434份國人求職簡歷泄漏。然后很多人評論說MongoDB躺槍了。 …

LXC是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。Linux Container容器是一種內核虛擬化技術&#xff0c;可以提供輕量級的虛擬化&#xff0c;以便隔離進程和資源。LXC為Linux Container的簡…

C++ 標準庫 vector list map使用方法

[cpp] view plaincopyList&#xff08;鏈表&#xff09; List將元素按順序儲存在鏈表中. 與 向量(vectors)相比, 它允許快速的插入和刪除&#xff0c;但是隨機訪問卻比較慢.list對象函數 assign() 給list賦值 back() 返回最后一個元素 begin() 返回指向第一個元素的迭代器…

導航守衛

導航守衛 to 準備跳轉到哪個頁面 from 從哪個頁面中離開 next 函數 全局守衛 router.beforeEach((to,from,next) > {if(to.path /login || to.path /register){    next();}else{    alert(先登錄)    next(/login)} }) 組件守衛 data () {  return{   …

Django中使用Pagination的分頁范例源碼

將做工程過程重要的內容做個珍藏&#xff0c;下面代碼內容是關于Django中使用Pagination的分頁范例的代碼。 from django.core.paginator import Paginatorobjects [john, paul, george, ringo]p Paginator(objects, 2) p.count4p.num_pages2p.page_range[1, 2] page1 p.pag…

Docker:集裝箱式“運輸”在軟件上的實現

Docker是由PaaS提供商dotCloud在2013年年初創建的一款開源應用引擎&#xff0c;Docker可以自動將任何應用打包成輕量、可移植、自包涵的容器引擎。開發者構建的應用可以一次構建全平臺運行&#xff0c;包括本地開發機器&#xff0c;生產環境&#xff0c;虛擬機和云等。 Docker基…

CAMP選股

挑選五只股票&#xff1a;萬科A、中國平安、貴州茅臺、萬華化學和科大訊飛&#xff0c;然后我們以滬深300作為市場基準。import pandas as pd import tushare as ts # 獲取數據 pro ts.pro_api() wanke pro.daily(ts_code000002.SZ, start_date20170101) pingan pro.daily(t…

大二下周總結(三)

記錄時間第三周所花時間&#xff08;包括上課&#xff09;13h代碼行500博客量2所了解到的知識點html java-script java本周用在練習代碼的時間自己感覺還可以&#xff0c;由于在第二周課堂練習后覺得自己有許多不足&#xff0c;所以有了必須奮進的壓力。 除了編寫代碼能力的提高…

C讀寫ini文件

/* read/write ini file with c function file testini.c chinayaosir blog: http://blog.csdn.net/chinayaosir connect.ini [database] 此程序有些BUG 當ini文件不存在時&#xff0c;第一次建立connect.ini文件時&#xff0c; 在[database]前面會多一個空格. */ #include…

包含天,時,分,秒的倒計時

這個很基礎的東西寫的過程中出了很多小的錯誤&#xff0c;在此記錄一下。 原生的js。 結構&#xff1a; <p id"time"></p> js: <script>  var start new Date().getTime(); // 獲取開始時間  var end new Dat…

計算相關度

# 使用numpy import numpy as np R [0.01, 0.05, 0.02, -0.03] var1 np.var(R) std1 np.std(R) # # 使用pandas import pandas as pd R pd.Series([0.01, 0.05, 0.02, -0.03]) var2 R.var() std2 R.std() import pandas as pd import tushare as ts pro ts.pro_api() w…

如何使用Dockerfile構建鏡像

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Dockfile是一種被Docker程序解釋的腳本&#xff0c;Dockerfile由一條一條的指令組成&#xff0c;每條指令對應Linux下面的一條命令。Doc…

今時今日,C還適合當下之所需么?

本文來源于我在InfoQ中文站翻譯的文章&#xff0c;原文地址是&#xff1a;http://www.infoq.com/cn/news/2013/01/C-Language 來自Couchbase的Damien Katz認為C依然是非常適合于后端編程的一門語言&#xff0c;然而有的開發者則覺得C有太多的瑕疵&#xff0c;他們支持C或是Java…

《吳軍.科技史綱60講》摘錄

本文由Markdown語法編輯器編輯完成&#xff0e; 《科技史綱60講》是吳軍老師最新開設的專欄名稱&#xff0c;該專欄主要是講解人類文明和科技發展史。吳軍老師在專欄的發刊詞《歷史總在重演&#xff0c;科技永遠向前》中提到&#xff0c;能量和信息是貫穿人類文明發展的兩條線索…

API Gateway——KONG簡單入門

一、簡介 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Kong&#xff0c;是由Mashape公司開源的&#xff0c;基于Nginx的API gateway。 二、特點 可擴展&#xff1a;支持分布式 模塊化…

小程序 公眾號/h5相互跳轉-webview

小程序與h5的跳轉 前提小程序管理后臺配置域名白名單&#xff0c;并且h5頁面是嵌在小程序里面&#xff08;相互跳的前提條件&#xff09; 在業務域名中設置好訪問的h5地址 微信官方web-view 介紹地址 https://developers.weixin.qq.com/miniprogram/dev/component/web-view.ht…

十、eclipse快捷鍵大全

eclipse快捷鍵大全轉載于:https://www.cnblogs.com/zheaven/p/10541531.html