文章導讀:機器學習用來投資一直都是非常熱門的學問,近年來深度學習模型開始受到非常多的矚目,尤其是在電腦視覺方面,所以接下來導讀的這篇文章,就是提供了一個全新的方式,將目前最火紅的 視覺神經網路:Convolutional Neural Network(CNN)用來預測股票的漲跌。實驗解果表示效果比一般的神經網路要好。
你可能會問,以time series來說,明明神經網路可以使用 LSTM,為何要用 CNN?LSTM應該比較適合處理時間序列呀!(畢竟LSTM是拿來處理文字字串的神經網路,字串也是一種時間序列,所以通常預測股價,大家會用LSTM)。但文章中說明,目前CNN用於圖像處理比起其他的模型,被研究的更透徹,也有大量的研發,所以說不定效果更好,所以採用了 CNN 神經網路來預測股價的漲跌
他們用15個技術指標 X 15 天,產生出一個 15×15 的影像,將這個影像丟入 CNN 神經網路中做訓練,下圖就是神經網路所「看到」的input:
想想對於人類來說,這個影像對我們來講沒什麼意義,但是對於電腦來說,就可以拿來判斷股價的漲跌喔!還滿酷的!我只是在想為何是15×15為何不將圖像變的大一點?
我們會將上面這些圖片稱之為features,也就是電腦用來判斷買賣的資訊,電腦用這些資訊,就可以預測交易訊號,也就是這個神經網路的label。作者提供了一個簡單的方式,使用rolling window,去找每段時間的最大值最小值,以下是大致上的程式碼,有興趣的話可以深入研究,不過我們在這邊就點到為止。
上述的方法,會產生(-1, 0, 1)的訊號,分別代表(賣、不做動作、買),但是由上述程式碼產生出來的訊號,必然會有imbalance的問題,也就是三種class的數量不一致,所以本篇文章使用random resampling的方式,隨機取出相同數量的 label 對應到的 testcase,來避免 0 太多的問題。
此篇 paper 中用了美股的 ETF 和 道瓊 30 檔成分股當訓練的標的。
有了 feature 跟 label,很理所當然的,我們就可以開始訓練了!
此篇 paper 的神經網路如下:
- input layer (15×15),
- two convolutional layers (15x15x32, 15x15x64),
- max pooling (7x7x64),
- two dropout (0.25, 0.50),
- fully connected layers (128),
- output layer (3)
上面的架構中,input就是單純的 15 x 15 的圖片,output 有3個,分別是買、賣、不做動作。
中間的 convolutional layers 跟 pooling
作者說由於training dataset不大的關係,所以神經網路不用太大,不然會造成overfitting的狀況。
這篇 paper 使用 walk forward 的方式來測試,好處是可以產生時間較長的回測結果,
以下就是他們的回測績效(其中兩檔ETF):
而他們也有將效果跟其他的神經網路作比較,幾種常用的方法:
- CNN-TAr 作者使用的方法
- BaHr 所謂的 buy and Hold 長期持有
- RSIr 利用 RSI技術指標做出來的策略
- SMAr 均線策略
- LSTMr 神經網路策略pip
- MLPr 一般神經網路策略
下圖就是商品(每一個row)和不同策略(每一個column)所對應到的年報酬率:
可以發現這種神經網路的效果比其他的更好!在大部分的商品都有比較好的年報酬率喔~
更多內容都可以參考該論文的連結喔!