跳到主要內容

發表文章

目前顯示的是有「Gekko」標籤的文章

Gekko 交易機器人 v0.5.14 改版資訊

好一陣子沒有看到 Gekko 交易機器人發布新版本了,這次 v0.5.14 雖然也沒有大改,但確確實實增加了一些新功能和修正 Bug, 比較可惜的是自訂資產的功能還是沒有出來,倒是 Telegram Bot 看起來好用多了 ,也修正了不少針對交易所的 Bug (包括幣安的 Minimal order values) 以及 Roundtrip 計算錯誤的問題,簡單的說就是趕快更新吧! Gekko Trading Bot GitHub :  https://github.com/askmike/gekko 官方網站 :  https://gekko.wizb.it 安裝教學 :  https://goo.gl/2HPvVm v0.5.14 更新與修正 : [EXCHANGE]: 修正 GDAX 缺少的常數 ( @cmroche  -  #1759 ) [EXCHANGE]: 新增動態的 coinfalcon 市場更新 ( @vivekmarakana  -  #1761 ,  #1772 ) [STRAT]: 從開始時間減去 K 線長度來判斷是否成熟 ( @ansonphong  -  #1793 ) [INDICATOR]: 修正 varPPO 策略與 TSI 指標 ( @Paulovms  -  #1799 ) [EXCHANGE]: 修正 Binance 取消下單功能 ( @werkkrew  -  #1806 ) [EXCHANGE]: 修正 GDAX 取消下單功能及其他 Bugs ( @werkkrew  -  #1808 ,  #1818 ) [CORE]: 實際交易發生時讓策略可以有所對應 ( @werkkrew  -  #1810 ) [INDICATOR]: 修正 Dema 指標 ( @Paulovms  -  #1822 ) [EXCHANGE]: 修正 Binance 在 Roundtrip 時間顯示上的錯誤 ( @rkingy  -  #1846 ) [EXCHANGE]: 更新動...


Gekko 交易機器人 - 網頁 UI 也能用 Telegram Bot,一有買賣就會主動提醒還可隨時查價,不用再時不時開網頁關心你的機器人

Telegram Bot 的交易提醒功能本來只有在 CLI (Command-line interface) 的 Gekko 可以使用, 它會在有新的買賣建議 (Trading advise) 時主動提醒你 ,還有提供查價功能,能隨時掌握貨幣的走勢,雖然功能還很陽春但聊勝於無。不過網頁 UI 卻不知道為何把這項功能拔除了?可能是為了避免同時交易多組貨幣導致 Telegram Bot 的錯誤, 所以在使用時記得只能建立一個機器人,否則 Telegram Bot 會不知道要回報哪一個機器人的數據。 那在首先你會需要在 Telegram 建立一個新的 Bot,所以要去找 @BotFather 叫他生個孩子給你,詳細的操作可以看 這篇 。 config.telegrambot = {   enabled: true,   emitUpdates: true,   token: ' 你的 Token ',   botName: ' Bot 的名字 ' } 然後開啟 Gekko 資料夾內 web\routes\baseConfig.js ,將這段程式碼貼入並更改成自己的 Bot Token (跟 BotFather 要到的那個)。 npm install node-telegram-bot-api@0.24.0 然後安裝跑 Telegram Bot 必需的套件。 this.emitPrice(); 這個步驟是可選的,可以修改 Gekko 資料夾內的 plugins\telegrambot.js ,加入上面這一行, 如此一來在它主動通知你有交易時會順便報價 ,比較方便知道機器人的買賣點。 然後就可以開啟 Gekko 且隨便執行一個 Live 的機器人 (Paper trader、Tradebot 皆可),並到你的 Telegram Bot 打 /price 測試看看有沒有反應,如果有的話就恭喜你裝成功了。不過還是要記得它沒辦法處理多筆機器人的數據, 因此一個網頁 UI 只能對應一個 Telegram Bot 和一個 Live 機器人。


SQLite 的 .db 檔案怎麼開?透過 DB Browser 修改、刪除資料庫內的資料表 (修改 Gekko Datasets history)

