Rmt - Rft :市场风险溢价因子。
SMB(Small minus Big):当SMB增加,即小市值公司股票收益率相对大市值公司股票收益率较好,则若因子暴露βi2>0,投资组合收益率将会更高。从市值的角度解释股票收益率。
HML(High minus Low):BM(账面市值比,市净率的倒数)越低估值越高,若BM高(低估值)的股票相对于BM低(高估值)的股票收益率提升,则HML变大,若若因子暴露βi3>0 ,股票收率会上升。从估值的角度用该因子解释股票收益率。
RMW(盈利好和盈利差的投资组合收益率差异,用息税前利润与与股东权益之比衡量)和CMA(投资高和投资低的投资组合收益率差异,用新增总资产除以上财年末的总资产衡量)通过盈利能力和投资角度来解释股票的收益率。如果因子暴露均反应了预期回报的所有变化,超额收益率阿尔法为0。
导入需要的包和数据:
import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from WindPy import w
w.start()
w.isconnected()
import statsmodels.api as sm
#沪深300成分股代码和财报数据
code=pd.read_csv('./code.csv')
code = code['code']
code = list(code)
通过wind接口获取沪深300成分股的日频数据,数据期间:2020.1.1----2021.12.28
date_list=w.tdays("2020-01-01", "2021-12-28"," ")
close = np.zeros(shape=(len(date_list.Times),0))
close=pd.DataFrame(close)
close.index = pd.to_datetime(date_list.Times)
close = pd.DataFrame(close)
for i in code:
history=w.wsd(i,"close","2020-01-01", "2021-12-28","Fill=Previous")
df=pd.DataFrame(history.Data,index=history.Fields).T #转置数据表
df.index = pd.to_datetime(date_list.Times)
df = pd.DataFrame(df)
df =df.sort_index(ascending=True)
df =df[['CLOSE']]
close[i]=df
#close.to_csv('./close.csv')
cap = np.zeros(shape=(len(date_list.Times),0))
cap =pd.DataFrame(cap)
cap.index = pd.to_datetime(date_list.Times)
for i in code:
history=w.wsd(i,"mkt_cap_ard","2020-01-01", "2021-12-28","Fill=Previous")
df=pd.DataFrame(history.Data,index=history.Fields).T #转置数据表
df.index = pd.to_datetime(date_list.Times)
df = pd.DataFrame(df)