跳到主要內容

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 (XMR) 礦池教學,所有 CryptoNight 算法的加密貨幣通用礦池 (Mining Pool),趕快架來讓人挖礦!

隨著 GPU 挖礦越來越難回收成本很多人選擇乾脆自己來開礦池讓別人挖,一來你只需要負擔伺服器營運成本 (比挖礦電費少非常多),也不需要購入太昂貴的硬體 (和挖礦設備相比更是天壤之別),那究竟要滿足什麼條件才能開礦池呢?而實際操作又是如何? 這篇將以「門羅幣」 Monero (XMR) 礦池為例來教大家怎麼從無到有架設一個礦池, 而且這是一個  CryptoNight  通用礦池 ,換句話說你也能拿這套來挖 ETN 、 TRTL 、ITNS ...等同樣算法的貨幣,可以說是 CP 值超高的礦池啊! (一個架好的 TRTL 礦池範例)  node-cryptonote-pool 就是一個基於 Node.js 的礦池系統,它能適用於每個 CryptoNote 的加密貨幣 (Bytecoin, Monero, QuazarCoin, HoneyPenny, etc..), 基本上你目前看到的 CryptoNote 礦池大多都是使用這套系統所架設的 ,它不但提供了現成的網頁介面,還能讓使用者隨時查詢挖礦進度,當然這套系統也有不少 Fork 的版本,這次使用的是最原版的作為範例。 node-cryptonote-pool GitHub :  https://github.com/zone117x/node-cryptonote-pool 安裝套件 這次會選擇架設在 Linux ( Ubuntu ) 系統上,如果是使用其它發行版的 Linux 基本上操作也都是一樣的,可能只有少部份的指令需要更改, Windows 的話則多半需要手動到網站上下載相關套件 (Packages) ,使用上比較麻煩一些但理論上也都是可行的。 安裝礦池會需要以下套件, 在 Windows 系統會需要逐一安裝,而 Linux 可以略過這個步驟,等會統一使用指令安裝即可。 比較需要注意的是它要求的是 v0.10+ 的 Node.js 版本 ,建議你就乖乖的裝遠古時代的 v0.10 版畢竟 Node.js 不同版本間的相容性問題很容易報錯。 Node.js v0.10+  Redis key-value store v2.6+  libssl required for the node-multi-hash...