在使用 Gekko 附屬的 SQLite 資料庫時往往從 UI 寫入資料後就不知道要從哪裡修改,匯入的歷史紀錄也沒辦法從網頁介面刪除,在做 Japonicus 遺傳演算 時可能會錯誤抓取到不想要跑的歷史數據, 那就可以用 DB Browser 來開啟 /history 內的 .db 檔案來進行修改,可以把不要的資料表直接刪除,就不必全部砍掉重抓了。 而從外部下載來的歷史資料也可以藉由同樣的方式整併到一個 .db 內。 DB Browser 官網 :  http://sqlitebrowser.org 下載並安裝完適合自己作業系統的 DB Browser 後就可以從 「打開資料庫」 中瀏覽 Gekko 資料夾中的 history,開啟想要修改的歷史紀錄。 舉例來說我開啟了 binance_0.1.db 就是先前匯入的幣安歷史數據,在這裡已經條列好每個資料表分別代表一種貨幣組合,能把你不要的組合刪除,甚至到 Browse Data 也能修改交易紀錄 (應該是沒必要啦)。


Gekko 策略 - 三種不同版本的 RSI_BULL_BEAR,以及在 Tradingview 看盤也可以將 RSI_BULL_BEAR 加入作為指標

RSI_BULL_BEAR 是由 @ tommiehansen 所撰寫的 Gekko 交易策略,除了最原版的之外,現在最被討論的大概就是加上 ADX 指標調整的 RSI_BULL_BEAR_ADX 了,ADX 可以確認市場是否存在趨勢以及衡量其強度,只要搭配好的參數很容易能超出原版的表現,在對不同幣種的適應性下也更好, 但現在又有由 @ Kohette 再加入了 Ping Pong trading 的概念,簡單的說就是在買入後會馬上掛一個高於原價 % 數的賣單,賺取短線的反彈 ,賣出時反之亦然。 RSI_BULL_BEAR (原版) JS :   https://github.com/tommiehansen/gekko_tools/blob/master/strategies/RSI_BULL_BEAR.js TOML :   https://github.com/tommiehansen/gekko_tools/blob/master/strategies/RSI_BULL_BEAR.toml RSI_BULL_BEAR_ADX  JS : https://github.com/tommiehansen/gekko_tools/blob/master/strategies/RSI_BULL_BEAR_ADX.js TOML :    https://github.com/tommiehansen/gekko_tools/blob/master/strategies/RSI_BULL_BEAR_ADX.toml RSI_BULL_BEAR_PINGPONG JS :   https://github.com/Kohette/gekko_tools/blob/master/strategies/RSI_BULL_BEAR_ADX_PINGPONG.js TOML :   https://github.com/Kohette/gekko_tools/blob/master/strategies/RSI_BULL_BEAR_ADX_PINGPONG.toml 也因為 RSI_BULL_BEAR 幾乎是討論度最高的策略,@ simons.ph...


Gekko 批次回測工具 (Backtest Tool),一次跑多個貨幣組合,達到多線程 (Multithreading) 處理

這個是由 @ xFFFFF 提供的 Gekko 批次回測工具,它能在同一時間回測多個策略或不同的貨幣組合,並將結果直接顯示在 CMD 上並輸出成 .csv 檔。 除了方便一次回測大量數據外,它的重點是能達到多線程 (Multithreading) 執行 ,Gekko 本身並沒有這項功能,所以就算你有 6C12T 它也是只會使用 1C1T,比較直覺的解決辦法就是多開幾個網頁 UI 或 CLI 就好了,但那會需要個別設定很浪費時間,而這個 Backtest Tool 剛好幫你解決了這個麻煩。 GekkoBacktestTool GitHub :  https://github.com/xFFFFF/GekkoBacktestTool 首先先到 GitHub 把它下載回來,或使用 git clone https://github.com/xFFFFF/GekkoBacktestTool.git 指令。並將裡面的 backtest.pl 與 database.csv 複製到 Gekko 資料夾內。 my @strategies = qw(  neuralnet RSI_BULL_BEAR_ADX ); my @pairs = qw( binance:USDT:ETH binance:BTC:NEO ); 再來打開 backtest.pl 並修改 @strategies (選擇的策略) 和 @pairs (交易的組合) ,要填入幾個基本上是沒有上限的,可以一次回測多個節省時間,填寫兩個策略或交易組合間記得要空白。也可以順便修改下方的策略 參數、Candlesize、Historysize ...等, 這些會決定你策略執行的結果。 sudo cpan install Parallel::ForkManager Time::ParseDate Time::Elapsed 然後先使用指令安裝 Parallel。 perl backtest.pl 先 cd 到 Gekko 資料夾後就能開始回測了,結果會直接顯示在終端機上。 和使用 CLI 一樣,所有策略的參數都必須在剛剛的 backtest.pl 內設置 ,這邊只會呈現結果。 database....


