網頁

2021年7月23日 星期五

台指期自動當沖交易日誌 2021-07-23

第四代台指期自動當沖交易系統」當沖交易股齡:兩年六個月

「深度學習資料」:2019/1/2 ~ 2021/7/2

今天是第四代台指期自動當沖交易系統自今年 4/12 開始線上模擬交易測試以來表現最精采的一次,表現雖然還不夠完美,但是完全達到當初我導入深度學習」時所想要達到的目標 -- 根據「四根五分鐘K線資料」,利用深度學習神經網路」做「K線型態分類

9:05 時深度學習神經網路根據 8:45 ~ 9:05 前的四根五分鐘K線資料進行分類判斷,分類判斷的結果是「賣出」,「第四代台指期自動當沖交易系統」根據「深度學習神經網路」的分類判斷結果執行「做空賣出策略」,開始第一回合交易。



9:20 時,「深度學習神經網路」根據 9:00 ~ 9:20 前的「四根五分鐘K線資料」進行分類判斷,分類判斷的結果是「買進」,「第四代台指期自動當沖交易系統」根據「深度學習神經網路」的分類判斷結果先執行「做空回補買進策略」,第一回合交易結束,平倉損益:-15 點;接著第四代台指期自動當沖交易系統」立即執行「做多買進策略」反手做多,開始第二回合交易。



9:50 時,「深度學習神經網路」根據 9:30 ~ 9:50 前的「四根五分鐘K線資料」進行分類判斷,分類判斷的結果是「賣出」,「第四代台指期自動當沖交易系統」根據「深度學習神經網路」的分類判斷結果先執行「做多回補賣出策略」,第二回合交易結束,平倉損益:+34 點;接著「第四代台指期自動當沖交易系統」立即執行「做空賣出策略」再反手做空,開始第三回合交易。



第三回合一直持續到 13:44:40 收盤前「第四代台指期自動當沖交易系統」執行「做空回補買進策略」才結束交易,平倉損益:+121 點。



2021年6月26日 星期六

新機器要註冊群益證券 SKCOM.dll 前一定要先安裝 Microsoft Visual C++ 2010 x86/x64 可轉散發套件

今天在一台全新的 Windows 10 機器上要註冊群益證券的程式交易 API SKCOM.dll 時出現了下面的錯誤畫面 :


Google 一下原來是要先安裝「Microsoft Visual C++ 2010 x86/x64 可轉散發套件」才行 , 我一開始先安裝 2019 最新的版本 , 結果還是不行 , 往下安裝了幾個較舊的版本也都不行 , 就是一定要 2010 的版本才行 XD , 最後找到 2010 SP1 的版本來安裝才搞定 .

「Microsoft Visual C++ 2010 x86/x64 可轉散發套件」可到這個網址去下載 : https://wmos.info/archives/8449



2021年4月30日 星期五

我的奇亞 (chia) 農場

最近看到奇亞(chia)的新聞興起了挖礦的念頭,但是首先須有一台挖礦機(農場),奇亞的挖礦機必須要有夠大的硬碟空間,還需要有 SSD,所以我的規劃是用一台 NAS ,然後在 NAS 上開一個 VM 來執行 chia 的錢包軟體,再用 NAS 裡的硬碟來開 chia 農場種 chia 幣

我買的 NAS 是 Synology DS1520+,Intel Celeron J4125-4core-2.0GHz,8GB DDR4 記憶體,一條 Synology-800G-M.2-NVMe-SSD 及 5 顆 Toshiba 4TB 硬碟。

安裝好 NAS 要開「儲存集區」時才發現一件事,Synology NVMe SSD 只能當快取來用,還好 Google 到如何把 Synology NVMe SSD 拿來當儲存空間使用的方法,順利完成一開始規劃的架構。

在 NAS 上劃分兩個「儲存集區」,「儲存集區 1」是由五顆一般的硬碟組成 RAID 5。


「儲存集區 2」裡只有一個 NVMe SSD。


「儲存集區 1」又劃分兩個「儲存空間」,「儲存空間 1」用來存放一般的檔案。


「儲存空間 2」只用來存放 chia 的「耕地」。


「儲存集區 2」中只有一個「儲存空間 3」,用來存放 VM 及 chia 的 Plot 檔案。


VM 中的檔案結構,C / E 槽都在 NVMe SSD 上,C 槽放 Windows 系統檔,E 槽只用來放 chia 的 Plot 檔案。


說好不太吃 CPU / RAM 資源的,有被騙的感覺。




耕地(Plot)都已經在 NVMe SSD 上作業了,感覺速度還是很慢,到底是哪裡出問題呢

後記
因為 NAS 上的 VM 效能太差,決定讓這個 VM 只要專心種田就好,至於圈地(Plot)的事改由一台 MAC Book Air + 一台 Windows 筆電,外接 1TB SSD 硬碟來做,等這兩台筆電圈好地(Plot)後,再把耕地移到 NAS 中的農場,讓 NAS 上的 VM 統一管理耕種 chia 事宜。


2021年4月23日 星期五

台指期自動當沖交易日誌 2021-04-23

小鬼昨天沒有進場,今天犯了一個學習上的錯誤,小賠 43 點

9:10 時分類錯誤不符合小鬼的進場策略錯失一個絕佳的做多買點,做多買進的分類有兩種,買進 1」是屬於「突破上漲買進,也就是說「四根五分K」的最後一K必須是創高的狀態才符合「買進 1」分類,9:10 時的分類應該是「買進 2」分類,也就是「轉折上漲買進


