論文導讀:利用CNN神經網路來交易ETF

文章導讀:機器學習用來投資一直都是非常熱門的學問,近年來深度學習模型開始受到非常多的矚目,尤其是在電腦視覺方面,所以接下來導讀的這篇文章,就是提供了一個全新的方式,將目前最火紅的 視覺神經網路:Convolutional Neural Network(CNN)用來預測股票的漲跌。實驗解果表示效果比一般的神經網路要好。

title

你可能會問,以time series來說,明明神經網路可以使用 LSTM,為何要用 CNN?LSTM應該比較適合處理時間序列呀!(畢竟LSTM是拿來處理文字字串的神經網路,字串也是一種時間序列,所以通常預測股價,大家會用LSTM)。但文章中說明,目前CNN用於圖像處理比起其他的模型,被研究的更透徹,也有大量的研發,所以說不定效果更好,所以採用了 CNN 神經網路來預測股價的漲跌

他們用15個技術指標 X 15 天,產生出一個 15×15 的影像,將這個影像丟入 CNN 神經網路中做訓練,下圖就是神經網路所「看到」的input:

input

想想對於人類來說,這個影像對我們來講沒什麼意義,但是對於電腦來說,就可以拿來判斷股價的漲跌喔!還滿酷的!我只是在想為何是15×15為何不將圖像變的大一點?

我們會將上面這些圖片稱之為features,也就是電腦用來判斷買賣的資訊,電腦用這些資訊,就可以預測交易訊號,也就是這個神經網路的label。作者提供了一個簡單的方式,使用rolling window,去找每段時間的最大值最小值,以下是大致上的程式碼,有興趣的話可以深入研究,不過我們在這邊就點到為止。

label 1

上述的方法,會產生(-1, 0, 1)的訊號,分別代表(賣、不做動作、買),但是由上述程式碼產生出來的訊號,必然會有imbalance的問題,也就是三種class的數量不一致,所以本篇文章使用random resampling的方式,隨機取出相同數量的 label 對應到的 testcase,來避免 0 太多的問題。

此篇 paper 中用了美股的 ETF 和 道瓊 30 檔成分股當訓練的標的。
有了 feature 跟 label,很理所當然的,我們就可以開始訓練了!
此篇 paper 的神經網路如下:

cnn 1
  • 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):

backtest 2

而他們也有將效果跟其他的神經網路作比較,幾種常用的方法:

  • CNN-TAr 作者使用的方法
  • BaHr 所謂的 buy and Hold 長期持有
  • RSIr 利用 RSI技術指標做出來的策略
  • SMAr 均線策略
  • LSTMr 神經網路策略pip
  • MLPr 一般神經網路策略

下圖就是商品(每一個row)和不同策略(每一個column)所對應到的年報酬率:

compare 1

可以發現這種神經網路的效果比其他的更好!在大部分的商品都有比較好的年報酬率喔~

更多內容都可以參考該論文的連結喔!

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!