Gekko 交易機器人 - 使用幣安 Binance API 都不交易怎麼辦?更新 binance.js 和改變各市場交易規則參數

之前一直沒碰過這個問題,就是在手動出掉部分 BTC 之後才發現 Gekko 使用幣安 Binace API 交易 (Tradebot) 時有好一陣子不執行交易,用 PaperTrader 跑都正常,但實際操作的機器人就是不動,之後把 Log 下載回來看才知道原來是交易量太小沒辦法掛單,可是明明就有超過幣安官方規定的交易門檻阿? 其實是先前 BTC 市場交易門檻一度更改為 0.002 但後來又換回 0.001,而 Gekko 內的設定還停留在舊的數值所以導致自己用幣安網頁是可以交易,但機器人怎樣卻都不會掛單的窘境。 Log 裡面就記錄的很清楚, Wanted to buy BTC but the amount is too small ,但這是市場規則沒有更新而導致的誤判。 npm uninstall binance npm install binance 如果你碰到的問題並不是交易量太小無法掛單, 可以先解除安裝 binance.js 再重新安裝最新版的試試看 ,使用舊版的可能也會導致類似無法交易的錯誤。 確定是交易規則所導致的錯誤可以打開 Gekko 資料夾中的 /exchanges/binance-markets.json 手動更改交易參數, 目前所有 BTC 市場最小下單金額都是 0.001 ,改完後儲存就不會再碰到相同錯誤了。 幣安的交易參數規則可以參考 官方的文件 ,都有明列每個市場的最小下單金額,你可以一次把它改完或只更新自己有在用的市場就好。


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 ...


Gekko 交易機器人 - 更改 UIconfig timeout 解決網頁版回測 (Backtest) 跑太久會當掉的問題

如果 Gekko 是在跑一些運算量大的策略又加上歷史數據多的話,常常網頁的 UI 都會跑到當掉,最後等了半天還是什麼都沒顯示出來, 其實會有這個問題是因為在 UIconfig.js 裡面設定了一項 timeout 值,預設值是兩分鐘, 換句話說網頁 UI 只要兩分鐘就會連線逾時了,那最後策略跑出來的結果當然就顯示不出來啦。要解決這個問題也很簡單,只要更改這個檔案的 timeout 時間就好了 。 跑啊跑就是跑出不出來,跑到最後連 Running backtest 這行字都不見了 找到 Gekko 資料夾中 web/vue/UIconfig.js 這個檔案,看是要用記事本或 Notepad++ 打開。 將 timeout 時間改長,預設是兩分鐘, 像我改成 2,160,000 就是六十分鐘才會 timeout,基本上大部分策略都夠跑了。 接著你就可以去試跑那些永遠在跑完前就先當掉的策略啦。至於 Gekko 為什麼要預設一個這麼短的 timeout 時間也是很奇怪,好在論壇有人發現這個解法才讓那些運算複雜的策略能被更精準的測試。


用 http-auth 基本身分驗證為安裝在雲端 (AWS、GCP) 的 Gekko 做一個簡單登入介面,避免交易所 API 被盜用

