自己做量化交易軟體(39)小白量化實戰12–利用神經網路程式預測價格上漲
大家使用小白量化軟體的主要目不是為了仿通達信公式和仿大智慧公式,大家主要的目的想利用Python神經網路和深度學習等功能來用人工智能AI程式研究股市,從這篇文章開始,我逐步給大家介紹,如何利用小白量化金融模塊庫來實作自己的深度學習程式,
人工神經網路(Artificial Neural Networks,簡寫為ANNs)是一種模仿動物神經網路行為特征,進行分布式并行資訊處理的演算法數學模型,這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理資訊的目的,并具有自學習和自適應的能力,
人工神經網路分為淺層神經網路和深層神經網路,淺層神經網路有很多非線性分類器,深層神經網路有很多深度學習模型,后期再介紹深度學習程式預測股價,
這篇文章主要介紹淺層神經網路分類器的功能,可以簡單地說,我們的目的就是讓神經網路學習歷史行情資料學習,對未來股價漲跌做分類(上漲或不上張,也就是預測),即根據當前資料預測下一周期,上漲(數值1.0)或不上漲(數值0.0),
Python的sklearn庫有很多學習演算法,我以神經網路模型向量機(SVM)機器學習演算法為例做介紹,
假定我們獲取日線資料800條,選取前790條資料進行學習,拿最后10條資料做驗證,實際操作需要使用數百萬條資料,甚至更多資料,才會有準確效果,這里是學習神經網路的演示例子,
歷史行情漲跌是已知的,我們可以根據實際漲跌做漲跌標記label,我們把下一周期漲跌結果移動到前一周期,做學習標簽label2,
資料源只有K線資料是不夠的,我們又加了一些常規技術指標,讀者可以拿自編指標來測驗,
準備作業,如果讀者使用[綠色Py37],需要按如下順序卸載舊庫,再安裝新庫,
pip uninstall sklearn
pip uninstall scipy
pip uninstall numpy

