python股票預測(tushare)-基於貝葉斯原始代碼

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']
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章