Gekko 本身的網頁 UI 沒有附帶任何身分驗證機制,換句話說如果開在公網上只要有你主機 IP 的人都可以進到控制介面,雖然 Gekko 加入了 API Key 之後是沒辦法看到原始的金鑰字串,但畢竟仍然有交易功能,可能被有心人士惡搞。目前的做法多半會是從主機端的安全來著手, 開在 Google Cloud (GCP) 或 Amazon EC2 的可以使用它本身的防火牆規則來去禁止非你以外的 IP 連線 ,但對於大多數人可能不像我有靜態 IP,變得每次 ISP 重新分配 IP 或使用別的網路連線又要重設,為了安全要付出的麻煩還真不少阿。 所以就想到做一個很陽春的 http-auth 基本身分驗證機制,簡單說就是要登入啦, 在讀入 Gekko UI 之前得要先輸入設定的帳號密碼才能通關 ,雖然不敢保證這個安全機制萬無一失,但至少是多了一層保護,而且安裝也很簡單,最重要的還是不要隨便透漏自己的 IP 給他人啦。 npm install http-auth 首先要安裝 http-auth 的套件才能使用身分驗證的功能。 再來打開 Gekko 資料夾中的 web/server.js,分別加入以下兩段程式碼。 var auth = require('http-auth'); var basic = auth.basic({ realm: "Restricted", file: __dirname + "/ pass.htpasswd " }); 這段加到 server.js 的最上方就可以了, pass.htpasswd 就是你的金鑰,可以自行更改檔名或路徑,之後記得上傳到與程式碼指定的相同路徑就好了。 app.use(auth.koa(basic)); 這段則加到 const app = koa(); 後面即可。 之後就要製作金鑰檔,基本上就是文字檔, 簡單的格式就是「 帳號:密碼 」 ,建議你的密碼可以拿去加密,不要直接放解密的密碼比較好。 把這個檔案存成 pass.htpasswd 或你剛剛指定的檔名,上傳到 gekko/web 內 (或你指定的路徑)。 製作加密 (encrypt) 的密碼可以參考 這個網站 的產生器,只要把密碼...


Gekko 交易機器人 - TEMA 策略 (Triple EMA strategy),附帶有安全網機制 (SafetyNet) 來避免在熊市被套牢

這是一個以 EMA (指數移動平均) 決定做多做空的交易策略, 但當短期趨勢超過了 EMA 線則會在上方使用一個更長時間的 SMA (簡單移動平均) 作為整個交易系統的安全網 (SafetyNet) ,在短期的 SMA 超越這個安全網前會避免任何可能被套牢的交易。所以簡單理解的概念就是在市場看多的時候進行交易,而市場下跌時則避免摻入其中,但實際上的運作狀況仍然有待測試。 JS Code : /* TEMA Triple EMA strategy with 'safety net' --- Uses 1x TEMA to go long/short if short trend is over TEMA. On top of this it uses a longer SMA as a safety net and simple stays out of the market if short SMA is under that SMA. --- The general idea is to buy in good market conditions and simply not be a part of longer downwards trends. */ // req's var log = require ('../core/log.js'); var config = require ('../core/util.js').getConfig(); // strategy var strat = { /* INIT */ init: function() { // base this.name = 'TEMA'; this.requiredHistory = config.tradingAdvisor.historySize; this.debug = false; // outputs messages, set to false to increase performance // add indicators and reset trend this.resetT...


[ 2/27 更新] Gekko 交易機器人 - 策略 (Strategies) 彙整,整理網路上找到的交易策略

Gekko 的交易策略 (Strategies) 在網路上有非常多資源,這篇會整理列出實測過可以使用的策略,但不保證它的表現和收益一定合乎預期,甚至有些策略即使在預設的參數下也沒辦法發揮的非常好,不過對於有興趣開發策略的人來說這些應該都是不錯的範本,這些策略都不是出自於我,只是提供一個整理和參考,實際的使用情況我也不負任何責任,敬請使用 Backtest 或模擬交易功能來測試策略,不要輕易使用真實資金冒險。 I DO NOT OWN THESE AMAZING STRATEGIES. If you are the original author of the strategies and you don't want these to post on this site, please contact me. I'll remove it asap and I'm sincerely sorry to offended your copyright. RSI_BULL_BEAR_ADX_PINGPONG (2/27 更新) 需要安裝 : 無 JS File :  http://justhodl.ml/strat/RSI_BULL_BEAR_ADX_PINGPONG.js Toml File : http://justhodl.ml/strat/RSI_BULL_BEAR_ADX_PINGPONG.toml 來源 Source : https://github.com/Kohette/gekko_tools/tree/master/strategies aroon_public (2/14 更新) 需要安裝 : helper.js JS File :  http://justhodl.ml/strat/TEMA.js Toml File : http://justhodl.ml/strat/TEMA.toml 來源 Source : https://github.com/tommiehansen/gekko_tools TEMA (2/12 更新) 需要安裝 : 無 JS File :  http://justhodl.ml/strat/aroon_public.js ...


