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
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() |
|
}
|
|
|