發表文章

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

Gekko Trading Bot : 修正幣安 Binance API 不交易的問題,解決 amount is too small 錯誤

圖片
之前一直沒碰過這個問題,就是在手動出掉部分 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 Trading Bot : 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/...

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.resetTrend(); this.addTulipIndicator...

[ 2/14 更新] 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. 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 Toml File : http://justhodl.ml/strat/aroon_public.toml 來源 Source : Discord @shop bestone-updated-hardcoded-config 需要安裝 : npm install lodash async JS File :  http://justhodl.ml/strat/bestone-updated-hardcoded-config.js Toml File : http://justhodl.ml/strat/bestone-updated-hardc...

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 作連動 ,意思就是如果你開了兩個 Gekko 就得綁定兩個不同的 Telegram Bot,這點是目前比較麻煩的部分,但就湊著用...

在一年免費的 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',     port: 3000,   },   ui: {   ...

Gekko 交易機器人 - 基於 ConvNetJs 深度學習 (Deep Learning) 框架的交易策略 (Strategy),隨時間市場自動調整參數

圖片
這是一個在 Discord 群翻到的 Gekko 策略,它本身並沒有 .toml 檔也就是沒有參數需要設置, 因為它的參數是隨市場、時間自動運算的 ,但跟之前以 MA 線判定牛 / 熊市的 RSI 策略 又不太一樣,因為 RSI 那個策略是固定的兩組參數,簡單來說市場對策略來說非牛即熊,並不能真的很有彈性地去變化。 但原作者也有提到 Neural Network 的策略並不是簡單的複製貼上,你必須要了解它的內容和原理才能真正使用它。 這是一個基於 ConvNetJs 深度學習框架的交易策略,光是需要載入的程式庫就一大堆, 但卻沒有用到技術指標和 Gekko 內建的 Tulip、TA-Lib ,真正跑起來運算量也比一般策略大上不少 ,有興趣的人可以把策略拆開來研究研究。 Js Code :  var convnetjs = require('convnetjs') var z = require('zero-fill') var stats = require('stats-lite') var n = require('numbro') var math = require('mathjs') const cluster = require('cluster'); const numCPUs = require('os').cpus().length; var _ = require('lodash'); var gauss = require('gauss'); const deepqlearn = require('convnetjs/build/deepqlearn'); var log = require('../core/log.js'); // the below line starts you at 0 threads global.forks = 0 // the below line is for calculating the last mean vs the now mean. var oldmean = 0 getOption = function () {   } ...

Gekko 交易機器人 - 在 Windows 用 Linux 環境 (Ubuntu bash) 安裝 Gekko,讓 Tulip Indicators、TA-Lib 可以正確載入

圖片
在 Windows 環境下要安裝 Gekko 最大的問題就是不支援 TA-Lib (talib) 這個程式庫,它包含了非常多的技術指標分析,而且使用 TA-Lib 的策略也不在少數,因此沒有安裝這個程式庫影響滿大的,那要達到能在 Windows 10 的環境下安裝 Gekko 和其他程式庫其實也很簡單,只要到官方市集下載 Ubuntu 就能在 Windows 底下建置 Linux 的環境了。 首先到 Microsoft 線上商店 下載 Ubuntu (這不是真的整個系統,只是讓 Windows 能使用它的終端機和 CMD 功能等。) 安裝完成後就能在開始找到 Ubuntu,第一次運行會需要讓它安裝一下,並且建立一個在本機的 Ubuntu 帳戶,爾後使用 sudo 指令 (類似於系統管理員身分執行) 時也會需要使用到一開始建立的密碼,所以要自己記好。 sudo apt-get update curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs sudo apt-get install -y build-essential git clone git://github.com/askmike/gekko.git cd gekko npm install --only=production npm install talib npm install tulind 然後依序執行上述指令 (一個跑完再輸入下一個),就能完整安裝 Gekko (包含 TA-Lib、Tulip)。 整個過程會需要一些時間,但基本上和在 Windows 環境下的操作都是相同的。 連和 Windows 環境不相容的 TA-Lib 也成功安裝了, 而且這整個過程不需要手動下載任何檔案,只要靠指令就能達成 ,這就是 Linux 系統方便的地方啊。 node gekko --ui 用一樣的指令就能開啟網頁 UI 介面,如果要用 CLI 就必須先準備好 config.js,可以參考 這篇 。 

Gekko 交易機器人 - 用 Commandline 介面 (CLI) 開啟 Gekko 教學,讓電腦負載大大降低且達到多線交易

圖片
基本上 Gekko 交易機器人本身就推薦使用 Commandline 介面 (CLI),一來它對電腦設備要求較低 (其實本來就不高),二來它能直接開啟複數個機器人 (沒有 UI Port 問題),加上能自訂的細節也較多,有些功能是沒有做出來到網頁 UI 介面的,像是 Telegram bot 功能、Email 通知功能...等,而且如果你跟我一樣是把 Gekko 開在雲端主機上,使用 CLI 多少也能降低使用量,避免它超出限額。 Gekko 原作者也有提到 childprocess has died. 的情況可以用 CLI 的方式來開啟 Gekko,它對策略的執行比較不會出現錯誤。 再來就是多線交易的問題了, 由於為了避免不同機器人互相「搶資金」而造成錯誤所以在 UI 介面直接限制了單一交易所多個機器人這點 ,但在 CLI 並不存在這個問題,所以可以直接多開 Gekko。舉例來說,即使你有 XVG/BTC、XRP/BTC 兩個機器人在運作,兩者並不會互相衝突任, 因為誰先達成策略的條件就會先執行該貨幣的買賣,然後根據買賣後的結果再繼續跑原本的策略。 用 CLI 開啟 Gekko 以下的操作是基於 Gekko 已經完整安裝的情況,如果還沒在本機或雲端上裝好 Gekko 請參考前篇提到的 安裝教學 、 安裝到雲端 。 首先要建立一個 config.js 在 Gekko 資料夾中, 它裡面本身就有附一個 sample-config.js 能直接讓你拿來改。 基本上我把 config.js 的內容分為六層 :  - config.watch - 指定觀測的市場,也就是要交易的貨幣  - config.tradingAdvisor - 設定 Candlestick 的時間長短與選擇策略   - config.strategy - 個別策略的參數 -  config.paperTrader - 模擬交易機器人 -  config.trader - 實際交易機器人 -  config.plugins - 外附的插件 (非必要),像 mailer、telegrambot...等 其中 paperTrader 和 trader 只能擇一,plugins 也可以都不要啟用。 config.watc...

