跳到主要內容

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 的設置,這些影響結果非常大,一但設的不好還可能一直原地踏步甚至越跑越低呢。





留言



這個網誌中的熱門文章

WinRAR - 繁體中文版、免費版,別再破解了,老牌壓縮軟體直接免費給你用

WinRAR 應該對於所有 Windows 使用者一點都不陌生,可能也是很多人壓縮、解壓縮檔案的首選,舉凡 RAR、ZIP、7-Zip、TAR ...等檔案格式都可以處理,製作自解壓縮 (.EXE) 檔也沒問題,也算是最老牌的解壓縮軟體之一。 WinRAR 官方網站 :  https://www.win-rar.com 繁體中文版 :  https://rar.tw/download.html 永久免費簡體版 :  http://www.winrar.com.cn/download.htm 其實我也不太理解為什麼一個 WinRAR 可以有這麼多版本、不同語系的官網,畢竟在最原始的官網內也有「漢語」(簡體中文) 的選項,所以其他的國家自己的官網算代理商嗎? 如果真的要說我會比較建議到 英文版的官網 下載,畢竟這種軟體轉了一手又一手,加了什麼都不知道。

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

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

如何領取 Monero 分叉幣 MoneroV?附 Remote Node 免下載區塊鏈、快速同步

MoneroV 在先前已經完成分叉,目前也有在一兩間小型的交易所上市可以買賣,只要在  Monero 區塊高度 1,564,965 時持有 XMR 就可以得到十倍的 XMV, 但必須得是在自行保管私鑰的錢包、MyMonero 或有支援的交易所才能領的到 ,前兩項可以自行領取,交易所則得等所方派發,但如果你使用的交易所沒有支援這項 Fork 那當然就領不到啦。 MoneroV Wallet GitHub :  https://github.com/monerov/monerov GUI Wallet :  https://github.com/monerov/monerov-gui 上方的連結是 GitHub 原始碼,不知道為什麼在 GitHub 上 MoneroV 並沒有 Release 成可以直接使用的執行檔,但在官方網站上還是有提供的,可以到 官網 找到自己對應系統的錢包下載,如果不熟指令介面可以選擇 GUI Wallet。 開啟 GUI Wallet 後選擇 「Restore wallet from keys or mnemonic seed」 來匯入原本的 Monero 錢包,如果不放心將私鑰匯入可以先將 Monero 錢包內的餘額移出,已經產生過快照就不需要擔心沒辦法 Claim 自己的 XMV 了。 如果是使用私鑰來匯入的話則依序填入公開地址、View key、Spend key,以及選擇錢包名稱和儲存在哪個路徑, 即使是錢包檔也應該要好好保管,否則之後就得靠私鑰再匯入一次。 接著設定密碼,這就是開啟這個錢包檔的鑰匙,但如果錢包檔遺失了這個密碼也沒辦法將 XMV 取回,只能靠私鑰再重新匯入。 5.199.161.136 : 9538 接著選擇使用 Remote node,這樣就不必自己下載數十 GB 的區塊鏈檔案和花一大堆時間驗證、同步。 使用別人的 Daemon 來交易和領取 XMV 並不會有安全疑慮 ,只是在連接時對方可以知道的 IP。但其實就算是自己 Host Full Node 也是相同的,仍然會需要 P2P 的和它人連接也將 IP 暴露在公網上。 接著就會開始和遠端的 Node 同步了,左下角可以看到同步進度,完成後 XMV 就會顯示在你...