網頁

2021年4月17日 星期六

深度學習 + 台指期自動當沖交易 - 第一章 廢話

從 2016 年開始接觸程式交易以來,斷斷續續閉門造車也寫了三代的台指期自動當沖交易系統,第一代使用的 API 是宏遠證券的,使用的程式語言是 C#,宏遠證券最大的問題是網路連線非常不穩定,三天兩頭在斷線,不知道這個問題現在是否已改善;第二代開始使用群益證券提供的 API 到現在,使用的程式語言是 Python,群益證券的網路偶爾也是會斷線,通常發生在當天交易量爆衝的時候,不過整體來講群益證券的穩定度已經算很好了

綜合前三代的心得,台指期自動當沖交易系統的表現雖然偶有佳作,但實戰勝率不到 50%,回測時的勝率雖然可以接近 100%,但是是透過不斷增加進出場策略、參考指標及不斷地做策略的參數調校來達到的,現在系統裡已有上百個參考指標、兩百多條的進出場策略,而且以後還會不斷持續的增加 ... 這真是一件可怕的噩夢 ! 我想差不多是時候放棄程式交易的大夢了。

我期望中的程式交易系統應該只需要少量的參考指標及進出場策略,而且能夠隨著時間的改變不斷自我學習、成長。

2019 年底開始接觸深度學習,讓我對程式交易的大夢又露出了一線署光,一開始先玩 LSTM 做股價走勢預測,但是很快發現這不是我要的,對做「當沖交易」來說我要的是進出場點,也就是「突破」跟「轉折」的時間點,再後來的想法是讓深度學習幫我做台指期五分K線型態的分類,也試過用 sklearn KMeans 的 Cluster 做分類 ... 但是都沒有成功,我想我需要時間慢慢思考如何把「深度學習」應用到程式交易中。

2021 年初買了「強化式學習 - 打造最強 AlphaZero 通用演算法」這本書來研究,想試試看是否可以把「強化式學習」應用到台指期自動當沖交易上,書看了一半老毛病就又犯了(沒有耐心看完整本書,我習慣只看我有興趣、比較簡單的部分,迫不及待地開始動工打造我的第四代台指期自動當沖交易系統,這一代的系統並沒有使用強化式學習的方法,還是使用監督式學習,不過有加上了一點點強化式學習的概念。

我的作法是使用強化式學習中的「經驗重播(Experience Replay」方式來做監督式的學習訓練,先把「每一組四根五分K的特徵值、Action(= Label , 即 K 線型態分類、Reward(價值 / 回饋值、下一組四根五分K的特徵值」資料存到「經驗池(deque , 我稱它為「記憶(Memory」中,等累積到一定程度的記憶後(例如:兩年,再用這些記憶來訓練神經網路。

神經網路訓練,記憶資料期間從 2019/1/2 ~ 2021/1/4,總共有 27,104 筆記憶,共訓練了 1,039 次,loss:2.6580e-04,accuracy:0.9981。


利用訓練過的神經網路回測 2019/1/2 ~ 2021/1/4,資料有效的交易日共有 489 日,總共進場 793 次,平均進場率 1.6 次 / 日,賺錢次數 652 次,賠錢次數 141 次,勝率 82.2%,獲利 36,060 點,學習成果算中上。


現在交易系統相當於一個具有兩年當沖交易資歷的人(台指期當沖交易股齡:兩年,接下來用 2021/1/5 ~ 2021/4/16,神經網路未學習過的資料來驗證深度學習的能力到底可以到達甚麼程度。

從 2021/1/5 ~ 2021/4/16 資料有效的交易日共 64 日,總共進場 58 次,平均進場率只剩 0.9 次 / 日,賺錢 24 次,賠錢 34 次,勝率只剩 41.4 %,獲利 637 點。


研究了回測報告發現只要調整「人工智慧決策錯誤回補賣出 / 買進策略」的停損點,從買 / 賣價位改成進場時低 / 高點就可提升整體的勝率跟獲利。

策略調整後,從 2021/1/5 ~ 2021/4/16 資料有效的交易日共 64 日,總共進場 58 次,賺錢 29 次,賠錢 29 次,勝率提升到 50 %,獲利提升到 900 點。


另外,從回測結果可以發現最主要的問題 - 進場率太低,因為這段期間的資料是神經網路沒有學習過的,所以只要神經網路學習的資料變多,應該就可以再提升進場率。

如果以台指期當沖交易股齡兩年,當沖交易勝率 50%,我個人是覺得還可以接受,而且神經網路是可以持續學習跟成長的,深度學習的未來是值得期待的。


沒有留言:

張貼留言