股票涨跌预测方法之三:建立模型并训练
前一陣子在同學(xué)的鼓動下,花了一個多月研究了股票行情的預(yù)測方法,熟悉了常見的炒股術(shù)語及技術(shù)指標(biāo),現(xiàn)總結(jié)如下,純屬興趣,如果想依照本文的方法來短線操作獲利,請繞道。
研究的第三步就是建立神經(jīng)網(wǎng)絡(luò)預(yù)測模型了,還是使用keras來搭建,使用簡單的3層全連接層做實驗,輸出就是根據(jù)第二天的漲跌幅分為5類:漲(范圍[0.01,])、微漲(范圍[0.003,0.01])、平(范圍[-0.003,0.003])、微跌(范圍[-0.01,-0.003])、跌(范圍[, -0.01]),測試了下這么分,5類概率幾乎均等。
輸入選擇什么呢?如果直接將最近N天的開盤價、收盤價、交易量等原始值輸進(jìn)去,應(yīng)該是很難訓(xùn)練的,畢竟不同股票的價格差異較大,同一個股票幾年前的價格、交易量跟現(xiàn)在也類似,很難收斂,如果輸入上篇文章中的股票技術(shù)指標(biāo),這些指標(biāo)又太簡單,主要用于繪圖讓人觀察,我們采用了不同天數(shù)的收盤價格滑動平均(類似于MACD中的ema計算)、不同天數(shù)的收盤意愿滑動平均(類似于CR指標(biāo)的計算)、不同天數(shù)的股票振幅滑動平均、不同天數(shù)的交易量滑動平均,注意所有的平均值計算完后還要除以一個基準(zhǔn)值,使得每個值都在1.0附近。
def GetPara(m, allDate):
if 1: #簡單處理下輸入SVM,效果較好
data = []
tmp = avg1(m.close, 32)
data.append(m.close/tmp)
data.append(avg1(m.close, 2)/tmp)
data.append(avg1(m.close, 4)/tmp)
data.append(avg1(m.close, 8)/tmp)
data.append(avg1(m.close, 16)/tmp)
tmp = m.close.copy()
tmp[0] = (m.high[0]+m.low[0])/2
tmp[1:] = (2*m.close[:-1] + m.high[:-1] +m.low[:-1]).values /4
a = m.high - tmp
b = tmp - m.low
data.append(avg1(a, 2)/avg1(b, 2))
data.append(avg1(a, 4)/avg1(b, 2))
data.append(avg1(a, 8)/avg1(b, 2))
data.append(avg1(a, 16)/avg1(b, 2))
data.append(avg1(a, 32)/avg1(b, 2))
tmp = (m.high- m.low)/ ((m.high+ m.low+0.00001)/2)
data.append(tmp)
data.append(avg1(tmp, 2))
data.append(avg1(tmp, 4))
data.append(avg1(tmp, 8))
data.append(avg1(tmp, 16))
data.append(avg1(tmp, 32))
tmp = avg1(m.volume, 32)
data.append(m.volume/tmp)
data.append(avg1(m.volume, 2)/tmp)
data.append(avg1(m.volume, 4)/tmp)
data.append(avg1(m.volume, 8)/tmp)
data.append(avg1(m.volume, 16)/tmp)
data = np.array(data).T
X_train = []
Y_train = []
n2 = 28
for k in range(30, len(tmp)-1):
if allDate[m.date[k-1]] - allDate[m.date[k-n2]] != n2-1:
continue
X_train.append(data[k, :].ravel())
#v = (m.close[k]-m.close[k-1])/m.close[k-1]
v = (m.close[k+1]-m.close[k])/m.close[k]
if v>=0.01: tmp=0
elif v>=0.003: tmp=1
elif v>=-0.003: tmp=2
elif v>=-0.01:tmp = 3
else: tmp = 4
Y_train.append(tmp)
return X_train, Y_train
然后就是建立模型并訓(xùn)練,loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'], class_mode='categorical',隨機(jī)采用10%的數(shù)據(jù)做驗證,經(jīng)過長時間的等待,結(jié)果如下:
準(zhǔn)確率35%左右,嗯,比扔銀幣的20%好多了。
總結(jié)
以上是生活随笔為你收集整理的股票涨跌预测方法之三:建立模型并训练的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 量化交易之接口篇 — 恒生UFX交易接口
- 下一篇: WPS常用快捷键汇总