golang加密货币交易机器人框架插件bbgo的使用
Golang 加密货币交易机器人框架 BBGO 使用指南
概述
BBGO 是一个用 Go 编写的现代加密货币交易机器人框架。
主要功能
- 交易所抽象接口
- 流式集成(用户数据 WebSocket,市场数据 WebSocket)
- 实时订单簿集成
- TWAP 订单执行支持
- PnL 计算
- Slack/Telegram 通知
- 回测:基于 K 线的回测引擎
- 内置参数优化工具
- 多种内置策略
- 多交易所会话支持
- 多种技术指标
- React 驱动的 Web 仪表盘
- Docker 镜像支持
- Kubernetes 支持
- Helm chart 支持
- 高精度浮点数(最高 16 位)
安装
从二进制安装
# 为 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
从源码构建
参考 从源码构建
配置
创建你的环境变量文件 .env.local
:
# Binance 交易所
BINANCE_API_KEY=
BINANCE_API_SECRET=
# 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=
下载最小配置文件:
curl -o bbgo.yaml https://raw.githubusercontent.com/c9s/bbgo/main/config/minimal.yaml
运行策略
bbgo run
启用 Web 仪表盘:
bbgo run --enable-webserver
示例代码
简单的网格策略配置示例
# config/grid.yaml
---
sessions:
binance:
exchange: binance
envVarPrefix: BINANCE
exchangeStrategies:
- on: binance
grid:
symbol: BTCUSDT
quantity: 0.001
gridNumber: 100
upperPrice: 50000.0
lowerPrice: 30000.0
profitSpread: 100.0
自定义策略示例
package main
import (
"github.com/c9s/bbgo/pkg/bbgo"
"github.com/c9s/bbgo/pkg/types"
)
type MyStrategy struct {
Symbol string `json:"symbol"`
Market types.Market
}
func (s *MyStrategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, session *bbgo.ExchangeSession) error {
// 策略逻辑实现
session.Subscribe(types.KLineChannel, s.Symbol, types.SubscribeOptions{})
session.MarketDataStream.OnKLine(func(kline types.KLine) {
// 处理K线数据
if kline.Closed {
log.Printf("KLine closed: %+v", kline)
}
})
return nil
}
func init() {
bbgo.RegisterStrategy("myStrategy", &MyStrategy{})
}
内置策略
BBGO
更多关于golang加密货币交易机器人框架插件bbgo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang加密货币交易机器人框架插件bbgo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang加密货币交易机器人框架BBGo使用指南
BBGo是一个用Go语言编写的模块化加密货币交易机器人框架,支持多种交易所和交易策略。下面我将介绍BBGo的基本使用方法和示例代码。
1. BBGo核心概念
BBGo的主要特点:
- 支持多种交易所(Binance, Max, OKEx等)
- 支持现货和杠杆交易
- 内置多种技术指标
- 支持自定义策略
- 提供Web界面
2. 安装BBGo
# 安装BBGo
go install github.com/c9s/bbgo@latest
# 验证安装
bbgo version
3. 基本配置
创建配置文件bbgo.yaml
:
exchange:
binance:
apiKey: "your_api_key"
apiSecret: "your_api_secret"
# 持久化配置
persistence:
redis:
host: 127.0.0.1
port: 6379
4. 简单策略示例
下面是一个简单的均线交叉策略实现:
package main
import (
"context"
"log"
"github.com/c9s/bbgo/pkg/bbgo"
"github.com/c9s/bbgo/pkg/exchange/binance"
"github.com/c9s/bbgo/pkg/indicator"
"github.com/c9s/bbgo/pkg/types"
)
// 定义策略结构体
type SmaCrossStrategy struct {
// 指标
FastSMA *indicator.SMA
SlowSMA *indicator.SMA
// 配置参数
Symbol string `json:"symbol"`
Interval string `json:"interval"`
FastPeriod int `json:"fastPeriod"`
SlowPeriod int `json:"slowPeriod"`
}
// 订阅市场数据
func (s *SmaCrossStrategy) Subscribe(session *bbgo.ExchangeSession) {
session.Subscribe(types.KLineChannel, s.Symbol, types.SubscribeOptions{Interval: s.Interval})
}
// 运行策略
func (s *SmaCrossStrategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, session *bbgo.ExchangeSession) error {
// 初始化指标
s.FastSMA = &indicator.SMA{IntervalWindow: types.IntervalWindow{Interval: s.Interval, Window: s.FastPeriod}}
s.SlowSMA = &indicator.SMA{IntervalWindow: types.IntervalWindow{Interval: s.Interval, Window: s.SlowPeriod}}
// 处理K线数据
session.MarketDataStream.OnKLineClosed(func(kline types.KLine) {
if kline.Symbol != s.Symbol || kline.Interval != s.Interval {
return
}
// 更新指标
s.FastSMA.Update(kline.Close)
s.SlowSMA.Update(kline.Close)
// 检查交叉
crossOver := bbgo.CrossOver(s.FastSMA.Values, s.SlowSMA.Values)
crossUnder := bbgo.CrossUnder(s.FastSMA.Values, s.SlowSMA.Values)
// 获取当前持仓
position := orderExecutor.Position()
if crossOver && position.IsDust() {
// 金叉且无持仓时买入
_, err := orderExecutor.SubmitOrder(ctx, types.SubmitOrder{
Symbol: s.Symbol,
Side: types.SideTypeBuy,
Type: types.OrderTypeMarket,
Quantity: 0.01, // 买入数量
})
if err != nil {
log.Printf("买入失败: %v", err)
}
} else if crossUnder && position.GetBase().Sign() > 0 {
// 死叉且有持仓时卖出
_, err := orderExecutor.SubmitOrder(ctx, types.SubmitOrder{
Symbol: s.Symbol,
Side: types.SideTypeSell,
Type: types.OrderTypeMarket,
Quantity: position.GetBase().Abs(), // 卖出全部持仓
})
if err != nil {
log.Printf("卖出失败: %v", err)
}
}
})
return nil
}
func main() {
// 创建BBGo环境
environ := bbgo.NewEnvironment()
// 添加交易所
binanceExchange := binance.New("binance")
environ.AddExchange("binance", binanceExchange)
// 创建策略实例
strategy := &SmaCrossStrategy{
Symbol: "BTCUSDT",
Interval: "1h",
FastPeriod: 5,
SlowPeriod: 20,
}
// 注册策略
bbgo.RegisterStrategy("sma_cross", strategy)
// 启动交易机器人
ctx := context.Background()
if err := bbgo.Run(ctx, environ); err != nil {
log.Fatal(err)
}
}
5. 高级功能
5.1 使用Web界面
BBGo内置Web界面,可以通过以下配置启用:
server:
bind: 0.0.0.0
port: 8080
baseURL: /
5.2 使用通知
// 在策略中添加通知
session.Notifier.Notify("策略信号: 买入 %s", s.Symbol)
5.3 回测支持
BBGo支持回测功能:
bbgo backtest --config bbgo.yaml --exchange binance --symbol BTCUSDT --from 20230101 --to 20230201
6. 部署建议
- 使用Docker部署:
docker run -v $(pwd)/config:/config -p 8080:8080 ghcr.io/c9s/bbgo:latest
- 使用systemd管理服务:
[Unit]
Description=BBGo Trading Bot
After=network.target
[Service]
ExecStart=/usr/local/bin/bbgo run --config /path/to/bbgo.yaml
Restart=always
User=bbgo
[Install]
WantedBy=multi-user.target
7. 注意事项
- 生产环境使用前务必充分测试
- 注意API密钥安全
- 监控机器人运行状态
- 设置合理的风险控制参数
BBGo提供了丰富的功能和灵活的扩展性,适合构建各种复杂的交易策略。更多高级用法可以参考官方文档和示例代码。