127 lines
3.9 KiB
Go
127 lines
3.9 KiB
Go
|
|
package bitgetservice
|
|||
|
|
|
|||
|
|
import "time"
|
|||
|
|
|
|||
|
|
// SubscribeReq 订阅请求结构(基于官方SDK)
|
|||
|
|
type SubscribeReq struct {
|
|||
|
|
InstType string `json:"instType"` // 产品类型:SPOT-现货,UMCBL-U本位合约,DMCBL-币本位合约
|
|||
|
|
Channel string `json:"channel"` // 频道名称
|
|||
|
|
InstId string `json:"instId"` // 产品ID
|
|||
|
|
// Coin string `json:"coin"` // 币种(可选)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WsBaseReq WebSocket基础请求结构
|
|||
|
|
type WsBaseReq struct {
|
|||
|
|
Op string `json:"op"` // 操作类型:subscribe, unsubscribe, login
|
|||
|
|
Args []interface{} `json:"args"` // 参数列表
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WsLoginReq WebSocket登录请求
|
|||
|
|
type WsLoginReq struct {
|
|||
|
|
ApiKey string `json:"apiKey"`
|
|||
|
|
Passphrase string `json:"passphrase"`
|
|||
|
|
Timestamp string `json:"timestamp"`
|
|||
|
|
Sign string `json:"sign"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// OnReceive 消息接收回调函数类型
|
|||
|
|
type OnReceive func(message string)
|
|||
|
|
|
|||
|
|
// Set 集合数据结构(简化实现)
|
|||
|
|
type Set struct {
|
|||
|
|
items map[SubscribeReq]bool
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// NewSet 创建新的集合
|
|||
|
|
func NewSet() *Set {
|
|||
|
|
return &Set{
|
|||
|
|
items: make(map[SubscribeReq]bool),
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Add 添加元素到集合
|
|||
|
|
func (s *Set) Add(item SubscribeReq) {
|
|||
|
|
s.items[item] = true
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Remove 从集合中移除元素
|
|||
|
|
func (s *Set) Remove(item SubscribeReq) {
|
|||
|
|
delete(s.items, item)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Contains 检查集合是否包含元素
|
|||
|
|
func (s *Set) Contains(item SubscribeReq) bool {
|
|||
|
|
_, exists := s.items[item]
|
|||
|
|
return exists
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// BitgetMarketData 市场数据基础结构
|
|||
|
|
type BitgetMarketData struct {
|
|||
|
|
Action string `json:"action"` // 推送类型
|
|||
|
|
Arg SubscribeReq `json:"arg"` // 订阅参数
|
|||
|
|
Data interface{} `json:"data"` // 数据内容
|
|||
|
|
Ts int64 `json:"ts"` // 时间戳
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TickerData 行情数据
|
|||
|
|
type TickerData struct {
|
|||
|
|
InstId string `json:"instId"` // 产品ID
|
|||
|
|
Last string `json:"last"` // 最新价
|
|||
|
|
Open24h string `json:"open24h"` // 24小时开盘价
|
|||
|
|
High24h string `json:"high24h"` // 24小时最高价
|
|||
|
|
Low24h string `json:"low24h"` // 24小时最低价
|
|||
|
|
Change24h string `json:"change24h"` // 24小时涨跌幅
|
|||
|
|
Vol24h string `json:"vol24h"` // 24小时成交量
|
|||
|
|
VolCcy24h string `json:"volCcy24h"` // 24小时成交额
|
|||
|
|
Ts string `json:"ts"` // 时间戳
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DepthData 深度数据
|
|||
|
|
type DepthData struct {
|
|||
|
|
InstId string `json:"instId"` // 产品ID
|
|||
|
|
Asks [][]string `json:"asks"` // 卖盘 [价格, 数量]
|
|||
|
|
Bids [][]string `json:"bids"` // 买盘 [价格, 数量]
|
|||
|
|
Ts string `json:"ts"` // 时间戳
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TradeData 成交数据
|
|||
|
|
type TradeData struct {
|
|||
|
|
InstId string `json:"instId"` // 产品ID
|
|||
|
|
TradeId string `json:"tradeId"` // 成交ID
|
|||
|
|
Px string `json:"px"` // 成交价格
|
|||
|
|
Sz string `json:"sz"` // 成交数量
|
|||
|
|
Side string `json:"side"` // 成交方向 buy/sell
|
|||
|
|
Ts string `json:"ts"` // 成交时间
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// KlineData K线数据
|
|||
|
|
type KlineData struct {
|
|||
|
|
InstId string `json:"instId"` // 产品ID
|
|||
|
|
Candle []string `json:"candle"` // K线数据 [时间戳, 开盘价, 最高价, 最低价, 收盘价, 成交量, 成交额]
|
|||
|
|
Ts string `json:"ts"` // 时间戳
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// BitgetMarketConfig 市场数据配置
|
|||
|
|
type BitgetMarketConfig struct {
|
|||
|
|
WsUrl string // WebSocket地址
|
|||
|
|
ReconnectInterval time.Duration // 重连间隔
|
|||
|
|
PingInterval time.Duration // Ping间隔
|
|||
|
|
ReadTimeout time.Duration // 读取超时
|
|||
|
|
WriteTimeout time.Duration // 写入超时
|
|||
|
|
MaxReconnectTimes int // 最大重连次数
|
|||
|
|
EnableCompression bool // 是否启用压缩
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DefaultMarketConfig 默认市场数据配置
|
|||
|
|
func DefaultMarketConfig() *BitgetMarketConfig {
|
|||
|
|
return &BitgetMarketConfig{
|
|||
|
|
WsUrl: "wss://ws.bitget.com/v2/ws/public",
|
|||
|
|
ReconnectInterval: 5 * time.Second,
|
|||
|
|
PingInterval: 15 * time.Second,
|
|||
|
|
ReadTimeout: 60 * time.Second,
|
|||
|
|
WriteTimeout: 10 * time.Second,
|
|||
|
|
MaxReconnectTimes: 10,
|
|||
|
|
EnableCompression: false,
|
|||
|
|
}
|
|||
|
|
}
|