230 lines
6.0 KiB
Go
230 lines
6.0 KiB
Go
|
|
package bitgetservice
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
log "github.com/go-admin-team/go-admin-core/logger"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// ExampleBitgetMarketClient 展示如何使用Bitget公开行情客户端
|
|||
|
|
func ExampleBitgetMarketClient() {
|
|||
|
|
// 1. 创建Bitget客户端(不需要API密钥用于公开数据)
|
|||
|
|
client := &BitgetClient{}
|
|||
|
|
|
|||
|
|
// 初始化公开行情客户端
|
|||
|
|
marketConfig := DefaultMarketConfig()
|
|||
|
|
client.marketClient = NewBitgetMarketClient(marketConfig)
|
|||
|
|
|
|||
|
|
// 2. 设置代理(可选)
|
|||
|
|
// client.SetMarketProxy("socks5", "127.0.0.1:1080")
|
|||
|
|
|
|||
|
|
// 3. 设置消息监听器
|
|||
|
|
msgListener := func(message string) {
|
|||
|
|
log.Info("收到市场数据: %s", message)
|
|||
|
|
// 在这里处理市场数据
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
errorListener := func(message string) {
|
|||
|
|
log.Error("收到错误消息: %s", message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
client.SetMarketListeners(msgListener, errorListener)
|
|||
|
|
|
|||
|
|
// 4. 连接WebSocket
|
|||
|
|
if err := client.ConnectMarketData(); err != nil {
|
|||
|
|
log.Error("连接市场数据失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 5. 订阅现货行情
|
|||
|
|
tickerListener := func(message string) {
|
|||
|
|
log.Info("收到BTC-USDT行情: %s", message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := client.SubscribeSpotTicker("BTCUSDT", tickerListener); err != nil {
|
|||
|
|
log.Error("订阅现货行情失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 6. 订阅深度数据
|
|||
|
|
depthListener := func(message string) {
|
|||
|
|
log.Info("收到BTC-USDT深度: %s", message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := client.SubscribeSpotDepth("BTCUSDT", depthListener); err != nil {
|
|||
|
|
log.Error("订阅深度数据失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 7. 订阅成交数据
|
|||
|
|
tradeListener := func(message string) {
|
|||
|
|
log.Info("收到BTC-USDT成交: %s", message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := client.SubscribeSpotTrades("BTCUSDT", tradeListener); err != nil {
|
|||
|
|
log.Error("订阅成交数据失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 8. 订阅K线数据
|
|||
|
|
klineListener := func(message string) {
|
|||
|
|
log.Info("收到BTC-USDT K线: %s", message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := client.SubscribeKline("BTCUSDT", "1m", klineListener); err != nil {
|
|||
|
|
log.Error("订阅K线数据失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
log.Info("所有订阅完成,开始接收数据...")
|
|||
|
|
|
|||
|
|
// 保持连接(在实际应用中,你可能需要其他方式来保持程序运行)
|
|||
|
|
// select {}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ExampleBitgetPrivateWebSocket 展示如何使用私有WebSocket(订单、持仓等)
|
|||
|
|
func ExampleBitgetPrivateWebSocket() {
|
|||
|
|
// 私有数据订阅仍然使用 BitgetWebSocketManager
|
|||
|
|
// apiKey := "your_api_key"
|
|||
|
|
// secretKey := "your_secret_key"
|
|||
|
|
// passphrase := "your_passphrase"
|
|||
|
|
|
|||
|
|
// // 创建私有WebSocket管理器
|
|||
|
|
// manager := GetOrCreateBitgetWebSocketManager(apiKey, secretKey, passphrase, "spot")
|
|||
|
|
|
|||
|
|
// // 启动连接
|
|||
|
|
// if err := manager.Start(); err != nil {
|
|||
|
|
// log.Error("启动私有WebSocket连接失败: %v", err)
|
|||
|
|
// return
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// log.Info("私有WebSocket连接成功,可以接收订单、持仓等私有数据")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ExampleMixedUsage 展示混合使用公开和私有订阅
|
|||
|
|
func ExampleMixedUsage() {
|
|||
|
|
// apiKey := "your_api_key"
|
|||
|
|
// secretKey := "your_secret_key"
|
|||
|
|
// passphrase := "your_passphrase"
|
|||
|
|
|
|||
|
|
// // 1. 创建完整的Bitget客户端
|
|||
|
|
// client, err := NewBitgetClient(apiKey, secretKey, passphrase)
|
|||
|
|
// if err != nil {
|
|||
|
|
// log.Error("创建Bitget客户端失败: %v", err)
|
|||
|
|
// return
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// // 2. 设置公开行情监听器
|
|||
|
|
// client.SetMarketListeners(
|
|||
|
|
// func(message string) {
|
|||
|
|
// log.Info("公开行情数据: %s", message)
|
|||
|
|
// },
|
|||
|
|
// func(message string) {
|
|||
|
|
// log.Error("公开行情错误: %s", message)
|
|||
|
|
// },
|
|||
|
|
// )
|
|||
|
|
|
|||
|
|
// // 3. 连接公开行情
|
|||
|
|
// if err := client.ConnectMarketData(); err != nil {
|
|||
|
|
// log.Error("连接公开行情失败: %v", err)
|
|||
|
|
// return
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// // 4. 订阅公开行情
|
|||
|
|
// if err := client.SubscribeSpotTicker("BTCUSDT", func(message string) {
|
|||
|
|
// log.Info("BTC行情: %s", message)
|
|||
|
|
// }); err != nil {
|
|||
|
|
// log.Error("订阅行情失败: %v", err)
|
|||
|
|
// return
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// // 5. 同时使用私有WebSocket(如果需要)
|
|||
|
|
// privateManager, err := GetOrCreateBitgetWebSocketManager(apiKey, secretKey, passphrase, "spot")
|
|||
|
|
// if err != nil {
|
|||
|
|
// log.Error("创建私有WebSocket失败: %v", err)
|
|||
|
|
// return
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if err := privateManager.Start(); err != nil {
|
|||
|
|
// log.Error("启动私有WebSocket失败: %v", err)
|
|||
|
|
// return
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// log.Info("混合使用设置完成:公开行情 + 私有数据")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ExampleSubscribeMultipleSymbols 展示如何订阅多个交易对
|
|||
|
|
func ExampleSubscribeMultipleSymbols() {
|
|||
|
|
client := &BitgetClient{}
|
|||
|
|
marketConfig := DefaultMarketConfig()
|
|||
|
|
client.marketClient = NewBitgetMarketClient(marketConfig)
|
|||
|
|
|
|||
|
|
// 连接
|
|||
|
|
if err := client.ConnectMarketData(); err != nil {
|
|||
|
|
log.Error("连接失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 批量订阅多个交易对的行情
|
|||
|
|
symbols := []string{"BTCUSDT", "ETHUSDT", "ADAUSDT", "DOTUSDT"}
|
|||
|
|
|
|||
|
|
for _, symbol := range symbols {
|
|||
|
|
listener := func(sym string) OnReceive {
|
|||
|
|
return func(message string) {
|
|||
|
|
log.Info("%s 行情更新: %s", sym, message)
|
|||
|
|
}
|
|||
|
|
}(symbol)
|
|||
|
|
|
|||
|
|
if err := client.SubscribeSpotTicker(symbol, listener); err != nil {
|
|||
|
|
log.Error("订阅 %s 行情失败: %v", symbol, err)
|
|||
|
|
} else {
|
|||
|
|
log.Info("成功订阅 %s 行情", symbol)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
log.Info("批量订阅完成")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ExampleCustomSubscription 展示如何使用自定义订阅
|
|||
|
|
func ExampleCustomSubscription() {
|
|||
|
|
client := &BitgetClient{}
|
|||
|
|
marketConfig := DefaultMarketConfig()
|
|||
|
|
client.marketClient = NewBitgetMarketClient(marketConfig)
|
|||
|
|
|
|||
|
|
if err := client.ConnectMarketData(); err != nil {
|
|||
|
|
log.Error("连接失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 自定义订阅请求
|
|||
|
|
customSubscriptions := []SubscribeReq{
|
|||
|
|
{
|
|||
|
|
InstType: "SPOT",
|
|||
|
|
Channel: "ticker",
|
|||
|
|
InstId: "BTCUSDT",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
InstType: "SPOT",
|
|||
|
|
Channel: "books",
|
|||
|
|
InstId: "ETHUSDT",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
InstType: "UMCBL", // 合约
|
|||
|
|
Channel: "ticker",
|
|||
|
|
InstId: "BTCUSDT",
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 统一的消息处理器
|
|||
|
|
messageHandler := func(message string) {
|
|||
|
|
log.Info("自定义订阅数据: %s", message)
|
|||
|
|
// 在这里根据消息内容进行不同的处理
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 批量订阅
|
|||
|
|
if err := client.SubscribeMarketData(customSubscriptions, messageHandler); err != nil {
|
|||
|
|
log.Error("自定义订阅失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
log.Info("自定义订阅完成")
|
|||
|
|
}
|