安裝最新的sklearn庫:
python -m pip install --upgrade pip
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sklearn -i https://pypi.tuna.tsinghua.edu.cn/simple
程式安裝完就可以運行下面的深度學習程式了,這個程式是我給<零基礎搭建量化投資系統――以Python為工具>讀者做的神經網路入門學習程式,已經有詳細的說明了,有疑問可在讀者群中交流,演示程式使用了很多常規指標,都可以進行替換,
#購買<零基礎搭建量化投資系統>正版書,送小白量化軟體源代碼,
# https://item.jd.com/61567375505.html
#獨狼荷蒲qq:2775205
#通通python量化群:524949939
#電話微信:18578755056
#微信公眾號:獨狼股票分析
from HP_formula import * #小白量化仿通達信公式函式庫
import HP_tdx as htdx #小白量化通達信行情庫
#KDJ指標
def KDJ(N=9, M1=3, M2=3):
RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
K = SMA(RSV,M1,1)
D = SMA(K,M2,1)
J = 3*K-2*D
return K, D, J
#RSI指標
def RSI(N1=5):
LC = REF(CLOSE, 1)
RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100.00
return RSI1
def VR(M1=26):
"""
VR容量比率
"""
LC = REF(CLOSE, 1)
VR = SUM(IF(CLOSE > LC, VOL, 0), M1) / SUM(IF(CLOSE <= LC, VOL, 0), M1) * 100
return VR
def ARBR(M1=26):
"""
ARBR人氣意愿指標
"""
AR = SUM(HIGH - OPEN, M1) / SUM(OPEN - LOW, M1) * 100
BR = SUM(MAX(0, HIGH - REF(CLOSE, 1)), M1) / SUM(MAX(0, REF(CLOSE, 1) - LOW), M1) * 100
return AR, BR
def DMI(M1=14, M2=6):
"""
DMI 趨向指標
"""
TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1)
HD = HIGH - REF(HIGH, 1)
LD = REF(LOW, 1) - LOW
DMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1)
DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1)
DI1 = DMP * 100 / TR
DI2 = DMM * 100 / TR
ADX = MA(ABS(DI2 - DI1) / (DI1 + DI2) * 100, M2)
ADXR = (ADX + REF(ADX, M2)) / 2
return DI1, DI2, ADX, ADXR
#連接行情主站
htdx.TdxInit(ip='183.60.224.178',port=7709)
code='600080'
#獲取日線資料,800條資料
df = htdx. get_security_bars(nCategory=4,nMarket = 0,code=code,nCount=800)
#對資料做小白量化格式轉換
mydf=df.copy()
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']
VOL=mydf['volume']
C=mydf['close']
L=mydf['low']
H=mydf['high']
O=mydf['open']
V=mydf['volume']
#自編防通達信技術指標計算
mydf['ema5']=EMA(C,5) #5日均線
mydf['k'],mydf['d'],mydf['j']=KDJ() #kdj指標
mydf['rsi']=RSI() #rsi指標
mydf['vr']=VR() #VR指標
mydf['ar'],mydf['br']=ARBR() #ARBR指標
mydf['di1'],mydf['di2'],mydf['adx'],mydf['adxr']=DMI() #DMI指標
#設定漲跌標簽
mydf['label']=IF(C>REF(C,1),1.0,0.0) #平判斷當日上漲或不上張
mydf['label2']=REF(mydf['label'],-1) #把下一周期的上漲移動到前一周期,用于學習標簽
print(mydf)
mydf=mydf.tail(100)
x_all = [] #定義兩個串列變數
y_all = []
#裝配深度網路學習資料
for i in range(0,len(mydf)-1):
features = []
features.append(mydf['open'].iloc[i])
features.append(mydf['high'].iloc[i])
features.append(mydf['low'].iloc[i])
features.append(mydf['close'].iloc[i])
features.append(mydf['ema5'].iloc[i])
features.append(mydf['rsi'].iloc[i])
features.append(mydf['k'].iloc[i])
features.append(mydf['d'].iloc[i])
features.append(mydf['j'].iloc[i])
features.append(mydf['vr'].iloc[i])
features.append(mydf['ar'].iloc[i])
features.append(mydf['br'].iloc[i])
features.append(mydf['di1'].iloc[i])
features.append(mydf['di2'].iloc[i])
features.append(mydf['adx'].iloc[i])
features.append(mydf['adxr'].iloc[i])
x_all.append(features)
#前一天資料,標記下一天漲跌
y_all.append(mydf['label2'].iloc[i])
# 準備神經網路演算法需要用到的資料,截取前790條做神經網路學習,后10條進行驗證效果,
x_train = x_all[: -10]
y_train = y_all[: -10]
print('神經網路資料已準備好了!')
#匯入支持向量機(SVM)
from sklearn import svm
#開始利用支持向量機(SVM)機器學習演算法計算
clf = svm.SVC()
#訓練的代碼
print('神經網路開始資料學習!')
clf.fit(x_train, y_train)
print('神經網路學習結束!')
#對訓練結果進行檢驗
#后20條資料做神經網路測驗集
print('向量機(SVM)預測結果如下(前10條已學習過,后10條資料未學習.):')
M=20
for i in range(M):
x_test = x_all[i-M]
y_test = y_all[i-M]
prediction = clf.predict([x_test])
mess='預測錯誤!'
if prediction == y_test :
mess="預測正確!"
print(i+1,' : ',y_test,prediction,mess)
程式運行結果如下:
[800 rows x 31 columns]
神經網路資料已準備好了!
神經網路開始資料學習!
神經網路學習結束!
向量機(SVM)預測結果如下(前10條已學習過,后10條資料未學習.):
1 : 0.0 [0.] 預測正確!
2 : 1.0 [1.] 預測正確!
3 : 1.0 [1.] 預測正確!
4 : 1.0 [1.] 預測正確!
5 : 1.0 [1.] 預測正確!
6 : 0.0 [0.] 預測正確!
7 : 1.0 [1.] 預測正確!
8 : 0.0 [0.] 預測正確!
9 : 0.0 [0.] 預測正確!
10 : 0.0 [0.] 預測正確!
11 : 0.0 [0.] 預測正確!
12 : 1.0 [0.] 預測錯誤!
13 : 0.0 [0.] 預測正確!
14 : 0.0 [0.] 預測正確!
15 : 1.0 [0.] 預測錯誤!
16 : 0.0 [0.] 預測正確!
17 : 0.0 [0.] 預測正確!
18 : 0.0 [0.] 預測正確!
19 : 0.0 [0.] 預測正確!
20 : 1.0 [0.] 預測錯誤!
這篇文章介紹到這里,大家也可以改成隨機森林演算法模型等很多神經網路模型來測驗,可以在<零基礎搭建量化投資系統――以Python為工具>讀者群交流,
另外在<零基礎搭建量化投資系統――以Python為工具>書中最后一章,介紹了利用Python深度學習程式預測股價的程式,大家可以在讀者群中交流,共同提高,
請持續關注我的博客,我的進步,就是你的進步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258503.html
標籤:AI
上一篇:鼠年臘月二十八,我發現了 CSDN 一個驚人通道,如何免費日增 1000+ 粉絲
下一篇:免費制作一個屬于你的微信紅包封面
