深度學習與金融市場——LSTM預測股價的正確方法

前面討論過LSTM的預測模型,同學們百度也好,科學谷歌也好,能找到的LSTM的模型無非是在討論模型本身,無非Seq2Seq、Seq2one等等各種,或者再加上Attention機制等等。總之,同學們把程式碼clone下來,發現不工作嘛!看起來擬合的很好的預測曲線,看起來很美好的回測資料,慘不忍睹的實盤結果。這是為什麼呢? 前面我們就討論過了,這裡我們重新來回顧一下。
我們以30天的OHLCV資料作為輸入來預測隔日的收盤價,我們用一個兩層的LSTM模型,我們也加上Attention。示例程式碼如下:
model = Sequential()
model.add(LSTM(64, input_shape=(30, 5), return_sequences=True))
model.add(LSTM(64, return_sequences=True))
model.add(Dropout(0.2))
model.add(AttentionWithContext())
model.add(Dense(1))
那麼這個模型的表現如何呢?不可否認,Attention機制的作用非常明顯,更有利於模型去識別模式。但是我們前面講過了,對於NLP任務,比如我們給出一個詞語,”風和日“,用LSTM配合ATTENTION機制,很容易得出後面的字是”麗“。這種情況下準確率是很高的,再比如”皇帝“的”皇“字,後面可以是”皇帝“、”皇上“、”皇后“、”皇城“,再根據前後的上下文,很容易提高準確率。但是股價呢?”28.00“後面跟什麼股價,有邏輯性嗎?我們只知道可能在漲停價和跌停價之間,但是這之間有多少個可能值?我們以兩位小數來說都有接近200個,首先即便我們說有pattern的存在可能性,那麼預測值28.55和28.56的意義顯然是不明顯的。那麼我們來提一種資料處理方法,這種方法我之所以說是正確的,是相對意義上的。大家可以做個實驗來證明這種方法是否優於原先的方法,但是它仍然不能給你帶來穩定的收益。沒那麼簡單,就能找到,言歸正傳,我們需要對股票進行一些分析。
首先,我們需要了解股票的流通市值和股價之間的關係,或者有人會說了,還要考慮莊家的能力,當然,不同的資金大小自然是玩不同的股票。我們這裡著重討論的是股價如何去做歸一化處理。如果只做一隻股票,可以暫時不用考慮,但是如果是多隻股票的股價做歸一化,那麼就要考慮了。比如同樣是10塊的股票,一個市值30億,一個300億,我們產生同樣的漲幅所需要的資金是不一樣的,我們在歸一化股價的時候,需要有一個權重引數。
本文中我們暫且只討論一隻股票的情況,我們將我們的股票資料已經處理為30天X5個features。那麼我們需要以這三十天來做歸一化處理,我們這裡的歸一化,不同於一般意義上的歸一化,我們類似於將資料處理為離散資料。事實股票的股價看起來雖然是離散的,但是事實上如果使用更小的時間週期,它就是連續的。連續的資料用LSTM去做預測顯然是為難模型了。那麼我們可以對股價進行分割槽,怎麼來做呢,我們不要用股票的最低價和最高價來做歸一化,為什麼呢?對整體資料做歸一化容易洩露資訊給你的模型,沒辦法,模型確實是太擅長這個了!我們僅僅使用這隻股票的流通市值,我們以1-1000作為股價基礎x,從1開始將漲幅1%、2%、3%一直到10%這些節點作為分割節點,這些線段上的值我們以閉區間開頭,開區間收尾。那麼我們得到了10個區間,這10個區間我們歸納為10個離散數值,那麼從1-1000,我們就有了固定數量的離散數值。然後我們將這隻股票的股價對應到這個離散數值來,比如一隻歷史股價從5到28的股票,它的離散數值也是固定的。有同學就要問了,股價也不是一直就是漲的,這樣做出來的離散值是有意義的嗎?當然這種方法做出來的離散值是不靠譜的,尤其對於股價稍高的股票,但是並非這種思路不靠譜,而是我們需要一個調節引數,為什麼?這就是我們提到流通市值的原因。如果我們單單用這種方法,後面的線段會越來越長。所以這樣就會造成樣本不足,預測精度太差,甚至超過漲停,也就是說你的模型給你的預測會是,可能漲停,也可能跌停,這不就廢話一句了嗎?回過頭來說流通市值的事情,我們的股價漲起來之後,流通市值也隨著漲起來了,那麼我們在訓練的時候需要去用search演算法來確定一個係數,也就是說,當股價越高的時候,我們會對應的去乘以一個更低的係數,這樣可以相對比較好的來抑制線段的長度。那麼大家其實明白了,用這種方法其實是預測股票的漲跌幅,甚至有點像是漲跌幅分類,也就是說,每天的預測只有20種值,而之前的模型每天預測的可能性有200種左右。有同學要問了,那麼1.9%和2.1%相差不大,卻被預測成了不同值,但是這有什麼關係呢?由於時間關係,後面的文章再繼續來討論實際如何去處理資料為這種模式,以及如何更好的生成離散資料,事實上,我們可以專門對A股所有的股價進行分析,如果你去做一下這個分析,你很快就有了思路。
瞭解更多技巧,請移步我的星球:AI量化(https://t.zsxq.com/RvfY37y) 星球限時免費,如需加入,請私信我獲得免費邀請碼!

零基礎學習Python與深度學習應用請關注星球:Python與深度學習 https://t.zsxq.com/bUFayZ3

微信公眾號:QTechAI
