21 KiB
BBGO
一個用Go編寫的現代加密貨幣交易機器人框架。 A modern crypto trading bot framework written in Go.
目前狀態
社群
你可以用 BBGO 做什麼
交易機器人用戶 💁♀️ 💁♂️
您可以使用 BBGO 運行內置策略。
策略開發者 🥷
您可以使用 BBGO 的交易單元和回測單元來實現您自己的策略。
交易單元開發者 🧑💻
您可以使用 BBGO 的底層共用交易所 API;目前它支持 4+ 個主要交易所,因此您不必重複實現。
特色
- 交易所抽象介面。
- 整合串流(用戶資料 websocket,市場資料 websocket)。
- 通過 websocket 實時訂單簿整合。
- TWAP 訂單執行支持。參見 TWAP 訂單執行
- 盈虧計算。
- Slack / Telegram 通知。
- 回測:基於K線的回測引擎。參見回測
- 內置參數優化工具。
- 內置網格策略和許多其他內置策略。
- 多交易所 session 支持:您可以連接到2個以上不同帳戶或子帳戶的交易所。
- 類似於
pandas.Series
的指標介面 (series)(usage)- Accumulation/Distribution Indicator
- Arnaud Legoux Moving Average
- Average True Range
- Bollinger Bands
- Commodity Channel Index
- Cumulative Moving Average
- Double Exponential Moving Average
- Directional Movement Index
- Brownian Motion's Drift Factor
- Ease of Movement
- Exponentially Weighted Moving Average
- Hull Moving Average
- Trend Line (Tool)
- Moving Average Convergence Divergence Indicator
- On-Balance Volume
- Pivot
- Running Moving Average
- Relative Strength Index
- Simple Moving Average
- Ehler's Super Smoother Filter
- Stochastic Oscillator
- SuperTrend
- Triple Exponential Moving Average
- Tillson T3 Moving Average
- Triangular Moving Average
- Variable Index Dynamic Average
- Volatility Indicator
- Volume Weighted Average Price
- Zero Lag Exponential Moving Average
- 更多...
截圖
內建策略
策略 | 描述 | 交易類型 | 是否支援回測 |
---|---|---|---|
grid | 第一代網格策略,提供更多的靈活性,但您需要準備庫存。 | maker | |
grid2 | 第二代網格策略,可以將您的報價資產轉換成網格,支持基礎+報價模式。 | maker | |
bollgrid | 實現了一個基本的網格策略,內置布林通道 (bollinger band)。 | maker | |
xmaker | 跨交易所市場製造策略,它在另一邊對您的庫存風險進行對沖。 | maker | 不 |
xnav | 這個策略幫助您記錄當前的淨資產價值。 | tool | 不 |
xalign | 這個策略自動對齊您的餘額位置。 | tool | 不 |
xfunding | 一種資金費率策略。 | funding | 不 |
autoborrow | 這個策略使用保證金借入資產,幫助您保持最小餘額。 | tool | 不 |
pivotshort | 這個策略找到支點低點並在價格突破前一低點時進行交易。 | long/short | |
schedule | 這個策略定期以固定數量買賣,您可以將其用作單一的DCA,或補充像BNB這樣的費用資產。 | tool | |
irr | 這個策略基於預測的回報率開倉。 | long/short | |
bollmaker | 這個策略持有長期多空倉位,在兩邊下單,並使用布林通道 (bollinger band) 控制倉位大小。 | maker | |
wall | 這個策略在訂單簿上創建一堵牆(大量訂單)。 | maker | 不 |
scmaker | 這個市場製造策略是為穩定幣市場設計的,如USDC/USDT。 | maker | |
drift | long/short | ||
rsicross | 這個策略在快速 RSI 越過慢速 RSI 時開啟多倉,這是使用 v2 指標的演示策略。 | long/short | |
marketcap | 這個策略實現了一個基於市值資本化重新平衡投資組合的策略。 | rebalance | 不 |
supertrend | 這個策略使用 DEMA 和超級趨勢指標開啟多空倉位。 | long/short | |
trendtrader | 這個策略基於趨勢線突破開啟多空倉位。 | long/short | |
elliottwave | long/short | ||
ewoDgtrd | long/short | ||
fixedmaker | maker | ||
factoryzoo | long/short | ||
fmaker | maker | ||
linregmaker | 一個基於線性回歸的市場製造商。 | maker | |
convert | 轉換策略是一個幫助您將特定資產轉換為目標資產的工具。 | tool | 不 |
已支援交易所
- Binance Spot Exchange (以及 binance.us)
- OKEx Spot Exchange
- Kucoin Spot Exchange
- MAX Spot Exchange (台灣交易所)
- Bitget Exchange
- Bybit Exchange
文件
要求
- Go SDK 1.20
- Linux / MacOS / Windows (WSL)
- 在您註冊賬戶後獲取您的交易所 API 密鑰和密碼(您可以選擇一個或多個交易所):
這個項目由一小群人維護和支持。如果您想支持這個項目,請使用上面提供的鏈接和推薦碼在交易所註冊。
安裝
從 binary 安裝
以下 script 將幫助你設置文件和 dotenv 文件:
# 針對 Binance 交易所的網格交易策略
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-grid.sh) binance
# 針對 MAX 交易所的網格交易策略
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-grid.sh) max
# 針對 Binance 交易所的布林格網格交易策略
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-bollgrid.sh) binance
# 針對 MAX 交易所的布林格網格交易策略
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-bollgrid.sh) max
如果您已經在某處有配置,則可能適合您的是僅下載腳本:
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/download.sh)
或者參考發布頁面並手動下載。
自 v2 起,我們添加了一個新的浮點實現 dnum,以支持更高精度的小數。要下載和設置,請參考Dnum安裝
一鍵Linode StackScript
StackScript 允許您一鍵部署一個輕量級實體與 bbgo。
- BBGO grid on Binance https://cloud.linode.com/stackscripts/950715
- BBGO grid USDT/TWD on MAX https://cloud.linode.com/stackscripts/793380
- BBGO grid USDC/TWD on MAX https://cloud.linode.com/stackscripts/797776
- BBGO grid LINK/TWD on MAX https://cloud.linode.com/stackscripts/797774
- BBGO grid USDC/USDT on MAX https://cloud.linode.com/stackscripts/797777
- BBGO grid on MAX https://cloud.linode.com/stackscripts/795788
- BBGO bollmaker on Binance https://cloud.linode.com/stackscripts/1002384
從程式碼構建
參見從程式碼構建
配置
添加您的 dotenv 文件:
# 針對 Binance 交易所
BINANCE_API_KEY=
BINANCE_API_SECRET=
# 如果您想使用 binance.us,將此更改為1
BINANCE_US=0
# 針對 MAX 交易所
MAX_API_KEY=
MAX_API_SECRET=
# 針對 OKEx 交易所
OKEX_API_KEY=
OKEX_API_SECRET=
OKEX_API_PASSPHRASE
# 針對 Kucoin 交易所
KUCOIN_API_KEY=
KUCOIN_API_SECRET=
KUCOIN_API_PASSPHRASE=
KUCOIN_API_KEY_VERSION=2
# 針對 Bybit 交易所
BYBIT_API_KEY=
BYBIT_API_SECRET=
準備您的dotenv文件 .env.local
和 BBGO yaml 配置文件 bbgo.yaml
。
要檢查可用的環境變量,請參見環境變量
最小的 bbgo.yaml 可以通過以下方式生成:
curl -o bbgo.yaml https://raw.githubusercontent.com/c9s/bbgo/main/config/minimal.yaml
要運行策略
bbgo run
要啟動帶有前端儀表板的 bbgo
bbgo run --enable-webserver
如果您想切換到另一個 dotenv 文件,您可以添加 --dotenv
選項或 --config
:
bbgo sync --dotenv .env.dev --config config/grid.yaml --session binance
要查詢轉賬歷史
bbgo transfer-history --session max --asset USDT --since "2019-01-01"
進階配置
與 Binance 同步系統時間
BBGO 提供了用於 UNIX 系統 / 子系統的腳本,以便與 Binance 同步日期。需要事先安裝 jq 和 bc。在 Ubuntu 中安裝相依套件,嘗試以下命令:
sudo apt install -y bc jq
要同步日期,嘗試
sudo ./scripts/sync_time.sh
您還可以將腳本添加到 crontab 中,這樣系統時間就可以定期與 Binance 同步
Testnet (Paper Trading)
目前僅支持 Binance Test Network
export PAPER_TRADE=1
export DISABLE_MARKET_CACHE=1 # 測試網路支援的市場遠少於主網路
通知
同步交易資料
預設情況下, BBGO 不會從交易所同步您的交易資料,因此很難正確計算您的盈虧。
通過將交易和訂單同步到本地資料庫,您可以獲得一些好處,如盈虧計算、回測和資產計算。
您只能使用一個資料庫驅動程序 MySQL 或 SQLite 來存儲您的交易資料。
注意:SQLite 不完全支援,我們建議您使用 MySQL 而不是 SQLite。
配置 MySQL 資料庫 要使用 MySQL 資料庫進行資料同步,首先您需要安裝 MySQL 服務器:
Configure MySQL Database
# Ubuntu Linux
sudo apt-get install -y mysql-server
# 對於更新的 Ubuntu Linux
sudo apt install -y mysql-server
創建您的 mysql 資料庫:
Create your mysql database:
mysql -uroot -e "CREATE DATABASE bbgo CHARSET utf8"
然後將這些環境變數放入您的 .env.local
文件中:
DB_DRIVER=mysql
DB_DSN="user:password@tcp(127.0.0.1:3306)/bbgo"
Configure Sqlite3 Database
配置 Sqlite3 資料庫
要使用 SQLite3 而不是 MySQL,只需將這些環境變數放入您的 .env.local
文件中:
DB_DRIVER=sqlite3
DB_DSN=bbgo.sqlite3
同步您自己的交易資料
一旦您配置了資料庫,您就可以從交易所同步您自己的交易資料。
使用 Redis 在 BBGO session 之間保持持久性
要使用 Redis,首先您需要安裝您的 Redis 服務器
# 對於 Ubuntu/Debian Linux
sudo apt-get install -y redis
# 對於更新的 Ubuntu/Debian Linux
sudo apt install -y redis
在您的 bbgo.yaml
中設定以下環境變數:
persistence:
redis:
host: 127.0.0.1 # 指向您的 Redis 服務器的 IP 地址或主機名,如果與 BBGO 相同則為 127.0.0.1
port: 6379 # Redis 服務器的端口,預設為 6379
db: 0 # 使用的 DB 號碼。如果其他應用程序也在使用 Redis,您可以設置為另一個 DB 以避免衝突
內建策略
查看策略目錄 strategy 以獲得所有內置策略:
pricealert
策略演示如何使用通知系統 pricealert。參見文件.buyandhold
策略演示如何訂閱 kline 事件並提交市場訂單 buyandholdbollgrid
策略實現了一個基本的網格策略,使用內置的布林通道指標 bollgridgrid
策略實現了固定價格帶網格策略 grid。參見文件.supertrend
策略使用 Supertrend 指標作為趨勢,並使用 DEMA 指標作為噪聲 過濾器 supertrend。參見文件.support
策略使用具有高交易量的 K 線作為支撐 support. 參見文件.flashcrash
策略實現了一個捕捉閃崩的策略 flashcrashmarketcap
策略實現了一個基於市場資本化重新平衡投資組合的策略 marketcap. 參見文件.pivotshort
- 以做空為重點的策略。irr
- 回報率策略。drift
- 漂移策略。grid2
- 第二代網格策略。
要運行這些內置策略,只需修改配置文件以使配置適合您,例如,如果您想運行 buyandhold
策略
vim config/buyandhold.yaml
# 使用配置運行 bbgo
bbgo run --config config/buyandhold.yaml
回測
參考回測
添加策略
參見開發策略
開發您自己的私人策略
創建您的 go 包,使用 `go mod`` 初始化存儲庫,並添加 bbgo 作為依賴:
go mod init
go get github.com/c9s/bbgo@main
建立您的 go 套件,使用 go mod 初始化存儲庫,並添加 bbgo 作為依賴:
vim strategy.go
您可以從 https://github.com/c9s/bbgo/blob/main/pkg/strategy/skeleton/strategy.go 獲取策略骨架。 現在添加您的配置
mkdir config
(cd config && curl -o bbgo.yaml https://raw.githubusercontent.com/c9s/bbgo/main/config/minimal.yaml)
將您的策略包路徑添加到配置文件 config/bbgo.yaml
---
build:
dir: build
imports:
- github.com/your_id/your_swing
targets:
- name: swing-amd64-linux
os: linux
arch: amd64
- name: swing-amd64-darwin
os: darwin
arch: amd64
運行 bbgo run
命令,bbgo 將編譯一個導入您策略的包裝 binary 文件:
dotenv -f .env.local -- bbgo run --config config/bbgo.yaml
或者您可以通過以下方式構建您自己的包裝 binary 文件
bbgo build --config config/bbgo.yaml
參考
- https://github.com/narumiruna/bbgo-template
- https://github.com/narumiruna/bbgo-marketcap
- https://github.com/austin362667/shadow
- https://github.com/jnlin/bbgo-strategy-infinite-grid
- https://github.com/yubing744/trading-gpt
命令用法
向特定交易所 session 提交訂單
bbgo submit-order --session=okex --symbol=OKBUSDT --side=buy --price=10.0 --quantity=1
列出特定交易所 session 的未平倉訂單
bbgo list-orders open --session=okex --symbol=OKBUSDT
bbgo list-orders open --session=max --symbol=MAXUSDT
bbgo list-orders open --session=binance --symbol=BNBUSDT
取消一個未平倉訂單
# 對於 okex,order id 和 symbol 都是必需的
bbgo cancel-order --session=okex --order-id=318223238325248000 --symbol=OKBUSDT
# 對於 max,您只需要提供您的 order id
bbgo cancel-order --session=max --order-id=1234566
除錯用戶資料流
bbgo userdatastream --session okex
bbgo userdatastream --session max
bbgo userdatastream --session binance
動態注入
為了最小化策略代碼,bbgo 支持動態依賴注入。
在執行您的策略之前,如果 bbgo 發現使用 bbgo 組件的嵌入字段,則會將組件注入到您的策略對象中。例如:
type Strategy struct {
Symbol string `json:"symbol"
Market types.Market
}
支援的組件(目前僅限單一交易所策略)
*bbgo.ExchangeSession
bbgo.OrderExecutor
如果您的策略中有 Symbol string
字段,您的策略將被檢測為基於符號的策略,然後以下類型可以自動注入:
types.Market
策略執行階段
- 從配置文件加載配置。
- 分配並初始化交易所 session 。
- 將交易所 session 添加到環境(資料層)。
- 使用給定的環境初始化交易者對象(邏輯層)。
- 交易者初始化環境並啟動交易所連接。
- 依次調用 strategy.Run() 方法。
交易所 API 範例
請查看範例 examples
初始化 MAX API:
key := os.Getenv("MAX_API_KEY")
secret := os.Getenv("MAX_API_SECRET")
maxRest := maxapi.NewRestClient(maxapi.ProductionAPIURL)
maxRest.Auth(key, secret)
創建用戶資料流以獲取訂單簿(深度)
stream := max.NewStream(key, secret)
stream.Subscribe(types.BookChannel, symbol, types.SubscribeOptions{})
streambook := types.NewStreamBook(symbol)
streambook.BindStream(stream)
部署
- Helm Chart
- 裸機或 VPS
開發
設置您的本地存儲庫
- 點擊 GitHub 儲存庫的 "Fork" 按鈕。
- 將你分叉的儲存庫複製到
$GOPATH/github.com/c9s/bbgo
。 - 更改目錄到
$GOPATH/github.com/c9s/bbgo
。 - 創建一個分支並開始你的開發。
- 測試你的更改。
- 將你的更改推送到你的分叉。
- 發送一個拉取請求。
測試桌面應用
對於 webview
make embed && go run -tags web ./cmd/bbgo-webview
對於 lorca
make embed && go run -tags web ./cmd/bbgo-lorca
常見問題
什麼是倉位 ?
- 基礎貨幣 & 報價貨幣 https://www.ig.com/au/glossary-trading-terms/base-currency-definition
- 如何計算平均成本? https://www.janushenderson.com/en-us/investor/planning/calculate-average-cost/
尋找新策略?
你可以寫一篇關於 BBGO 的文章,主題不限,750-1500 字以換取,我可以為你實現策略(取決於複雜性和努力程度)。如果你有興趣,可以在 telegram https://t.me/c123456789s 或 twitter https://twitter.com/c9s 私訊我,我們可以討論。
添加新的加密貨幣交易所支持?
如果你希望 BBGO 支持一個目前 BBGO 未包含的新加密貨幣交易所,我們可以為你實現。成本是 10 ETH。如果你對此感興趣,請在 telegram https://t.me/c123456789s 私訊我。
社群
- Telegram https://t.me/bbgo_intl
- Telegram (台灣社群) https://t.me/bbgocrypto
- Twitter https://twitter.com/bbgotrading
貢獻
參見貢獻
歡迎抖內
BBGO 代幣經濟
為了支持 BBGO 的開發,我們創建了一個獎勵池來支持貢獻者,通過贈送 $BBG 代幣。查看詳情在 $BBG 合約頁面 和我們的官方網站
支持者
- GitBook
授權
AGPL 授權