三因子 three factor 简单模型实证

  • 三因子模型实证

本文章原用于financial asset pricing课程,代码部分参考http://www.rhd361.com/special/news?id=3557bb1468c34b48b174f617c5415df0

三因子模型实证

# XXX: 发现参考的源代码有很大的问题,他用%m-%Y来索引排序明显不对啊
# 使用总市值加权计算import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns%matplotlib inline
%config InlineBackend.figure_format = 'svg'path = "./thrFactorData/STK_MKT_ThrfacDay.xlsx";
data_sample = pd.read_excel(path, skiprows=[1,2]);
data_sample.head()

def handleMonthR(local, Sname):path = "./"+local+".xlsx";data_temp = pd.read_excel(path, skiprows=[0,1,2,3], usecols=[0,1,2,3,4,5],names=['date','t1','t2','t3','t4','r'],skipfooter=1);# data_temp = data_temp.replace('/','-');data_temp['datetime'] = pd.to_datetime(data_temp['date']);data_temp['date_index'] = data_temp['datetime'].apply(lambda x : x.strftime('%Y-%m'));data_temp.set_index('date_index',inplace=True)data_temp.sort_index(inplace=True)data_sep = data_temp.loc[:,['r']]data_sep.rename(columns={'r': Sname}, inplace=True)return data_sep
# 准备股票数据:
share_code = ["000002","000725","002024","600276","600848"];
share_name = ["wanke","JDFang","suning","hengrui","SHLinGang"];data_sep = handleMonthR(share_code[0], share_name[0]);data_sep = pd.merge(handleMonthR(share_code[1], share_name[1]), data_sep, right_index=True, left_index=True, sort=True, how='inner');
data_sep = pd.merge(handleMonthR(share_code[2], share_name[2]), data_sep, right_index=True, left_index=True, sort=True, how='inner');
data_sep = pd.merge(handleMonthR(share_code[3], share_name[3]), data_sep, right_index=True, left_index=True, sort=True, how='inner');
data_sep = pd.merge(handleMonthR(share_code[4], share_name[4]), data_sep, right_index=True, left_index=True, sort=True, how='inner');data_sep.head()

data_sample.dropna(how="any", inplace=True);
data_sample.info()

data_sample['date'] = pd.to_datetime(data_sample['TradingDate']);
data_sample['date_index'] = data_sample['date'].apply(lambda x : x.strftime('%Y-%m'))
data_sample.set_index('date_index',inplace=True)
data_sample.sort_index(inplace=True)
# data_sample.drop(["TradingDate"],axis=1,inplace=True)
data_sample.head()

# P9705: 创业板;P9706: 综合A股市场;P9707: 综合B股市场;P9709: 综合A股和创业板; P9710: 综合AB股和创
p9706 = data_sample.loc[data_sample["MarkettypeID"].isin(["P9706"]),["RiskPremium2","SMB2","HML2","date"]]
p9706.info()

p9706['year'] = p9706['date'].apply(lambda x: x.year)
p9706['month'] = p9706['date'].apply(lambda x: x.month)
p9706['day'] = p9706['date'].apply(lambda x: x.day)
p9706 = p9706.groupby(['year', 'month']).apply(lambda t: t[t.day == t.day.max()]).reset_index(drop = True)p9706['date_index'] = p9706['date'].apply(lambda x : x.strftime('%Y-%m'))
p9706.set_index('date_index',inplace=True)
p9706.sort_index(inplace=True)# TODO: 不知道为什么drop year 和 month、day会删没了
# p9706 = p9706.drop(['year','month'], axis=1, inplace=True)plt.title('Three Factor - Total market capitalization weightin')
plt.plot(p9706.values[:,3],p9706.values[:,0])
plt.plot(p9706.values[:,3],p9706.values[:,1])
plt.plot(p9706.values[:,3],p9706.values[:,2])
plt.legend(['Rp','SMB','HML'])
plt.show()p9706 = p9706.loc[:,['RiskPremium2','SMB2','HML2']]
p9706.head()


import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'svg'# 准备无风险利率df
path = "./RESSET债券--月无风险收益率.xlsx";
data_rft = pd.read_excel(path, skiprows=[],names=['date','yy','mm','rft']);data_rft['date_index'] = data_rft['date'].apply(lambda x : x.strftime('%Y-%m'));
data_rft.set_index('date_index',inplace=True)
data_rft.sort_index(inplace=True)plt.title('Rft')
plt.plot(data_rft.values[:,0],data_rft.values[:,3])
plt.show()data_rft = data_rft.loc[:,['date','rft']]
data_rft.head()

finalData = pd.merge(p9706, data_sep, right_index=True, left_index=True, sort=True, how='inner');
finalData = pd.merge(finalData, data_rft, right_index=True, left_index=True, sort=True, how='inner');
# finalData['wanke'] = finalData['r'] - finalData['rft'];
share_name = ["wanke","JDFang","suning","hengrui","SHLinGang"];for i in share_name:finalData[i] = finalData[i] - finalData['rft'];print(finalData.head())plt.title('Shares')
plt.plot(finalData.values[:,8],finalData.values[:,3])
plt.plot(finalData.values[:,8],finalData.values[:,4])
plt.plot(finalData.values[:,8],finalData.values[:,5])
plt.plot(finalData.values[:,8],finalData.values[:,6])
plt.plot(finalData.values[:,8],finalData.values[:,7])
plt.legend(share_name)
plt.show()

finalData.corr()