9:55 時小鬼進場做空,在 10:20 時被「人工智慧決策錯誤回補買進 1」的出場策略停損了




2021年4月21日 星期三

台指期自動當沖交易日誌 2021-04-21

小鬼前兩天都沒進場,今天 10:05 時進場搶了反彈,13:29:40 因為期指結算停利出場,獲利 61 點









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%,我個人是覺得還可以接受,而且神經網路是可以持續學習跟成長的,深度學習的未來是值得期待的。


2021年4月16日 星期五

台指期自動當沖交易日誌 2021-04-16

本來以為今天不用寫日誌了,沒想到 12:40 時小鬼竟然進場做空,還好 13:00 就認錯出場,沒有造成更大的虧損




2021年4月15日 星期四

台指期自動當沖交易日誌 2021-04-15

小鬼今天 9:05 根據第一組四個五分K線型態進場做多,9:45 因為符合「人工智慧決策錯誤回補賣出」出場策略的條件停損出場,今天的操作真是可惜,不過從 9:05 到 9:45 這段期間的走勢還真是顛頗,「人工智慧決策錯誤回補賣出」這個出場策略是一個保險機制,可確保做錯方向時不會大賠,這個策略的參數還有調校空間,等累積到夠多的次數後再來做調校









2021年4月14日 星期三

第四代台指期自動當沖交易系統架構

 這一代的台指期自動當沖交易系統是以「深度學習K線型態分類系統」作為整個程式交易的決策核心

以連續四根五分K(二十分鐘)為一組K線型態,將這四根五分K的特徵資料丟給「深度學習K線型態分類系統」做分類(盤整、上漲、下跌、突破上漲、突破下跌、轉折上漲、轉折下跌),最後將分類結果再丟給「進 / 出場策略」做判斷是否符合進 / 出場條件

例如 : 「深度學習K線型態分類系統」做出的分類結果是「轉折上漲,「進 / 出場策略」會根據這個結果來判斷其他參數條件是否符合,若條件符合就會進行後續的下單交易,若條件不符合則會忽略分類結果不做下單交易動作。



台指期自動當沖交易日誌 2021-04-14

總算趕在 4/11 以前貼完 2019-01-02 ~ 2021-04-09 的深度學習標籤、完成深度學習訓練,並且調校好進 / 出場策略的參數

4/12 開始以「模擬交易」操作模式進行即時自動當沖交易,4/12 跟 4/13 兩天小鬼都沒有進場,今天 11:15 以前台股被殺的血流成河時,小鬼竟然進場了,而且還抓到一筆大的,讓原本往下降的信心稍微回升了一點。




2021年3月29日 星期一

更新群益證券 API-2.13.27 後, Login 時出現錯誤訊息 "SK_WARNING_REGISTER_REPLYLIB_ONREPLYMESSAGE_FIRST"

原因可以參考:  https://easontseng.blogspot.com/2019/07/api-21317-login-skwarningregisterreplyl.html

我的作法:

在 class SKReplyLibEvent: 裡面加這段程式碼

def OnReplyMessage(self, bstrUserID, bstrMessage, sConfirmCode=0xFFFF):

    #根據API 手冊,login 前會先檢查這個 callback,

    #要返回 VARIANT_TRUE 給 server,  表示看過公告了,我預設返回值是 0xFFFF

    print('OnReplyMessage', bstrUserID, bstrMessage)

    return sConfirmCode

       

2021年2月24日 星期三

TensorFlow2.4.1 CUBLAS_STATUS_ALLOC_FAILED 問題解決方法

 在網路上找到的解決方法 .


import tensorflow as tf

gpus = tf.config.experimental.list_physical_devices('GPU')

if gpus:

    try:

        # Currently, memory growth needs to be the same across GPUs

        for gpu in gpus:

            tf.config.experimental.set_memory_growth(gpu, True)

        logical_gpus = tf.config.experimental.list_logical_devices('GPU')

        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")

    except RuntimeError as e:

        # Memory growth must be set before GPUs have been initialized

        print(e)


2021年2月7日 星期日

Install Windows 10 + python 3.8.5 + CUDA 11.1 + cuDNN 8.1.0 + TensorFlow 2.4.1

1. Create python 3.8.5 Environment

2. Update Nvidia graphic driver version to 461.40

https://www.nvidia.com/download/index.aspx?lang=en-us

3. Download and Install CUDA 11.1 for Windows 10

https://developer.nvidia.com/cuda-toolkit-archive

4. Download and unzip cuDNN 8.1.0

https://developer.nvidia.com/rdp/cudnn-download#a-collapse805-110

Copy bin, include, lib three folders under cuda unzip folder to 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1

Copy bin folder under cuda unzip folder to 

<anaconda_install_path>\Anaconda3\envs\<env_name>\Library

Add :

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib\x64

to [Path] System Environment variable

5. Install cudatoolkit 11.0.221
    conda install cudatoolkit

6. Install TensorFlow 2.4.1  (This version include TensorFlow-GPU and Keras)
    pip install --upgrade tensorflow

7. Verify TensorFlow 
    from tensorflow.python.client import device_lib
    
    print(device_lib.list_local_devices())

8. Verify Keras (tensorflow.keras)
     
    import keras ==> import tensorflow.keras