1、暂存
This commit is contained in:
126
services/bitgetservice/bitget_market_models.go
Normal file
126
services/bitgetservice/bitget_market_models.go
Normal file
@ -0,0 +1,126 @@
|
||||
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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user