import statsmodels.api as smx = finalData[["RiskPremium2","SMB2","HML2"]].values;
X = sm.add_constant(x);share_name = ["wanke","JDFang","suning","hengrui","SHLinGang"];
for i in share_name:y = finalData[i];model = sm.OLS(y, X)results = model.fit()print(i)print(results.summary())print()





plt.title('share')
plt.plot(finalData.values[:,8],finalData.values[:,3])
plt.plot(finalData.values[:,8],finalData.values[:,4])
plt.plot(finalData.values[:,8],finalData.values[:,5])
plt.plot(finalData.values[:,8],finalData.values[:,6])
plt.plot(finalData.values[:,8],finalData.values[:,7])
plt.plot(finalData.values[:,8], finalData.values[:,1])
plt.plot(finalData.values[:,8], finalData.values[:,2])
plt.legend(["wanke","JDFang","suning","hengrui","SHLinGang",'Rp','SML'])
plt.show()

import statsmodels.api as smx = finalData[["RiskPremium1","SMB1"]].values;
X = sm.add_constant(x);
y = finalData['wanke'];
model = sm.OLS(y, X)
results = model.fit()print(results.summary())

【金融】【python】三因子(three factor)简单模型实证相关推荐

  1. Python三十行代码实现简单人脸识别

    Python三十行代码实现简单人脸识别 一.库介绍 opencv,face_recognition,numpy,以及dlib 注意: 安装opencv速度可能过慢,需要更换国内镜像源,参考:https ...

  2. 3 计算机组成原理第三章 存储系统 主存简单模型及寻址 半导体寄存器 存储器分类 主存与CPU连接 双口RAM和多模块寄存器

    文章目录 1 主存简单模型及寻址的概念 1.1 主存储器 1.1.1 存储器芯片的基本结构 1.1.2 寻址 2 半导体存储器 2.1 半导体随机存取存储器 2.1.1 DRAM的刷新 2.1.2 S ...

  3. python多因子量化选股模型_【邢不行|量化小讲堂系列12-Python量化入门】法码三因子选股模型,有多少人可以跑赢...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 个人微信:xingbuxing0807,有问题欢迎 ...

  4. pythonipo模型_【python量化】Fama-French三因子回归A股实证(附源码)

    01 三因子回归模型 Fama-French三因子回归是量化中最经典的模型之一,最早提出是在论文<Common risk factors in the returns on stocks and ...

  5. Python金融数据三:Python程序计算看涨期权

    Python金融数据三:Python程序计算看涨期权 计算看涨期权价格的代码 Black-Scholes-Merton期权定价模型(Black-Scholes-Merton Option Pricin ...

  6. python中factor函数_左手用R右手Python系列——因子变量与分类重编码

    原标题:左手用R右手Python系列--因子变量与分类重编码 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业 ...

  7. python中factor函数_【T】R中的因子(factor),levels, reorder

    该博文已整理到新地址: http://qinqianshan.com/factor.levels.reorder/ 变量可归结为类别(名义型),有序型,连续型变量(区间变量).类别变量和有序类别(有序 ...

  8. 1-2 用Python编写【房价预测】模型----paddle

    课程>我的课程>百度架构师手把手教深度学习>1-2 用Python编写[房价预测]模型> 1-2 用Python编写[房价预测]模型 paddle初级教程第一章 第二节 王然( ...

  9. python风控建模实战(分类器模型+回归模型)

    在全球数字经济时代,有一种金融优势,那就是基于消费者大数据的纯信用! 我们不妨称之为数据信用,它是一种面向未来的财产权,它是数字货币背后核心的抵押资产,它决定了数字货币时代信用创造的方向.速度和规模. ...

最新文章

  1. 机器学习Tips:关于Scikit-Learn的 10 个小秘密
  2. sql server 小记——分区表(上)
  3. matlab从入门到精通:图像可视化基础操作
  4. dos下批量卸载apk文件
  5. java自定义外部接口_如何使用可外部化的接口在Java中自定义序列化
  6. 【数据库】Mysql日期/时间相关函数汇总
  7. 计算机网络 —— OSI参考模型
  8. zypper 删除mysql_如何在 Linux 上安装/卸载一个文件中列出的软件包?
  9. python打开csv文件画散点图_在Python 3.6中从CSV绘制纬度经度
  10. TC SRM683 Div1 250
  11. Georgia Tech - machine learning 学习笔记一
  12. HDU 3832 Earth Hour
  13. pyqt5 qwidget有父类窗口如何设置模态_实战PyQt5: 024-Qt Designer进阶一
  14. 长安大学微型计算机原理与接口技术答案,长安大学微机原理与接口技术AB卷试题与答案.doc...
  15. centos下安装CH341驱动
  16. 自动化技术、计算机技术核心期刊整理及介绍
  17. 【PC微信探秘】用易语言编写一个微信DLL注入器
  18. React.js 菜鸟入门
  19. linux dm9000网卡驱动,ARM-Linux驱动--DM9000网卡驱动分析(三)
  20. java 实现微信公众号开发服务器认证

热门文章

  1. centos系统中卸载软件【例子为卸载百度硬盘】
  2. labview csv文件处理_LabVIEW 相关知识点分类汇总
  3. 3gpp协议_3GPP都在干什么(16)?:3GPP中网络切片原理及协议解读
  4. 输入函数的区别C++
  5. Robust line matching through line–point invariants
  6. 《人工智能》实验二——搜索技术(八数码问题)
  7. 实验5.2 动态内存分配生成动态数组完成矩阵转置
  8. Python——如何获得字符串的唯一编码
  9. Ubuntu 16.04 用apt-get来安装Java
  10. 2018年1月问答系统综述