diff --git a/README.md b/README.md index f217d8153..458c1ea1d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +* [English👈](./README.md) +* [中文](./README.zh_TW.md) + # BBGO A modern crypto trading bot framework written in Go. @@ -645,7 +648,9 @@ See [Contributing](./CONTRIBUTING.md) ### Financial Contributors - +[[Become a backer](https://opencollective.com/bbgo#backer)] + + ## BBGO Tokenomics diff --git a/README.zh_TW.md b/README.zh_TW.md new file mode 100644 index 000000000..c0ae1396e --- /dev/null +++ b/README.zh_TW.md @@ -0,0 +1,624 @@ +* [English](./README.md) +* [中文👈](./README.zh_TW.md) + +# BBGO + +一個用Go編寫的現代加密貨幣交易機器人框架。 +A modern crypto trading bot framework written in Go. + + +## 目前狀態 + +[![Go](https://github.com/c9s/bbgo/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/c9s/bbgo/actions/workflows/go.yml) +[![GoDoc](https://godoc.org/github.com/c9s/bbgo?status.svg)](https://pkg.go.dev/github.com/c9s/bbgo) +[![Go Report Card](https://goreportcard.com/badge/github.com/c9s/bbgo)](https://goreportcard.com/report/github.com/c9s/bbgo) +[![DockerHub](https://img.shields.io/docker/pulls/yoanlin/bbgo.svg)](https://hub.docker.com/r/yoanlin/bbgo) +[![Coverage Status](http://codecov.io/github/c9s/bbgo/coverage.svg?branch=main)](http://codecov.io/github/c9s/bbgo?branch=main) +open collective badge +open collective badge + +## 社群 + +[![Telegram Global](https://img.shields.io/badge/telegram-global-blue.svg)](https://t.me/bbgo_intl) +[![Telegram Taiwan](https://img.shields.io/badge/telegram-tw-blue.svg)](https://t.me/bbgocrypto) +[![Twitter](https://img.shields.io/twitter/follow/bbgotrading?label=Follow&style=social)](https://twitter.com/bbgotrading) + +## 你可以用 BBGO 做什麼 +### 交易機器人用戶 💁‍♀️ 💁‍♂️ +您可以使用 BBGO 運行內置策略。 + +### 策略開發者 🥷 +您可以使用 BBGO 的交易單元和回測單元來實現您自己的策略。 + +### 交易單元開發者 🧑‍💻 +您可以使用 BBGO 的底層共用交易所 API;目前它支持 4+ 個主要交易所,因此您不必重複實現。 + +## 特色 +* 交易所抽象介面。 +* 整合串流(用戶資料 websocket,市場資料 websocket)。 +* 通過 websocket 實時訂單簿整合。 +* TWAP 訂單執行支持。參見 [TWAP 訂單執行](./doc/topics/twap.md) +* 盈虧計算。 +* Slack / Telegram 通知。 +* 回測:基於K線的回測引擎。參見[回測](./doc/topics/back-testing.md) +* 內置參數優化工具。 +* 內置網格策略和許多其他內置策略。 +* 多交易所 session 支持:您可以連接到2個以上不同帳戶或子帳戶的交易所。 +* 類似於 `pandas.Series` 的指標介面 ([series](https://github.com/c9s/bbgo/blob/main/doc/development/series.md))([usage](https://github.com/c9s/bbgo/blob/main/doc/development/indicator.md)) + - [Accumulation/Distribution Indicator](./pkg/indicator/ad.go) + - [Arnaud Legoux Moving Average](./pkg/indicator/alma.go) + - [Average True Range](./pkg/indicator/atr.go) + - [Bollinger Bands](./pkg/indicator/boll.go) + - [Commodity Channel Index](./pkg/indicator/cci.go) + - [Cumulative Moving Average](./pkg/indicator/cma.go) + - [Double Exponential Moving Average](./pkg/indicator/dema.go) + - [Directional Movement Index](./pkg/indicator/dmi.go) + - [Brownian Motion's Drift Factor](./pkg/indicator/drift.go) + - [Ease of Movement](./pkg/indicator/emv.go) + - [Exponentially Weighted Moving Average](./pkg/indicator/ewma.go) + - [Hull Moving Average](./pkg/indicator/hull.go) + - [Trend Line (Tool)](./pkg/indicator/line.go) + - [Moving Average Convergence Divergence Indicator](./pkg/indicator/macd.go) + - [On-Balance Volume](./pkg/indicator/obv.go) + - [Pivot](./pkg/indicator/pivot.go) + - [Running Moving Average](./pkg/indicator/rma.go) + - [Relative Strength Index](./pkg/indicator/rsi.go) + - [Simple Moving Average](./pkg/indicator/sma.go) + - [Ehler's Super Smoother Filter](./pkg/indicator/ssf.go) + - [Stochastic Oscillator](./pkg/indicator/stoch.go) + - [SuperTrend](./pkg/indicator/supertrend.go) + - [Triple Exponential Moving Average](./pkg/indicator/tema.go) + - [Tillson T3 Moving Average](./pkg/indicator/till.go) + - [Triangular Moving Average](./pkg/indicator/tma.go) + - [Variable Index Dynamic Average](./pkg/indicator/vidya.go) + - [Volatility Indicator](./pkg/indicator/volatility.go) + - [Volume Weighted Average Price](./pkg/indicator/vwap.go) + - [Zero Lag Exponential Moving Average](./pkg/indicator/zlema.go) + - 更多... + +## 截圖 + +![BBGO 儀表板](assets/screenshots/dashboard.jpeg) + +![BBGO 回測報告](assets/screenshots/backtest-report.jpg) + +## 內建策略 + +| 策略 | 描述 | 交易類型 | 是否支援回測 | +|-------------|-----------------------------------------------------------------------------------------------------------------------------------------|------------|------------------| +| 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 + +## 文件 + +- [參考文件](doc/README.md) + +## 要求 + +* Go SDK 1.20 +* Linux / MacOS / Windows (WSL) +* 在您註冊賬戶後獲取您的交易所 API 密鑰和密碼(您可以選擇一個或多個交易所): + - MAX: https://max.maicoin.com/signup?r=c7982718 + - Binance: https://accounts.binance.com/en/register?ref=38192708 + - OKEx: https://www.okex.com/join/2412712?src=from:ios-share + - Kucoin: https://www.kucoin.com/ucenter/signup?rcode=r3KX2D4 + +這個項目由一小群人維護和支持。如果您想支持這個項目,請使用上面提供的鏈接和推薦碼在交易所註冊。 + +## 安裝 + +### 從 binary 安裝 + +以下 script 將幫助你設置文件和 dotenv 文件: + +```sh +# 針對 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 +``` + +如果您已經在某處有配置,則可能適合您的是僅下載腳本: + +```sh +bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/download.sh) +``` + +或者參考[發布頁面](https://github.com/c9s/bbgo/releases)並手動下載。 + +自 v2 起,我們添加了一個新的浮點實現 dnum,以支持更高精度的小數。要下載和設置,請參考[Dnum安裝](doc/topics/dnum-binary.md) + +### 一鍵Linode StackScript + +StackScript 允許您一鍵部署一個輕量級實體與 bbgo。 + +- BBGO grid on Binance +- BBGO grid USDT/TWD on MAX +- BBGO grid USDC/TWD on MAX +- BBGO grid LINK/TWD on MAX +- BBGO grid USDC/USDT on MAX +- BBGO grid on MAX +- BBGO bollmaker on Binance + +### 從程式碼構建 +參見[從程式碼構建](./doc/build-from-source.md) + +## 配置 + +添加您的 dotenv 文件: + +```sh +# 針對 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`。 + +要檢查可用的環境變量,請參見[環境變量](./doc/configuration/envvars.md) + +最小的 bbgo.yaml 可以通過以下方式生成: + +```sh +curl -o bbgo.yaml https://raw.githubusercontent.com/c9s/bbgo/main/config/minimal.yaml +``` + +要運行策略 + +```sh +bbgo run +``` + +要啟動帶有前端儀表板的 bbgo + +```sh +bbgo run --enable-webserver +``` + +如果您想切換到另一個 dotenv 文件,您可以添加 `--dotenv` 選項或 `--config` : + +```sh +bbgo sync --dotenv .env.dev --config config/grid.yaml --session binance +``` + +要查詢轉賬歷史 + +```sh +bbgo transfer-history --session max --asset USDT --since "2019-01-01" +``` + + + +## 進階配置 + +### 與 Binance 同步系統時間 + + BBGO 提供了用於 UNIX 系統 / 子系統的腳本,以便與 Binance 同步日期。需要事先安裝 jq 和 bc。在 Ubuntu 中安裝相依套件,嘗試以下命令: + +```bash +sudo apt install -y bc jq +``` + +要同步日期,嘗試 + +```bash +sudo ./scripts/sync_time.sh +``` + +您還可以將腳本添加到 crontab 中,這樣系統時間就可以定期與 Binance 同步 + +### Testnet (Paper Trading) + +目前僅支持 [Binance Test Network](https://testnet.binance.vision) + +```bash +export PAPER_TRADE=1 +export DISABLE_MARKET_CACHE=1 # 測試網路支援的市場遠少於主網路 +``` + +### 通知 + +- [設定 Telegram 通知](./doc/configuration/telegram.md) +- [設定 Slack 通知](./doc/configuration/slack.md) + +### 同步交易資料 + +預設情況下, BBGO 不會從交易所同步您的交易資料,因此很難正確計算您的盈虧。 + +通過將交易和訂單同步到本地資料庫,您可以獲得一些好處,如盈虧計算、回測和資產計算。 + +您只能使用一個資料庫驅動程序 MySQL 或 SQLite 來存儲您的交易資料。 + +**注意**:SQLite 不完全支援,我們建議您使用 MySQL 而不是 SQLite。 + +配置 MySQL 資料庫 +要使用 MySQL 資料庫進行資料同步,首先您需要安裝 MySQL 服務器: +#### Configure MySQL Database + +```sh +# Ubuntu Linux +sudo apt-get install -y mysql-server + +# 對於更新的 Ubuntu Linux +sudo apt install -y mysql-server +``` + +或者[在 docker 中執行它](https://hub.docker.com/_/mysql) + +創建您的 mysql 資料庫: + +Create your mysql database: + +```sh +mysql -uroot -e "CREATE DATABASE bbgo CHARSET utf8" +``` + +然後將這些環境變數放入您的 `.env.local` 文件中: + +```sh +DB_DRIVER=mysql +DB_DSN="user:password@tcp(127.0.0.1:3306)/bbgo" +``` + +#### Configure Sqlite3 Database + +配置 Sqlite3 資料庫 +要使用 SQLite3 而不是 MySQL,只需將這些環境變數放入您的 `.env.local` 文件中: + +```sh +DB_DRIVER=sqlite3 +DB_DSN=bbgo.sqlite3 +``` + +## 同步您自己的交易資料 + +一旦您配置了資料庫,您就可以從交易所同步您自己的交易資料。 + +參見[配置私人交易資料同步](./doc/configuration/sync.md) + +## 使用 Redis 在 BBGO session 之間保持持久性 + +要使用 Redis,首先您需要安裝您的 Redis 服務器 + +```sh +# 對於 Ubuntu/Debian Linux +sudo apt-get install -y redis + +# 對於更新的 Ubuntu/Debian Linux +sudo apt install -y redis +``` + +在您的 `bbgo.yaml` 中設定以下環境變數: + +```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](pkg/strategy) 以獲得所有內置策略: + +- `pricealert` 策略演示如何使用通知系統 [pricealert](pkg/strategy/pricealert)。參見[文件](./doc/strategy/pricealert.md). +- `buyandhold` 策略演示如何訂閱 kline 事件並提交市場訂單 [buyandhold](pkg/strategy/pricedrop) +- `bollgrid` 策略實現了一個基本的網格策略,使用內置的布林通道指標 [bollgrid](pkg/strategy/bollgrid) +- `grid` 策略實現了固定價格帶網格策略 [grid](pkg/strategy/grid)。參見[文件](./doc/strategy/grid.md). +- `supertrend` 策略使用 Supertrend 指標作為趨勢,並使用 DEMA 指標作為噪聲 +過濾器 [supertrend](pkg/strategy/supertrend)。參見[文件](./doc/strategy/supertrend.md). +- `support` 策略使用具有高交易量的 K 線作為支撐 [support](pkg/strategy/support). 參見[文件](./doc/strategy/support.md). +- `flashcrash` 策略實現了一個捕捉閃崩的策略 [flashcrash](pkg/strategy/flashcrash) +- `marketcap`策略實現了一個基於市場資本化重新平衡投資組合的策略 [marketcap](pkg/strategy/marketcap). 參見[文件](./doc/strategy/marketcap.md). +- `pivotshort` - 以做空為重點的策略。 +- `irr` - 回報率策略。 +- `drift` - 漂移策略。 +- `grid2` - 第二代網格策略。 + +要運行這些內置策略,只需修改配置文件以使配置適合您,例如,如果您想運行 `buyandhold` 策略 + +```sh +vim config/buyandhold.yaml + +# 使用配置運行 bbgo +bbgo run --config config/buyandhold.yaml +``` + +## 回測 + +參考[回測](./doc/topics/back-testing.md) + +## 添加策略 + +參見[開發策略](./doc/topics/developing-strategy.md) + +## 開發您自己的私人策略 + +創建您的 go 包,使用 `go mod`` 初始化存儲庫,並添加 bbgo 作為依賴: + +```sh +go mod init +go get github.com/c9s/bbgo@main +``` + +建立您的 go 套件,使用 go mod 初始化存儲庫,並添加 bbgo 作為依賴: + +```sh +vim strategy.go +``` + +您可以從 獲取策略骨架。 現在添加您的配置 + +```sh +mkdir config +(cd config && curl -o bbgo.yaml https://raw.githubusercontent.com/c9s/bbgo/main/config/minimal.yaml) +``` + +將您的策略包路徑添加到配置文件 `config/bbgo.yaml` + +```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 文件: + +```sh +dotenv -f .env.local -- bbgo run --config config/bbgo.yaml +``` + +或者您可以通過以下方式構建您自己的包裝 binary 文件 + +```shell +bbgo build --config config/bbgo.yaml +``` + +參考 +- +- +- +- +- + +## 命令用法 + +### 向特定交易所 session 提交訂單 + +```shell +bbgo submit-order --session=okex --symbol=OKBUSDT --side=buy --price=10.0 --quantity=1 +``` + +### 列出特定交易所 session 的未平倉訂單 + +```sh +bbgo list-orders open --session=okex --symbol=OKBUSDT +bbgo list-orders open --session=max --symbol=MAXUSDT +bbgo list-orders open --session=binance --symbol=BNBUSDT +``` + +### 取消一個未平倉訂單 + +```shell +# 對於 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 +``` + +### 除錯用戶資料流 + +```shell +bbgo userdatastream --session okex +bbgo userdatastream --session max +bbgo userdatastream --session binance +``` + +## 動態注入 + +為了最小化策略代碼,bbgo 支持動態依賴注入。 + +在執行您的策略之前,如果 bbgo 發現使用 bbgo 組件的嵌入字段,則會將組件注入到您的策略對象中。例如: + +```go +type Strategy struct { + Symbol string `json:"symbol" + Market types.Market +} +``` + +支援的組件(目前僅限單一交易所策略) + +- `*bbgo.ExchangeSession` +- `bbgo.OrderExecutor` + +如果您的策略中有 `Symbol string` 字段,您的策略將被檢測為基於符號的策略,然後以下類型可以自動注入: + +- `types.Market` + +## 策略執行階段 + +1. 從配置文件加載配置。 +1. 分配並初始化交易所 session 。 +1. 將交易所 session 添加到環境(資料層)。 +1. 使用給定的環境初始化交易者對象(邏輯層)。 +1. 交易者初始化環境並啟動交易所連接。 +1. 依次調用 strategy.Run() 方法。 + +## 交易所 API 範例 + +請查看範例 [examples](examples) + +初始化 MAX API: + +```go +key := os.Getenv("MAX_API_KEY") +secret := os.Getenv("MAX_API_SECRET") + +maxRest := maxapi.NewRestClient(maxapi.ProductionAPIURL) +maxRest.Auth(key, secret) +``` + +創建用戶資料流以獲取訂單簿(深度) + +```go +stream := max.NewStream(key, secret) +stream.Subscribe(types.BookChannel, symbol, types.SubscribeOptions{}) + +streambook := types.NewStreamBook(symbol) +streambook.BindStream(stream) +``` + +## 部署 + +- [Helm Chart](./doc/deployment/helm-chart.md) +- 裸機或 VPS + +## 開發 + +- [添加新交易所](./doc/development/adding-new-exchange.md) +- [遷移](./doc/development/migration.md) + +### 設置您的本地存儲庫 + +1. 點擊 GitHub 儲存庫的 "Fork" 按鈕。 +1. 將你分叉的儲存庫複製到 `$GOPATH/github.com/c9s/bbgo`。 +1. 更改目錄到 `$GOPATH/github.com/c9s/bbgo`。 +1. 創建一個分支並開始你的開發。 +1. 測試你的更改。 +1. 將你的更改推送到你的分叉。 +1. 發送一個拉取請求。 + +### 測試桌面應用 + +對於 webview + +```sh +make embed && go run -tags web ./cmd/bbgo-webview +``` + +對於 lorca + +```sh +make embed && go run -tags web ./cmd/bbgo-lorca +``` + +## 常見問題 + +### 什麼是倉位 ? + +- 基礎貨幣 & 報價貨幣 +- 如何計算平均成本? + +### 尋找新策略? + +你可以寫一篇關於 BBGO 的文章,主題不限,750-1500 字以換取,我可以為你實現策略(取決於複雜性和努力程度)。如果你有興趣,可以在 telegram 或 twitter 私訊我,我們可以討論。 + +### 添加新的加密貨幣交易所支持? + +如果你希望 BBGO 支持一個目前 BBGO 未包含的新加密貨幣交易所,我們可以為你實現。成本是 10 ETH。如果你對此感興趣,請在 telegram 私訊我。 + +## 社群 + +- Telegram +- Telegram (台灣社群) +- Twitter + +## 貢獻 + +參見[貢獻](./CONTRIBUTING.md) + +### 歡迎[抖內](https://opencollective.com/bbgo#backer) + + + +## BBGO 代幣經濟 + +為了支持 BBGO 的開發,我們創建了一個獎勵池來支持貢獻者,通過贈送 $BBG 代幣。查看詳情在 [$BBG 合約頁面](contracts/README.md) 和我們的[官方網站](https://bbgo.finance) + +## 支持者 + +- GitBook + +## 授權 + +AGPL 授權 \ No newline at end of file