Gekko 交易機器人Command-line 介面 (CLI ) 如何使用 Telegram bot 來查詢價格、收益

Gekko 交易機器人的 Command-line 介面非常適合拿來跑運算量較大的策略或回測 (Backtest) 大量數據,占用資源低而且速度快,我用到目前從來沒有 Crash 過,也沒出過 child process died 的錯誤, 但 CLI 缺點就是沒辦法產生交易圖表,而且要即時監控也比較困難,所以能用 Gekko 的 Plugins 來補足這點。 Telegram bot 就是能直接向 Telegram 你所創的機器人查詢目前價格、交易收益,雖然現在功能還很陽春,但至少比要開啟 CMD 來看收益要方便得多。 首先你要登入自己的 Telegram 帳號,然後跟 BotFather   用 /newbot 要求一個新的機器人 ,接著它會詢問你機器人的名字、帳號,都回答完了就會產生一個 Bot Token,這串等會就會拿來填到 config.js 裡。 config.telegrambot = {   enabled: true,   emitUpdates: true,   token: ' 你的 Bot Token ',   botName: ' 你的 Bot Username ' } 接著把上述的 Code 置入到 Gekko 資料夾的 config.js 中, 將 token 改成剛剛得到的 Bot Token,botName 則是剛剛的 Bot Username。 npm install moment npm install lodash npm install node-telegram-bot-api 在執行 Gekko 之前得要先安裝這三個套件,telegrambot.js 會需要這三個套件才能正常啟用,記得安裝前要先 CD 到 Gekko 目錄。 接著就能用 CLI 開始 Gekko 跑策略啦。 然後能在 http://t.me/你的BotUsername 找到你的 Telegram Bot,目前一共只有兩個指令分別是 /price 、 /advice ,分別查詢目前的價錢和策略提供的建議。 不過目前一個 Telegram Bot 只能和一個 Gekko 作連動 ,意思就是如果你開了兩個 Gek...


在一年免費的 Google Cloud (GCP) 上面安裝 Gekko 交易機器人,免開機就能隨時讓程式操盤

雖然之前用過 AWS EC2 來裝 Gekko,但想說還是來用一個 Google Cloud (GCP) 的來當備用,順便比較看看哪個比較好,一樣都是一年免費, Google 是採用額度制的,提供你 $300 的使用額度,所以可以選擇用更好的設備 (但可能用不到一年 $300 就花完了) 來建置 Gekko,兩者的優劣可以自己比較看看,如果還沒裝到 AWS 的不妨試試看 Google Cloud,介面算做得比較好。 Google Cloud (GCP) 官方網站 :  https://cloud.google.com 選用 Google Cloud 安裝 Gekko 的原因當然是為了使用運算 (Compute Engine) 功能,但它還有非常多其他的功能,反正 Gekko 也只會占用少部分效能,不妨多去玩玩 GCP。 註冊完後就可以從主控台左邊找到 Compute Engine > VM 執行個體。 建立 VM 執行個體可以自訂自己的機器,包括 CPU、RAM、磁碟...等,還有主機所在區域可以選,基本上 Gekko 對於這些都沒有太多要求,可以用預設的甚至更低都可以, 如果你有要把 Gekko 開在網頁介面記得打開 HTTP、HTTPS (SSL) 流量。 然後到這裡下載並安裝 Google Cloud SDK,這是 GCP 的指令介面,會 方便我們使用虛擬主機,而且它也內含了 PUTTY。 安裝完就會自動開啟,或從開始找到 Google Cloud SDK。 第一次運行會需要和 Google 同步,因此會連上 Google 取得帳號授權,然後選擇自己的 GCP 專案 (不是指 VM 個體,如果都沒新增的話應該就只有原始的那一個),最後選擇伺服器區域,這邊就照剛剛 VM 個體的區域照選就好了。 gcloud compute ssh 你的 VM 個體名稱 接著輸入上述指令且確認後續動作後就會開啟 PUTTY 的連線,之前有玩過 AWS 的人應該接下來就很熟悉了。 const CONFIG = {   headless: true,   api: {     host: '0.0.0.0',   ...