1、tushare介紹
Tushare是一個免費、開源的python財經數據接口包。主要實現對股票等金融數據從數據採集、清洗加工 到 數據存儲的過程,能夠爲金融分析人員提供快速、整潔、和多樣的便於分析的數據,爲他們在數據獲取方面極大地減輕工作量,使他們更加專注於策略和模型的研究與實現上。考慮到Python pandas包在金融量化分析中體現出的優勢,Tushare返回的絕大部分的數據格式都是pandas DataFrame類型,非常便於用pandas/NumPy/Matplotlib進行數據分析和可視化。
2、導入股票數據
python中是利用Tushare包導入數據。tushare的安裝直接pip install tushare即可,一般不會出現錯誤。
這裏導入的是hs300的數據:
import tushare as ts
import pandas as pd
import numpy as np
import talib
df = ts.get_hist_data('hs300')
這裏展示部分數據
3、talib包計算指標
talib是計算股票各個指標的包,安裝talib的方法,這篇博客寫的相當清楚了,可以參考,記得選擇合適自己Python版本的安裝包https://blog.csdn.net/u010671948/article/details/79714647
這裏計算了rsi指標和cci指標:
data = pd.DataFrame()
data['a2'] = talib.RSI(np.array(df.close), 7) #%rsi指標
data['a4'] = talib.CCI(np.array(df.high),np.array(df.low),np.array(df.close),14) #;%cci指標
a1 = 0
for i in range(1,len(df.close)):
a1.append(df.close[i]-df.close[i-1])
data['a1']=a1
y = []
for i in range(0,len(df.close)-1):
y.append(df.close[i+1]-df.close[i])
y.append(0)
data['y']=y
日回報率指標以及因變量股價與前一日相比的漲跌,這裏我是手動計算的。
4、數據處理
接下來做數據處理。把數據進行清洗,比如把因變量y分爲0,1,-1,即股價上漲,下跌,持平。
data['y'][data['y']>0]=1
data['y'][data['y']==0]=0
data['y'][data['y']<0]=-1
data['a1'][data['a1']>0]=1
data['a1'][data['a1']==0]=0
data['a1'][data['a1']<0]=-1
#a2<20,20≤a2≤80,a2>80
data['a2'][data['a2']<30]=1
data['a2'][data['a2']>60]=3
for i in range(len(data['a2'])):
if 30<=data.a2[i]<=60:
data.loc[i,'a2']=2
for i in range(len(data['a4'])):
if -50<=data.a4[i]<=50:
data.loc[i,'a4']=2
elif data.a4[i]<-50:
data.loc[i,'a4']=1
else:
data.loc[i,'a4']=3
5、貝葉斯建模
用貝葉斯公示進行建模,貝葉斯公示我就不詳細介紹了,直接附上代碼~
y_ = [-1,0,1]
a1_ = [-1,0,1]
dic = {}
for i in y_:
for j in a1_:
dic['y'+str(i)+'_a1'+str(j)] = sum(
data['a1'][data['y']==i]==j)/sum(
data['y']==i)
a2_ = [1,2,3]
a4_ = [1,2,3]
for i in y_:
for j in a2_:
dic['y'+str(i)+'_a2'+str(j)] = sum(
data['a2'][data['y']==i]==j)/sum(
data['y']==i)
for i in y_:
for j in a4_:
dic['y'+str(i)+'_a4'+str(j)] = sum(
data['a4'][data['y']==i]==j)/sum(
data['y']==i)
data.iloc[19,:]
y_ = sum(data['y']==-1)/len(data['y'])
y0 = sum(data['y']==0)/len(data['y'])
y1 = sum(data['y']==1)/len(data['y'])
py_ = y_*dic['y-1_a22']*dic['y-1_a41']*dic['y-1_a1-1']
py0 = y0*dic['y0_a22']*dic['y0_a41']*dic['y0_a1-1']
py1 = y1*dic['y1_a22']*dic['y1_a41']*dic['y1_a1-1']