Python CAPM模型
import os import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy import stats import seaborn as sns sns.set(style="darkgrid") os.chdir(r'C:\Users\lzxan\PycharmProjects\untitled1\day1\all_trading_data\index data') files=os.listdir('.') #读入股指数据 indexlist=[] indexchange=pd.DataFrame() indexmoney=pd.DataFrame() indexclose=pd.DataFrame() for filename in files: if indexchange.empty: dummy=pd.read_csv(filename, parse_dates=True, usecols=[1,3,7,8],index_col=0) indexlist.append(filename[0:8]) dummy=dummy.sort_values(by='date') indexclose=pd.DataFrame(dummy['close']) indexchange=pd.DataFrame(dummy['change']) indexmoney=pd.DataFrame(dummy['money']) else: dummy=pd.read_csv(filename, parse_dates=True, usecols=[1,3,7,8],index_col=0) dummy=dummy.sort_values(by='date') indexlist.append(filename[0:8]) indexchange=pd.merge(indexchange,pd.DataFrame(dummy['change']),left_index=True, right_index=True) indexmoney=pd.merge(indexmoney,pd.DataFrame(dummy['money']),left_index=True, right_index=True) indexclose=pd.merge(indexclose,pd.DataFrame(dummy['close']),left_index=True, right_index=True) indexchange.columns=indexlist indexmoney.columns=indexlist indexclose.columns=indexlist #股票数据 os.chdir(r'C:\Users\lzxan\PycharmProjects\untitled1\day1\all_trading_data\stock data') files=os.listdir('.') #获得股票代码列表 stocklist=[] stockchange=pd.DataFrame() stockmoney=pd.DataFrame() stockclose=pd.DataFrame() for filename in files: dummy=pd.read_csv(filename,parse_dates=True,index_col=0,usecols=[1,5,6,8]) dummy=dummy.sort_values(by='date') if dummy.empty==False: if stockchange.empty: stocklist.append(filename[0:8]) stockclose=pd.DataFrame(dummy['close']) stockchange=pd.DataFrame(dummy['change']) stockmoney=pd.DataFrame(dummy['money']) else: stocklist.append(filename[0:8]) stockchange=pd.merge(stockchange,pd.DataFrame(dummy['change']),left_index=True, right_index=True,how='outer') stockmoney=pd.merge(stockmoney,pd.DataFrame(dummy['money']),left_index=True, right_index=True,how='outer') stockclose=pd.merge(stockclose,pd.DataFrame(dummy['close']),left_index=True, right_index=True,how='outer') stockchange.columns=stocklist stockmoney.columns=stocklist stockclose.columns=stocklist ######保存读入数据 stockchange.to_csv('stockchange.csv') stockclose.to_csv('stockclose.csv') stockmoney.to_csv('stockmoney.csv') def returns(x,y): indexnotnan=y[np.isnan(y)==False].index x1=x[indexnotnan] y1=y[indexnotnan] beta, alpha, r_value, p_value, sigma = stats.linregress(x1,y1) return alpha,beta,sigma #CAPM模型
x=indexchange.iloc[:,0] y=stockchange.iloc[:,10] indexnotnan=y[np.isnan(y)==False].index x1=x[indexnotnan] y1=y[indexnotnan] beta, alpha, r_value, p_value, sigma = stats.linregress(x1,y1) fig,ax=plt.subplots(1,1) ax.plot(x1,alpha+x1*beta) ax.scatter(x1,y1) fig stockreturndf=pd.DataFrame(columns=['code','alpha','beta','sigma']) x=indexchange.loc[:,'sh000300'] for stockcode in stocklist: y=stockchange.loc[:,stockcode] alpha,beta,sigma=returns(x,y) row=dict(code=stockcode,alpha=alpha,beta=beta,sigma=sigma) stockreturndf=stockreturndf.append(pd.DataFrame([row],)) ######stockreturndf stockreturns=stockreturndf[['alpha','beta','sigma']] stockreturns.index=stockreturndf['code'] #######abnormalies abnormlist=list(stockreturns[stockreturns.sigma>0.1].index)