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)