tushare ID:470138

1.导入包

import pandas as pd
import numpy as np
import datetime
from datetime import timedelta
from dateutil.relativedelta import *
import time
import math
import tushare as ts
pro = ts.pro_api('****')
from jqdatasdk import *
auth('****','****')

2.利用Tushare获取贵州茅台收益率序列

df=pro.monthly(ts_code='600519.SH',start_date='20171201',end_date='20201231')
rf=pd.read_excel("risk_free.xlsx",index_col="date")
df=df.sort_values('trade_date')
#计算贵州茅台的收益率
df['ret']=np.log(df['close']/df['close'].shift(1))
df=df.drop(36,axis=0)
df.head()
r=df['ret'].reset_index(drop=True)
rf=rf['return'].reset_index(drop=True)
pre=r-rf

3.获取中国版四因子收益率数据

date = datetime.datetime.strptime('2018-7-01','%Y-%m-%d')
# 月初获取股票列表
str_date = str(date.date())
stocks = get_all_securities(['stock'], date=str_date)
stocksstock_list = list(stocks.index)# 获取股票财务数据
# query表示查询
# filter表示条件筛选
# valuation是内置市值数据对象(这里表示查询valuation下所有的属性)
# 最终返回一个Query对象
# income为利润数据对象
q = query(valuation, income
).filter(valuation.code.in_(stock_list)
)
stock_values = get_fundamentals(q, date=str_date)#get_fundamentals是查询财务数据
stock_values.head()# 去除市值最末尾的30%的股票
cap = math.ceil(stock_values.code.count()*0.3)filter_stock = stock_values.sort_values(by='market_cap')
filter_stock = filter_stock.iloc[cap:, :]# 按照市值分大小
medium = math.ceil(filter_stock.code.count()*0.5)
filter_stock = filter_stock.reset_index(drop=True)
filter_stock.loc[:medium, 'size'] = 'small'
filter_stock.loc[medium:, 'size'] = 'big'# 计算EP并按照EP分大小
filter_stock['EP'] = 1/filter_stock['pe_ratio']
filter_stock.loc[filter_stock['EP'] < 0, 'EP'] = 0filter_stock = filter_stock.sort_values(by='EP')a_third = math.ceil(filter_stock.code.count()/3)
two_third = math.ceil(filter_stock.code.count()*2/3)
filter_stock = filter_stock.reset_index(drop=True)
filter_stock.loc[:a_third, 'ep_size'] = 'growth'
filter_stock.loc[a_third:two_third, 'ep_size'] = 'middle'
filter_stock.loc[two_third:, 'ep_size'] = 'value'# 计算权重,后面要用
filter_stock['weight'] = filter_stock['market_cap']/filter_stock.market_cap.sum()filter_stockfrom tqdm.notebook import tqdm# 计算日期,获取上月股票收盘数据
dlt = relativedelta(months=-1)
dltday = datetime.timedelta(days=-1)month_start = date + dlt
month_end = date + dltday
month_start = str(month_start.date())
month_end = str(month_end.date())
#     print(month_start)
#     print(month_end)
lists1 = []
lists2 = []
for code in tqdm(list(filter_stock.code)):stock_close = get_price(code, start_date=month_start, end_date=month_end,frequency='daily',fields='close', skip_paused=False, fq='pre',count=None, panel=True, fill_paused=True)['close']lists1.append(code)lists2.append(stock_close)stock_close = pd.concat(lists2, axis=1)
stock_close.columns = lists1
stock_close# 计算股票收益
stock_return = np.log(stock_close.pct_change()+1).sum()
stock_return.name = 'last_return'stock_return# 将收益合并到主表中
filter_stock = pd.merge(filter_stock, stock_return, left_on='code', right_index=True)
filter_stock# 计算日期,获取当月股票收盘数据
dlt = relativedelta(months=+1)
dltday = datetime.timedelta(days=-1)month_end = date + dlt + dltday
month_end = str(month_end.date())#     print(str_date)
#     print(month_end)
lists1 = []
lists2 = []
for code in tqdm(list(filter_stock.code)):stock_close = get_price(code, start_date=str_date, end_date=month_end,frequency='daily',fields='close', skip_paused=False, fq='pre',count=None, panel=True, fill_paused=True)['close']lists1.append(code)lists2.append(stock_close)
stock_close = pd.concat(lists2, axis=1)
stock_close.columns = lists1# 计算股票收益
stock_return = np.log(stock_close.pct_change()+1)
stock_return = stock_return.sum()
stock_return.name = 'return'# 将收益合并到主表中
filter_stock = pd.merge(filter_stock, stock_return, left_on='code', right_index=True)filter_stockreturns = filter_stock.groupby(['size', 'ep_size']).mean()['return']
returnsfilter_stock = filter_stock.sort_values(by='last_return')
half = math.ceil(filter_stock.code.count()/2)
filter_stock = filter_stock.reset_index(drop=True)
filter_stock.loc[:half, 'mom'] = 'not_mom'
filter_stock.loc[half:, 'mom'] = 'mom'param_dicts = {}
SMB = (returns['small'].sum() - returns['big'].sum())/3
VMG = (returns[:,'value'].sum() - returns[:,'growth'].sum())/2
MKT = filter_stock.weight.dot(filter_stock['return'])
MOM = filter_stock[filter_stock.mom=='mom']['return'].mean() - filter_stock[filter_stock.mom=='not_mom']['return'].mean()
param_dicts['SMB'] = SMB
param_dicts['VMG'] = VMG
param_dicts['MKT'] = MKT
param_dicts['MOM'] = MOMparam_dicts

