mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-05 23:16:53 +00:00
bybit: Add OrderbookLastUpdated field and ensure timestamp usage is correct (#1680)
* bybit: Add time field for orderbook and handle correct timings * use UpdateID as this is the localised ID for this pair, rm check result.UpdateID == 1 just use snapshot * general quick fixes across from #1672 which can be used straight away * fix test * glorious: nits * thrasher: nits * thrasher: nits thanks @thrasher- --------- Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
This commit is contained in:
@@ -363,7 +363,7 @@ func (by *Bybit) wsProcessOrder(assetType asset.Item, resp *WebsocketResponse) e
|
||||
}
|
||||
execution := make([]order.Detail, len(result))
|
||||
for x := range result {
|
||||
cp, err := currency.NewPairFromString(result[x].Symbol)
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(result[x].Symbol, assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -404,7 +404,7 @@ func (by *Bybit) wsProcessExecution(assetType asset.Item, resp *WebsocketRespons
|
||||
}
|
||||
executions := make([]fill.Data, len(result))
|
||||
for x := range result {
|
||||
cp, err := currency.NewPairFromString(result[x].Symbol)
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(result[x].Symbol, assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -455,7 +455,7 @@ func (by *Bybit) wsProcessLeverageTokenTicker(assetType asset.Item, resp *Websoc
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cp, err := currency.NewPairFromString(result.Symbol)
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(result.Symbol, assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -466,7 +466,7 @@ func (by *Bybit) wsProcessLeverageTokenTicker(assetType asset.Item, resp *Websoc
|
||||
Pair: cp,
|
||||
ExchangeName: by.Name,
|
||||
AssetType: assetType,
|
||||
LastUpdated: resp.Timestamp.Time(),
|
||||
LastUpdated: resp.PushTimestamp.Time(),
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -477,7 +477,7 @@ func (by *Bybit) wsProcessLeverageTokenKline(assetType asset.Item, resp *Websock
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cp, err := currency.NewPairFromString(topicSplit[2])
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(topicSplit[2], assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -521,7 +521,7 @@ func (by *Bybit) wsProcessKline(assetType asset.Item, resp *WebsocketResponse, t
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cp, err := currency.NewPairFromString(topicSplit[2])
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(topicSplit[2], assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -556,7 +556,7 @@ func (by *Bybit) wsProcessPublicTicker(assetType asset.Item, resp *WebsocketResp
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := by.MatchSymbolWithAvailablePairs(tickResp.Symbol, assetType, true)
|
||||
p, err := by.MatchSymbolWithAvailablePairs(tickResp.Symbol, assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -582,7 +582,7 @@ func (by *Bybit) wsProcessPublicTicker(assetType asset.Item, resp *WebsocketResp
|
||||
}
|
||||
|
||||
updateTicker(tick, tickResp)
|
||||
tick.LastUpdated = resp.Timestamp.Time()
|
||||
tick.LastUpdated = resp.PushTimestamp.Time()
|
||||
|
||||
if err = ticker.ProcessTicker(tick); err == nil {
|
||||
by.Websocket.DataHandler <- tick
|
||||
@@ -657,7 +657,7 @@ func (by *Bybit) wsProcessPublicTrade(assetType asset.Item, resp *WebsocketRespo
|
||||
}
|
||||
tradeDatas := make([]trade.Data, len(result))
|
||||
for x := range result {
|
||||
cp, err := currency.NewPairFromString(result[x].Symbol)
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(result[x].Symbol, assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -685,7 +685,7 @@ func (by *Bybit) wsProcessOrderbook(assetType asset.Item, resp *WebsocketRespons
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cp, err := currency.NewPairFromString(result.Symbol)
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(result.Symbol, assetType, hasPotentialDelimiter(assetType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -714,33 +714,27 @@ func (by *Bybit) wsProcessOrderbook(assetType asset.Item, resp *WebsocketRespons
|
||||
if len(asks) == 0 && len(bids) == 0 {
|
||||
return nil
|
||||
}
|
||||
if resp.Type == "snapshot" || result.UpdateID == 1 {
|
||||
err = by.Websocket.Orderbook.LoadSnapshot(&orderbook.Base{
|
||||
Pair: cp,
|
||||
Exchange: by.Name,
|
||||
Asset: assetType,
|
||||
LastUpdated: resp.Timestamp.Time(),
|
||||
LastUpdateID: result.Sequence,
|
||||
Asks: asks,
|
||||
Bids: bids,
|
||||
if resp.Type == "snapshot" {
|
||||
return by.Websocket.Orderbook.LoadSnapshot(&orderbook.Base{
|
||||
Pair: cp,
|
||||
Exchange: by.Name,
|
||||
Asset: assetType,
|
||||
LastUpdated: resp.OrderbookLastUpdated.Time(),
|
||||
LastUpdateID: result.UpdateID,
|
||||
UpdatePushedAt: resp.PushTimestamp.Time(),
|
||||
Asks: asks,
|
||||
Bids: bids,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
err = by.Websocket.Orderbook.Update(&orderbook.Update{
|
||||
Pair: cp,
|
||||
Asks: asks,
|
||||
Bids: bids,
|
||||
Asset: assetType,
|
||||
UpdateID: result.Sequence,
|
||||
UpdateTime: resp.Timestamp.Time(),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return by.Websocket.Orderbook.Update(&orderbook.Update{
|
||||
Pair: cp,
|
||||
Asks: asks,
|
||||
Bids: bids,
|
||||
Asset: assetType,
|
||||
UpdateID: result.UpdateID,
|
||||
UpdateTime: resp.OrderbookLastUpdated.Time(),
|
||||
UpdatePushedAt: resp.PushTimestamp.Time(),
|
||||
})
|
||||
}
|
||||
|
||||
// channelName converts global channel names to exchange specific names
|
||||
@@ -778,3 +772,8 @@ const subTplText = `
|
||||
{{- $.AssetSeparator }}
|
||||
{{- end }}
|
||||
`
|
||||
|
||||
// hasPotentialDelimiter returns if the asset has a potential delimiter on the pairs being returned.
|
||||
func hasPotentialDelimiter(a asset.Item) bool {
|
||||
return a == asset.Options || a == asset.USDCMarginedFutures
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user