跳到主要內容

Gekko 交易機器人 - 使用 Japonicus 的遺傳算法 (Genetic Algorithm) 找到交易策略表現最佳的參數 (Parameters)



常常下載了一個策略回來但卻怎麼都跑不出滿意的回測 (Backtest) 結果,往往都得將參數一改再改重複嘗試,但這個過程煩瑣而且得要考量到的面向方常多,各個參數都是息息相關,改變了就牽一髮而動全身,所以要找到最好的組合更是難上加難。所以可以使用遺傳演算法 (Genetic Algorithm) 來找到一定區段內最好的參數設定,如果對於遺傳算法不了解的可以參考下方這個 MIT 的 Open Course,簡單而言就是一次丟入一定 Population 的親代讓它演化 (繁殖),保留表現良好的子代再讓它變成親代繼續繁衍更優良的配對,藉由 Mutation (突變) 和 Crossover (交叉組合) 保持一定的變異程度來讓策略的執行可以達到不僅僅是近程內的最高點而是更接近全域高峰 (Global High)。



Japonicus
GitHub : https://github.com/Gab0/japonicus


而 Japonicus 就是完全針對 Gekko 所設計的遺傳演算法 (Genetic Algorithm) 工具,核心是基於 Python 的 DEAP 程式庫提供整個演化算法的功能,以及有圖形化介面的輸出在 http://localhost:5000 方便使用者讀取,每二十代演化都會將截至目前最佳的參數輸出,變成能直接使用於 Gekko 策略的 .toml 檔。

原作者是建議在 Python 3.6 的環境下安裝、執行,所以為了確保版本正確而且妥善安裝相關部件 (包括 python-dev、pip3...等) 最好先依序鍵入下方指令。(以 Ubuntu、Linux Mint 為例)

$ sudo add-apt-repository ppa:jonathonf/python-3.6
$ sudo apt update
$ sudo apt install python3.6
$ sudo apt install python3.6-dev
$ sudo apt install python3.6-tk
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3.6 get-pip.py
$ cd /usr/lib/python3/dist-packages
$ sudo cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so


確保了 Python 正確安裝後,就可以使用下列指令將 Japonicus clone 回來,或直接到 GitHub 下載也可以。(如果沒裝 git 記得先 sudo apt-get install git)

git clone https://github.com/Gab0/japonicus.git

下載回來後設定檔案有幾處需要更改,可以在 configStrategies.py 下方加入自訂的策略參數 (沒加是沒辦法演化自訂策略的),以如圖的寫法設定參數區段。


以及如果你是使用 Windows 系統是沒有 Home 這個根目錄的,需要把 Settings.py 內的 HOME+ 移除。


另外在 Settings.py 內也可以設定 K 棒時間 (candlesize) 以及 dataset_source 建議使用預設 None 就好,它會自動調出已經在 Database 內的歷史數據來跑,但要注意這些數據的時間區段必須長過 Settings.py 內的設定,否則將被判定無效。


# Initial population size, per locale
'POP_SIZE': 30,  // 初始親代數量

# number of epochs to run
'NBEPOCH': 400,  // 一共要跑幾代

# show current best settings on every X epochs. (or False)
'evaluateSettingsPeriodically': 20,  // 每多少子代會輸出目前最佳的參數

# -- Genetic Algorithm Parameters
'cxpb': 0.3, # Probabilty of crossover  // Crossover (交叉配對) 的比例
'mutpb': 0.7,# Probability of mutation;  // Mutation (突變) 的比例
'_lambda': 7,# size of offspring generated per epoch;  // 每一代產生多少個子代
Settings.py 內也有一些和 GA 相關的參數可以更改,如果你不確定更改這些數值的影響可以先使用預設,等覺得結果有需要修正時再來微調。


cd japonicus
sudo pip3.6 install -r requirements.txt
再來就可以使用上述指令安裝 Japonicus 和它所需的程式庫,記得先 CD 到自己的資料夾中再進行安裝。