4.业绩归因

import statsmodels.api as sm
x = df_4f.reset_index(drop=True)
x = sm.add_constant(x)
y = df['ret'].reset_index(drop=True)
model = sm.OLS(y, x)
results = model.fit()
print(results.summary())

对贵州茅台(600519.SH)2018年1月-2020年12月的收益进行中国版四因子归因,得到如下结果:

表1:贵州茅台在中国版四因子上的风险暴露及t统计量的值

风险暴露

t统计量

SMB

-1.4055

-1.671

VGM

0.4702

0.817

MKT

0.9306

3.127

MOM

-0.9618

-1.189

茅台在SMB因子上的风险暴露为-1.4055,在VGM因子上的风险暴露为0.4702,在MOM上的风险暴露为-0.9618,但t统计量均大于-2,小于2,在统计意义上均不显著。

茅台在MKT上的风险暴露为0.9306,且t统计量大于2,在统计意义上显著,表明茅台的业绩主要由中国版四因子中的市场因子MKT贡献。

贵州茅台的中国版四因子归因【课程作业】相关推荐

  1. SAP License:SAP创建中国版免费在线公开课程openSAP

    2021 年 8月 14日,北京讯 -- SAP公司宣布,正式开设中国版免费在线公开课程openSAP,将广受赞誉的openSAP全球课程引入中国,帮助中国用户随时随地学习SAP创新技术.首门课程&l ...

  2. SAP创建中国版免费在线课程openSAP

    8月14日消息,SAP公司宣布,正式开设中国版免费在线公开课程openSAP,将广受赞誉的openSAP全球课程引入中国,帮助中国用户随时随地学习SAP创新技术.首门课程<让我们开始了解SAP的 ...

  3. 中国版的FamFrnh因模型了解一下

    转 中国版的 Fama-French 三因子模型,了解一下? 作者:石川,量信投资创始合伙人,清华大学学士.硕士,麻省理工学院博士:精通各种概率模型和统计方法,擅长不确定性随机系统的建模及优化.(已获 ...

  4. 中国版的FamaFrench三因子模型了解一下

    转 中国版的 Fama-French 三因子模型,了解一下? 作者:石川,量信投资创始合伙人,清华大学学士.硕士,麻省理工学院博士:精通各种概率模型和统计方法,擅长不确定性随机系统的建模及优化.(已获 ...

  5. 四年级计算机走进传统节日教案,小学信息技术黔科版四年级上册第一单元 中国传统节日——制作简单电子作品活动3 使用资料制作作品教案...

    这是一份小学信息技术黔科版四年级上册第一单元 中国传统节日--制作简单电子作品活动3 使用资料制作作品教案,共3页. 活动3 使用资料制作作品 教学目标: 1.学会使用简单的快捷方式 2.学会编辑文档 ...

  6. 浪潮式发售实操笔记(中国版)

    浪潮式发售实操笔记(中国版) 覃小龙 中国互联网权威营销专家 沃克其人 产品发售公式的发明人叫杰夫·沃克,一个精彩的吊丝逆袭人生,他堪称互联网赚钱速度最快的人,目前是亚马逊创始人贝佐斯的创业教练. 杰 ...

  7. 300万奖金池,第二届“中国版ImageNet”开赛

    作者 | 非主流 出品 | AI科技大本营 近日,由创新工场.搜狗.美团点评.美图公司联合主办的"2018 AI Challenger 全球 AI 挑战赛"正式开赛. AI Cha ...

  8. AI一分钟 | 谷歌员工对中国版搜索引擎提出抗议;华为麒麟980将于本月底发布...

    ▌华为麒麟 980 处理器将于 IFA 发布 8 月 17 日消息,华为方面已经确认,旗下最新麒麟 980 芯片将将会在 8 月 31 日举办的 IFA 展会上亮相.重点是,麒麟 980 将成为全球第 ...

  9. 如何将Outgoing Webhook部署到中国版Azure

    在这篇文章中,我们主要来如何将Azure DevOps中的项目作为应用发布到中国版Azure的App Service中. 什么是Azure DevOps Azure DevOps, 原名为VSTS, ...

最新文章

  1. STM32的调试方式、更新程序、仿真以及补救措施
  2. pte模拟考试_首考七炸!PTE首战即告捷,拿下爱丁堡大学直通offer
  3. Docker(二)-在Docker中部署Nginx实现负载均衡(视频)
  4. ADF:在任务流终结器中支持bean作用域
  5. 2021年8月下旬好文收藏
  6. C# servicestack.redis 互通 java jedis
  7. 曾经“杀手级”的桌面语言 Java 将要退隐江湖?
  8. 纺织名词术语(针织品部分)---疵点
  9. 【定位仿真】基于matlab RSSI三边定位仿真【含Matlab源码 1690期】
  10. “泰迪杯”挑战赛 - 基于协同过滤的推荐算法研究与 GUI 设计
  11. 伟大时刻:小米的命门
  12. 微型计算机控制技术应用,微型计算机控制技术的发展及应用123.doc
  13. 从囚徒困境到世风日下
  14. 大学英语综合教程一 Unit 2 课文内容英译中 中英翻译
  15. 【程序厨】学习 Redis ,可以看看这个
  16. 《区块链跨链技术进展研究》论文笔记
  17. 山东大学人工智能专业认知科学与类脑计算回忆版
  18. Java实现生成csv文件并导入数据
  19. 中国石油大学远程教育《应急救援概论》第三阶段在线作业
  20. ROS IOError: [Errno 13] Permission denied 报错

热门文章

  1. 谷歌浏览器自带UI自动化工具
  2. 音视频开发学习(三) -- RGB YUV HSV 颜色空间
  3. Hector代码原理推导
  4. Cannot load configuration class: org.springframework.boot.autoconfigure报错 如何解决?注意核对版本
  5. 传统方法学习IT已不再适用,快速提升的方法原来是这样
  6. SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者
  7. 腾讯地图行政区划接口调用
  8. vba单元格颜色设置
  9. Thor 0.0.2 发布!
  10. 计算机二级word考试难点,国家计算机二级考试word难点讲解