You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

75 lines
2.9 KiB

package okx
// 行情频道 channel: tickers
// 获取产品的最新成交价、买一价、卖一价和24小时交易量等信息。
// 最快100ms推送一次,没有触发事件时不推送,触发推送的事件有:成交、买一卖一发生变动。
type TickersData struct {
InstType string `json:"instType"` // 产品类型
InstId string `json:"instId"` // 产品ID
Last string `json:"last"` // 最新成交价
LastSz string `json:"lastSz"` // 最新成交的数量,0 代表没有成交量
AskPx string `json:"askPx"` // 卖一价
AskSz string `json:"askSz"` // 卖一价对应的数量
BidPx string `json:"bidPx"` // 买一价
BidSz string `json:"bidSz"` // 买一价对应的数量
Open24h string `json:"open24h"` // 24小时开盘价
High24h string `json:"high24h"` // 24小时最高价
Low24h string `json:"low24h"` // 24小时最低价
VolCcy24h string `json:"volCcy24h"` // 24小时成交量,以币为单位如果是衍生品合约,数值为交易货币的数量。如果是币币/币币杠杆,数值为计价货币的数量。
Vol24h string `json:"vol24h"` // 24小时成交量,以张为单位如果是衍生品合约,数值为合约的张数。如果是币币/币币杠杆,数值为交易货币的数量。
SodUtc0 string `json:"sodUtc0"` // UTC+0 时开盘价
SodUtc8 string `json:"sodUtc8"` // UTC+8 时开盘价
Ts string `json:"ts"` // ticker数据产生时间,Unix时间戳的毫秒数格式,如 1597026383085
}
// ChannelTickers 行情频道
type ChannelTickers struct {
cfg wsChannelConfig[*[]TickersData, *ChannelData[*[]TickersData]]
wsChannel *wsChannel[*[]TickersData, *ChannelData[*[]TickersData]]
}
func NewChannelTickers(
traceId string,
httpProxy string,
) *ChannelTickers {
cfg := wsChannelConfig[*[]TickersData, *ChannelData[*[]TickersData]]{
channelId: traceId,
httpProxy: httpProxy,
wsUrl: "/ws/v5/public",
subscribeChannels: []string{"tickers"},
dataInstanceFunc: func() *[]TickersData {
var d []TickersData
return &d
},
dataMappingFunc: func(data *ChannelData[*[]TickersData]) (*ChannelData[*[]TickersData], error) {
return data, nil
},
}
return &ChannelTickers{cfg: cfg}
}
func (c *ChannelTickers) Init() (err error) {
c.wsChannel = newWsChannel(c.cfg)
return c.wsChannel.Init()
}
func (c *ChannelTickers) Consumer() <-chan *ChannelData[*[]TickersData] {
return c.wsChannel.Consumer()
}
func (c *ChannelTickers) Subscribe(instIds ...string) (err error) {
return c.wsChannel.Subscribe(instIds...)
}
func (c *ChannelTickers) Unsubscribe(instIds ...string) (err error) {
return c.wsChannel.Unsubscribe(instIds...)
}
func (c *ChannelTickers) IsSubscribe(instId string) bool {
return c.wsChannel.IsSubscribed(instId)
}
func (c *ChannelTickers) GetSubscribes() (instIds []string) {
return c.wsChannel.GetSubscribes()
}