python3.6 japonicus.py [-g|-b] [-c] [-k] [--repeat <X>] [ [-i|-r|--strat <Strategy>] [-w]
[主要演算法選擇]

    -g  使用遺傳算法

    -b  使用貝氏最佳化

[實驗性的 GA (可選)]

    -c  使用實驗性的 GA 模組

[策略選擇] 

    -r  隨機策略

    --strat  選擇特定策略

    -i  使用遺傳算法結合技術指標創造策略

[重複]   

    --repeat  重複遺傳算法 X 次

[輸出介面選項]

    -w  在網頁 UI 內顯示輸出結果 (http://localhost:5000)

    -k  使用一個 Gekko 實例來代替完整運作的 Gekko (所以就不需要開 Gekko 了)
在執行 Japonicus 前必須先開啟 Gekko 才能調用它的 Datasets 以及進行回測,而執行 Japonicus 的指令如上,後方參數可以依據說明修改。


之後 Japonicus 就會依據你所給定的參數區段去演化最佳的組合,Candlesize 越短自然就需越長時間來回測,而演化的過程也會較慢,雖然每 20 代就會輸出一份截至目前最佳的參數組合,但真的要跑完 400 代仍然需要不少時間。


而在網頁 UI (http://localhost:5000)  也可以看到即時的演化圖表,分別為最高收益、平均、變化、最低,可以觀察策略有沒有隨著子代產生而有更好表現的趨勢,如果沒有可能要重訂區段或修改 Settings.py 內的 GA 參數。


每 20 代就會在終端機上顯示出截至目前最好的參數,或者也可以直接到資料夾內 /output/evolution_gen.log 查看。


基本上跑 Genetic Algorithm 非常的費時,尤其是在 Candlesize 調短、參數眾多的情況下更是,但 Japonicus 有提供很好的圖形介面和很簡單直觀的操作方式,算是為想使用 GA 的人省下了非常多麻煩,如果想增加效率也推薦大家把策略的 Debug 功能關掉,讓它可以跑得快一些,另外也要注意參數區段和 GA 的設置,這些影響結果非常大,一但設的不好還可能一直原地踏步甚至越跑越低呢。





留言



這個網誌中的熱門文章

Linux (Ubuntu) 查詢硬碟容量、剩餘大小指令

在 Ubuntu Desktop 版本或有安裝 GUI 像 Xfce 的 Server 版本當然可以直接從圖形介面查看硬碟容量和已經使用的大小, 但如果是在純 CLI 版本或使用 SSH 連線時呢?那就需要用到指令了。 顯示硬碟容量、已使用、可用大小。 df -h 查詢資料夾所占硬碟的大小。 du -h 查詢檔案大小 ls -l

RealVNC - 支援多系統的 VNC Viewer,免費遠端桌面客戶端 (Windows / Linux (Ubuntu) / Raspberry Pi /...)

對於不熟悉 SSH 介面的使用者來說可能第一個想法都會是使用遠端桌面,但要知道大多數的 VPS 主機都是提供 Linux 系統 (Ubuntu / RedHat / Debian...等),它們架好的 VNC Server 多半是沒辦法直接以 Windows 系統內建的「遠端桌面連線」來操作的,就好像兩端的通道是開了起來但卻仍說著不同的語言,所以就需要專用的 VNC Viewer 來連線, 而 RealVNC 支援非常多不同的作業系統環境,包括 Windows、Linux、Raspberry Pi、Android、iOS...等,幾乎可以說是一應具全啦。 RealVNC 官方網站:  https://www.realvnc.com/en 下載頁面:  https://www.realvnc.com/en/connect/download/viewer 只要從 「File > new connection」 就可以新增一個連線,爾後只要點選介面中已設定好的連線就可以隨時進入遠端主機,而主機端 (VPS) 也記得要先架設好 VNC Server 和新增防火牆例外,避免被拒絕的連線。

如何將 ISO 檔上傳到 VMware ESXi 6.5 並且用虛擬光碟開機?適用於安裝 Linux 或其它作業系統

在將實體機器使用  VMware ESXi 6.5 虛擬化之後就可以在它所提供的網頁管理介面操作每個虛擬個體,但要怎麼把用來安裝系統的 ISO 檔傳到虛擬機呢?而這些 ISO 檔會需要做成開機隨身碟的模式才能用嗎? 其實 ESXi 6.5 可以直接建立一個虛擬光碟機來驅動安裝系統用的 ISO 檔 ,所以安裝起來甚至會比實體機更簡單方便。 首先進到 ESXi 的管理介面 > 儲存區 ,點選 資料存放區瀏覽器 。 然後就能上傳事先下載好的 ISO 檔,不一定要存在哪一層路徑或特定位址,但建議新開一個資料夾方便整理,之後也可以直接指定這個路徑內的 ISO 檔。 然後在 虛擬機電源關閉 的情況下進入編輯設定。 新增一台 CD/DVD 光碟機。 選擇資料存放區 ISO 檔案。 瀏覽到剛剛上傳 ISO 檔的位址。 並且在虛擬機器選項的地方強制在 下次開機時強制進入 BIOS 設定畫面。 然後啟動虛擬機電源並開機後 到 Boot 的地方將 CD-ROM Drive 順位提高 ,就能以剛剛掛載的虛擬光碟機開機了。