人工智能在股票買賣中的應(yīng)用
經(jīng)過一個(gè)多月的努力,終于完成了一個(gè)簡單的人工智能來判斷第二日股票的漲跌,用的是一個(gè)簡單的全連接神經(jīng)網(wǎng)絡(luò)。Tensorflow的架構(gòu),簡單說一下實(shí)現(xiàn)算法的業(yè)務(wù)邏輯。
一、數(shù)據(jù)處理。
取出某個(gè)股票的400個(gè)交易日內(nèi)的歷史記錄。對400個(gè)交易日內(nèi)進(jìn)行各個(gè)指標(biāo)的運(yùn)算,將運(yùn)算結(jié)果記錄數(shù)據(jù)庫中。獲取了6個(gè)常見的指標(biāo),比如說KDJ,MACD等。
把400個(gè)指標(biāo)記錄分別拆分成訓(xùn)練集和測試集,如下:

隨機(jī)拆分的比例大約:9:1
二、訓(xùn)練網(wǎng)絡(luò)
將這些數(shù)據(jù)放入到神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,訓(xùn)練的正確率達(dá)到90%就可以。
然后用測試集進(jìn)行驗(yàn)證。
由于每個(gè)股票都會有單獨(dú)的特點(diǎn),因此各個(gè)股票都會有一個(gè)獨(dú)立的擬合模型。
網(wǎng)絡(luò)結(jié)構(gòu)代碼如下:
1. 定義輸入層函數(shù):

2. 定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)

3. 編譯網(wǎng)絡(luò)

4. 對網(wǎng)絡(luò)進(jìn)行訓(xùn)練

這個(gè)訓(xùn)練指標(biāo)感覺一般,產(chǎn)生了一定的過擬合,所以說各個(gè)股票的訓(xùn)練模型在使用的過程中還需要調(diào)整。
5. 使用測試集對結(jié)果驗(yàn)證

在這里測試集的正確率是95.34%, 還是比較高的。
三、結(jié)果處理
由于是股票投資,對結(jié)果的處理,采用了一個(gè)分類處理的方式,將神經(jīng)網(wǎng)絡(luò)的處理結(jié)果分成3類:-10%至-3%, -3%至3%, 3%至10%。
簡單來說就是,大跌情況,橫盤震蕩情況,大漲情況。三種情況對應(yīng)三個(gè)人工智能判斷的結(jié)果,來指導(dǎo)第二天股票的買賣。如圖:

初步的想法是,實(shí)盤過程中震蕩結(jié)果必然是最多的,但對多只股票進(jìn)行運(yùn)算,比如10-20只,當(dāng)某個(gè)股票出現(xiàn)大漲的指標(biāo)后,第二天及時(shí)買入,第三天立即賣出。
四、業(yè)務(wù)部署
訓(xùn)練出的模型需要與各個(gè)股票對應(yīng),股票也許多只,因此在模型的部署上要求會比較高,否則會帶來潛在的大量工作。首先是初次任務(wù),當(dāng)股票被納入到股票池中后,獲取其400日之內(nèi)的全部歷史數(shù)據(jù)計(jì)算入庫和處理,同時(shí)到處用于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練集和測試集。盤后的定時(shí)任務(wù),通過定時(shí)任務(wù)將當(dāng)日的股票數(shù)據(jù)進(jìn)行加載和運(yùn)算。
時(shí)間倉促的緣故,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程沒有與業(yè)務(wù)系統(tǒng)結(jié)合,需要手動(dòng)訓(xùn)練。但使用工作流的部署方式,讓效率有所提高。將模型推送到git會自動(dòng)的將線上的模型庫更新。
五、后期處理
剛剛寫完的一種對股票漲停的判斷,由于在量化交易過程中,會存在測不準(zhǔn)原理。這個(gè)指標(biāo)方式還是需要時(shí)間的檢驗(yàn),后期會將每周新產(chǎn)生的數(shù)據(jù)納入到機(jī)器學(xué)習(xí)的范疇中。達(dá)到自動(dòng)學(xué)習(xí)自動(dòng)提高正確率。