Gekko 交易機器人 - 突破單一交易所只能有一個機器人 (tradebot) 的限制,一個不夠你不會開兩個?

圖片
Gekko 仍然在試驗性階段所以很多功能尚未完善,一個麻煩的點就是 ui 介面直接鎖死了一個交易所只能有一個交易機器人運行 (指的是真正的 tradebot,不是模擬的 paper trader), 原因在於怕不同貨幣換來的 Balance 互相干擾 ,舉例來說如果我在同一個交易所建了 ETH/BTC 和 BTC/USDT 兩個交易機器人,那從 ETH 交易來的 BTC 就有可能又再被轉往 USDT 去了,這樣就會造成機器人的錯誤,這個部分仍然是沒辦法解決的, 但其實你可以交易完全不同的貨幣來避免這種情況 (像是 ETH/BTC 和 USDT/LTC) ,那現在的問題就是要如何突破 Gekko 內部的限制? 可能有更好的辦法可以做到多線交易,但我想到最直觀的解法就是,一個不夠你不會開兩個?既然一個 Gekko、一個交易所只能有一個機器人,那我就開兩個、三個 Gekko 問題不就解決了,實作辦法也很簡單。 最終每個 Gekko 都是呈現在 127.0.0.1 (Localhost) 但在不同的 Port ,舉例來說第一個在 127.0.0.1:1111,第二個在 127.0.0.1:2222。 所以先將你原始的 Gekko 資料夾複製多一個出來, 原本那個可以不用改,就讓它在 Port 3000。 打開 web/vue/UIconfig.js , 把 Port 改成和第一個 Gekko 不一樣就可以了。 然後用一樣的辦法安裝、啟動 Gekko 後你就可以得到兩個運行中的 Gekko 分別在不同的 Port,像我的就是一個在 http://127.0.0.1:3000 一個在 http://127.0.0.1:2222 。 那你一定會覺得電腦開了一堆 CMD 很礙眼,而且關了就不能繼續操盤了,等於電腦要 24HR 開著還要跑一堆程式, 所以更好的解決辦法就是參考 這篇 將 Gekko 裝到雲端,然後用一樣的辦法上傳數個 Gekko 資料夾分別用不同的 Port 然後一一安裝、執行 ,最後它們就會分別在不同的 Port 上 24HR 為你操盤,自己的電腦也不用被 CMD 塞滿了。

把 Gekko 交易機器人安裝到雲端 (Amazon EC2、Google Cloud) 上,免開機就能 24HR 操盤

圖片
雖然在官網其實有教學如何 Installing Gekko on a server ,不過都沒講到伺服器方面要怎麼設定或是雲端服務怎麼用,所以就稍微來介紹一下怎麼把 Gekko 裝上雲端, 這樣以後要使用就不用一直開著電腦了,隨時可以透過伺服器的 ip 連上操作介面。 其實這類雲端服務也很多,比較有名的就是像 Google Cloud 、 Amazon EC2 ...等,基本上都是需要收費的, 也千萬不要找沒有信譽的雲端主機,畢竟你等於把交易所的 API Key 放在那裡面運作, 安全絕對是最重要的。 我會選擇用 Amazon EC2 來裝 Gekko,因為它有 12 個月免費試用還有部分服務是永久免費的,其實 Google 也是一年免費,想用哪個可以自己比較看看後續的費率。 Amazon EC2 官方網站 :  https://aws.amazon.com/tw/ec2 要注意的是註冊時需要提供信用卡資訊, 但在免費流量用完前是不會扣款的 。註冊完後點選右上方的登入主控台。 選啟動虛擬機。可以看到 AWS 的服務也是非常多,不但能裝機器人還可以順便架個網站之類的。 選 EC2 方案 ,Lightsail 是要錢的,任誰都會選免錢的吧。 取個大吉大利的好名字。  選 Amazon Linux AMI 就好。 實例類型就 t2.micro ,它免費的也沒太多給你選,基本上不會跑太多運算夠用就可以了。 密鑰是一個 .pem 檔,下載回來要好好留著等會還要用。 那這樣你的 EC2 伺服器就正式上線了,現在要做的是從本機電腦連線到伺服器。 連線到你的 Linux 主機會需要用到 PuTTY 這個程式 ,可以到 官網 去下載,建議下載 .zip 版本的省的還要安裝。 下載回來後先開啟  PUTTYGEN.EXE , 要先把剛剛的 .pem 密鑰轉檔。 Load 剛剛下載回來的 .pem 密鑰, 記得將檔案類型改成 All Files 不然看不到。 然後 Save private key 把它存成 .ppk 檔。 再來就可以開啟 PUTTY.EXE,Host Name 的格式是 「用戶名@公有 DNS (IPv4)...