◇內江師范學院數學與信息科學學院 李沁林 尹福成 陳 雪 康 倩
本文選取上證50成分股中的一部分股票作為對象,統計了日內金融高頻數據以及各交易時間段互聯網資訊數量。將這些數據作為自變量,股價當日與后一日的收盤價是否上漲作為因變量,采用BP神經網絡進行訓練,然后收集當天的自變量帶入網絡對明天的股價股價是否上漲作出預測。通過五天的實驗,模型平均準確率為70%。
隨著人工智能技術的不斷發展,各大券商、基金公司等推出了各種各樣的股價預測系統,乃至炒股機器人。有的是利用α對沖來構建可以套利的投資組合,有的是依靠收盤價、開盤價、最高價、最低價等歷史數據從統計的角度來預測股價[1]。本文構建也是從統計的角度來預測股票價格,不同之處是加入了股票的新聞與股票的其它高頻數據一起來預測股價,實現了一個自動收集數據并作出預測的器人。
假設互聯網資訊對投資者的決策是有影響的,并且由于不同的投資者看到新聞的時間不同,新聞發出后的五分鐘內一小部分人看到新聞的人所作出的買賣決定,可以代表隨后大多數投資者看到這條新聞后的想法。通過新聞發出后的五分鐘內那少部分看到新聞的人作出的反應來近似替代新聞對股價的影響。這樣做避免了逐條對新聞的本文內容的挖掘。采用文本挖掘既無法得到投資者對于這條新聞真正的反應,實現起來也異常麻煩。
這里用python3.6.8+requests3.1.4.0接入新浪股票的API,提交請求后可以獲得最近五天內該股票的五分鐘高頻數據,包括開盤價,收盤價,最高價,最低價,成交量這幾個屬性。后面要對這些數據進行訓練,不同股票間的價格相差很大,會對訓練造成不好的影響,所以這里對這幾個屬性計算它們的增長率,其結果一般都在-1到1之間。除了個股的價格數據外,還可以獲取股票所在版塊的指數的價格數據,然后做同樣的處理。最后制成一個csv文件用來保存某只股票在某一天的這些屬性,如表1所示。

表1 所得csv文件示例
從表的第一列開始,每一列依次表示:大盤五分鐘內最高價增長率、個股五分鐘內最高價增長率、大盤五分鐘內最低價增長率'、個股五分鐘內最低價增長率、大盤五分鐘內開盤價增長率、個股五分鐘內開盤價增長率、個股五分鐘內的新發新聞數量、大盤五分鐘內收盤價增長率、個股五分鐘內收盤價增長率、大盤五分鐘內交易量增長率、個股五分鐘內交易增長率。每一行代表不同的時間段。第一行到最后一行依次表示從早上八點開始每5分鐘的數據。
引言提到的,要加入新聞預測股價,必然要構建一個可以獲取新聞的模塊。考慮到百度的大蜘蛛系統每五分鐘可以爬取一次全網資訊,本文就直接爬取百度關于股票的搜索結果,免去了從各大網站分別爬取資訊的苦惱。用python3.6.8+selenium來制作新聞爬蟲,可以繞開反爬機制。爬蟲模塊運行后得到的結果如圖1所示。

圖1 爬蟲模塊爬取百度京東方搜索結果
爬蟲返回的結果與網頁直接搜索得到的沒有差別,統計交易時間內的各五分鐘時間段的新聞發布數量,與股價數據一起作為我們最終使用的數據,如表1所示。
選取上證50的部分股票作為對象,運行程序,得到的每一個csv文件代表了某只股票某一天的股價高頻數據與新聞數據。將文件名命名為日期加股票名稱,若第二天上漲則放在文件名為“1”的文件夾下,若第二天沒有上漲則放在文件名為“0”的文件夾下。運行程序當天的數據放在“待判斷”文件夾下,模型訓練后用這些文件對其第二天做預測。
股價的漲跌與其因素顯然是非線性的,還具有復雜的非線性關系。Universal approximation theorem(Hornik et al.,1989;Cybenko,1989)定理表明:前饋神經網絡,只需具備單層隱含層和有限個神經單元,就能以任意精度擬合任意復雜度的函數[2]。這里我們選擇BP神經網絡對股價做預測,模型的結構如圖2所示。

圖2 網絡結構
網絡從上到下依次為64個神經元的全連接層,relu激活層,16個神經元的全連接層,relu激活層,2個神經元的全連接層,sigmoid激活層。損失函數為sparse categorical crossentropy。
按照上述模型用keras搭建好之后,進行300輪訓練,然后將當天的數據輸入網絡,得到第二天股票的的預測漲跌,然后與真實值做對比,重復5天實驗每一天準確率如圖3所示。

圖3 每天實驗的準確率

圖4 五天預測的混淆矩陣
預測的準確率都大于50%,效果較為理想,混淆矩陣如圖4所示。由圖4知,網絡的精確度度都在70%左右,說明神經網絡確實學習到了一些規律。對下跌的預測靈敏度高達84.96%說明數據中的下跌樣本很多,導致模型預測下跌的頻率大。
互聯網資訊與股價高頻數據聯合預測股價的準確率每日穩定高于50%,說明了這套方法有很強的實用性。目前已經實現了自動數據收集和預測部分的代碼,相關代碼已上傳到GitHub,后續可以開發交易模塊得到一個基于此方法的全自動炒股機器人。