mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-19 15:10:05 +00:00
currency: Adds matching lookup table built from available pairs (#1312)
* currency: Add pair matching update (cherry-pick) * exchange/currency: Add tests and update func * linter fix, also if using json unmarshal functionality stop usage of string conversion without delimiter * gemini: fix test * currency/manager: potential optimisation * exchanges: purge derive from wrapper cases and add warning comment * glorious: nits * glorious: nits * linter: fix * glorious: nits * whoops * whoops * glorious: nits continued * glorious: diff THANKS! * hitbtc: fix update tradable pairs strings splitting. continue if not enabled tickers update pair. * glorious: nits * linter: fix * Update exchanges/exmo/exmo_wrapper.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * bitstamp: fix test when 32 biterinos architecturinos * capture more strings for speed * swapsies because whos running 32bit \0/? --------- Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io> Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -2042,7 +2042,7 @@ func TestUpdateTicker(t *testing.T) {
|
||||
var pairs currency.Pairs
|
||||
if mockTests {
|
||||
var pair2 currency.Pair
|
||||
pair2, err = currency.NewPairFromString("BTCUSD-U23")
|
||||
pair2, err = currency.NewPairFromString("BTCUSD-Z23")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -2230,7 +2230,7 @@ func TestGetHistoricCandles(t *testing.T) {
|
||||
}
|
||||
var pair2 currency.Pair
|
||||
if mockTests {
|
||||
pair2, err = currency.NewPairFromString("BTCUSD-U23")
|
||||
pair2, err = currency.NewPairFromString("BTCUSD-Z23")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -2292,7 +2292,7 @@ func TestGetHistoricCandlesExtended(t *testing.T) {
|
||||
}
|
||||
var pair2 currency.Pair
|
||||
if mockTests {
|
||||
pair2, err = currency.NewPairFromString("BTCUSD-U23")
|
||||
pair2, err = currency.NewPairFromString("BTCUSD-Z23")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -266,11 +266,15 @@ func (by *Bybit) wsHandleData(respRaw []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p, err := by.extractCurrencyPair(data.OBData.Symbol, asset.Spot)
|
||||
p, enabled, err := by.MatchSymbolCheckEnabled(data.OBData.Symbol, asset.Spot, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = by.wsUpdateOrderbook(&data.OBData, p, asset.Spot)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -286,11 +290,15 @@ func (by *Bybit) wsHandleData(respRaw []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := by.extractCurrencyPair(data.Parameters.Symbol, asset.Spot)
|
||||
p, enabled, err := by.MatchSymbolCheckEnabled(data.Parameters.Symbol, asset.Spot, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
side := order.Sell
|
||||
if data.TradeData.Side {
|
||||
side = order.Buy
|
||||
@@ -313,11 +321,15 @@ func (by *Bybit) wsHandleData(respRaw []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := by.extractCurrencyPair(data.Ticker.Symbol, asset.Spot)
|
||||
p, enabled, err := by.MatchSymbolCheckEnabled(data.Ticker.Symbol, asset.Spot, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
by.Websocket.DataHandler <- &ticker.Price{
|
||||
ExchangeName: by.Name,
|
||||
Bid: data.Ticker.Bid.Float64(),
|
||||
@@ -334,11 +346,15 @@ func (by *Bybit) wsHandleData(respRaw []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := by.extractCurrencyPair(data.Kline.Symbol, asset.Spot)
|
||||
p, enabled, err := by.MatchSymbolCheckEnabled(data.Kline.Symbol, asset.Spot, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
by.Websocket.DataHandler <- stream.KlineData{
|
||||
Pair: p,
|
||||
AssetType: asset.Spot,
|
||||
@@ -425,11 +441,15 @@ func (by *Bybit) wsHandleData(respRaw []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
p, err := by.extractCurrencyPair(data[j].Symbol, asset.Spot)
|
||||
p, enabled, err := by.MatchSymbolCheckEnabled(data[j].Symbol, asset.Spot, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
continue
|
||||
}
|
||||
|
||||
by.Websocket.DataHandler <- order.Detail{
|
||||
Price: data[j].Price.Float64(),
|
||||
Amount: data[j].Quantity.Float64(),
|
||||
@@ -475,11 +495,15 @@ func (by *Bybit) wsHandleData(respRaw []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
p, err := by.extractCurrencyPair(data[j].Symbol, asset.Spot)
|
||||
p, enabled, err := by.MatchSymbolCheckEnabled(data[j].Symbol, asset.Spot, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
continue
|
||||
}
|
||||
|
||||
by.Websocket.DataHandler <- &order.Detail{
|
||||
Exchange: by.Name,
|
||||
OrderID: data[j].OrderID,
|
||||
|
||||
@@ -2,6 +2,7 @@ package bybit
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strconv"
|
||||
@@ -416,16 +417,6 @@ func (by *Bybit) UpdateTradablePairs(ctx context.Context, forceUpdate bool) erro
|
||||
|
||||
// UpdateTickers updates the ticker for all currency pairs of a given asset type
|
||||
func (by *Bybit) UpdateTickers(ctx context.Context, assetType asset.Item) error {
|
||||
avail, err := by.GetAvailablePairs(assetType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
enabled, err := by.GetEnabledPairs(assetType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch assetType {
|
||||
case asset.Spot:
|
||||
ticks, err := by.GetTickersV5(ctx, "spot", "", "")
|
||||
@@ -434,17 +425,19 @@ func (by *Bybit) UpdateTickers(ctx context.Context, assetType asset.Item) error
|
||||
}
|
||||
|
||||
for x := range ticks.List {
|
||||
pair, err := avail.DeriveFrom(ticks.List[x].Symbol)
|
||||
pair, enabled, err := by.MatchSymbolCheckEnabled(ticks.List[x].Symbol, assetType, false)
|
||||
if err != nil {
|
||||
// These symbols below do not have a spot market but are in fact
|
||||
// perpetuals.
|
||||
if ticks.List[x].Symbol == "ZECUSDT" || ticks.List[x].Symbol == "DASHUSDT" {
|
||||
continue
|
||||
}
|
||||
return err
|
||||
if !errors.Is(err, currency.ErrPairNotFound) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if !enabled.Contains(pair, true) {
|
||||
if !enabled {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -465,6 +458,11 @@ func (by *Bybit) UpdateTickers(ctx context.Context, assetType asset.Item) error
|
||||
}
|
||||
}
|
||||
case asset.CoinMarginedFutures, asset.USDTMarginedFutures, asset.Futures:
|
||||
enabled, err := by.GetEnabledPairs(assetType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tick, err := by.GetFuturesSymbolPriceTicker(ctx, currency.EMPTYPAIR)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -480,7 +478,8 @@ func (by *Bybit) UpdateTickers(ctx context.Context, assetType asset.Item) error
|
||||
if tick[y].Symbol != formattedPair.String() {
|
||||
continue
|
||||
}
|
||||
cp, err := by.extractCurrencyPair(tick[y].Symbol, assetType)
|
||||
// Don't need to check if this pair is enabled due to call above.
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(tick[y].Symbol, assetType, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -501,6 +500,11 @@ func (by *Bybit) UpdateTickers(ctx context.Context, assetType asset.Item) error
|
||||
}
|
||||
}
|
||||
case asset.USDCMarginedFutures:
|
||||
enabled, err := by.GetEnabledPairs(assetType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for x := range enabled {
|
||||
formattedPair, err := by.FormatExchangeCurrency(enabled[x], assetType)
|
||||
if err != nil {
|
||||
@@ -512,7 +516,8 @@ func (by *Bybit) UpdateTickers(ctx context.Context, assetType asset.Item) error
|
||||
return err
|
||||
}
|
||||
|
||||
cp, err := by.extractCurrencyPair(tick.Symbol, assetType)
|
||||
// Don't need to check if this pair is enabled due to call above.
|
||||
cp, err := by.MatchSymbolWithAvailablePairs(tick.Symbol, assetType, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -551,10 +556,13 @@ func (by *Bybit) UpdateTicker(ctx context.Context, p currency.Pair, assetType as
|
||||
}
|
||||
|
||||
for y := range tick {
|
||||
cp, err := by.extractCurrencyPair(tick[y].Symbol, assetType)
|
||||
cp, enabled, err := by.MatchSymbolCheckEnabled(tick[y].Symbol, assetType, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !enabled {
|
||||
continue
|
||||
}
|
||||
err = ticker.ProcessTicker(&ticker.Price{
|
||||
Last: tick[y].LastPrice.Float64(),
|
||||
High: tick[y].HighPrice.Float64(),
|
||||
@@ -572,7 +580,6 @@ func (by *Bybit) UpdateTicker(ctx context.Context, p currency.Pair, assetType as
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
case asset.CoinMarginedFutures, asset.USDTMarginedFutures, asset.Futures:
|
||||
tick, err := by.GetFuturesSymbolPriceTicker(ctx, formattedPair)
|
||||
if err != nil {
|
||||
@@ -580,10 +587,13 @@ func (by *Bybit) UpdateTicker(ctx context.Context, p currency.Pair, assetType as
|
||||
}
|
||||
|
||||
for y := range tick {
|
||||
cp, err := by.extractCurrencyPair(tick[y].Symbol, assetType)
|
||||
cp, enabled, err := by.MatchSymbolCheckEnabled(tick[y].Symbol, assetType, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !enabled {
|
||||
continue
|
||||
}
|
||||
err = ticker.ProcessTicker(&ticker.Price{
|
||||
Last: tick[y].LastPrice.Float64(),
|
||||
High: tick[y].HighPrice24h.Float64(),
|
||||
@@ -606,10 +616,13 @@ func (by *Bybit) UpdateTicker(ctx context.Context, p currency.Pair, assetType as
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cp, err := by.extractCurrencyPair(tick.Symbol, assetType)
|
||||
cp, enabled, err := by.MatchSymbolCheckEnabled(tick.Symbol, assetType, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !enabled {
|
||||
return nil, fmt.Errorf("%v %v not enabled", formattedPair, assetType)
|
||||
}
|
||||
err = ticker.ProcessTicker(&ticker.Price{
|
||||
Last: tick.LastPrice.Float64(),
|
||||
High: tick.High24h.Float64(),
|
||||
@@ -2097,30 +2110,12 @@ func (by *Bybit) GetServerTime(ctx context.Context, a asset.Item) (time.Time, er
|
||||
return time.Time{}, fmt.Errorf("%s %w", a, asset.ErrNotSupported)
|
||||
}
|
||||
|
||||
func (by *Bybit) extractCurrencyPair(symbol string, item asset.Item) (currency.Pair, error) {
|
||||
pairs, err := by.CurrencyPairs.GetPairs(item, true)
|
||||
if err != nil {
|
||||
return currency.EMPTYPAIR, err
|
||||
}
|
||||
pair, err := pairs.DeriveFrom(symbol)
|
||||
if err != nil {
|
||||
return currency.EMPTYPAIR, err
|
||||
}
|
||||
return pair, nil
|
||||
}
|
||||
|
||||
// UpdateOrderExecutionLimits sets exchange executions for a required asset type
|
||||
func (by *Bybit) UpdateOrderExecutionLimits(ctx context.Context, a asset.Item) error {
|
||||
avail, err := by.GetAvailablePairs(a)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var limits []order.MinMaxLevel
|
||||
switch a {
|
||||
case asset.Spot:
|
||||
var pairsData []PairData
|
||||
pairsData, err = by.GetAllSpotPairs(ctx)
|
||||
pairsData, err := by.GetAllSpotPairs(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -2128,11 +2123,15 @@ func (by *Bybit) UpdateOrderExecutionLimits(ctx context.Context, a asset.Item) e
|
||||
limits = make([]order.MinMaxLevel, 0, len(pairsData))
|
||||
for x := range pairsData {
|
||||
var pair currency.Pair
|
||||
pair, err = avail.DeriveFrom(pairsData[x].Name)
|
||||
var enabled bool
|
||||
pair, enabled, err = by.MatchSymbolCheckEnabled(pairsData[x].Name, a, false)
|
||||
if err != nil {
|
||||
log.Warnf(log.ExchangeSys, "%s unable to load limits for %v, pair data missing", by.Name, pairsData[x].Name)
|
||||
continue
|
||||
}
|
||||
if !enabled {
|
||||
continue
|
||||
}
|
||||
|
||||
limits = append(limits, order.MinMaxLevel{
|
||||
Asset: a,
|
||||
|
||||
@@ -215,6 +215,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
if wsType, ok := multiStreamData["type"].(string); ok {
|
||||
switch topics[0] {
|
||||
case wsOrder25, wsOrder200:
|
||||
var enabled bool
|
||||
switch wsType {
|
||||
case wsOperationSnapshot:
|
||||
var response WsFuturesOrderbook
|
||||
@@ -224,11 +225,15 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData[0].Symbol, asset.CoinMarginedFutures)
|
||||
p, enabled, err = by.MatchSymbolCheckEnabled(response.OBData[0].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = by.processOrderbook(response.OBData,
|
||||
response.Type,
|
||||
p,
|
||||
@@ -236,7 +241,6 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
case wsOperationDelta:
|
||||
var response WsCoinDeltaOrderbook
|
||||
err = json.Unmarshal(respRaw, &response)
|
||||
@@ -246,11 +250,15 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Delete) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Delete[0].Symbol, asset.CoinMarginedFutures)
|
||||
p, enabled, err = by.MatchSymbolCheckEnabled(response.OBData.Delete[0].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = by.processOrderbook(response.OBData.Delete,
|
||||
wsOrderbookActionDelete,
|
||||
p,
|
||||
@@ -262,11 +270,15 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Update) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Update[0].Symbol, asset.CoinMarginedFutures)
|
||||
p, enabled, err = by.MatchSymbolCheckEnabled(response.OBData.Update[0].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = by.processOrderbook(response.OBData.Update,
|
||||
wsOrderbookActionUpdate,
|
||||
p,
|
||||
@@ -278,11 +290,15 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Insert) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Insert[0].Symbol, asset.CoinMarginedFutures)
|
||||
p, enabled, err = by.MatchSymbolCheckEnabled(response.OBData.Insert[0].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = by.processOrderbook(response.OBData.Insert,
|
||||
wsOrderbookActionInsert,
|
||||
p,
|
||||
@@ -308,7 +324,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
trades := make([]trade.Data, len(response.TradeData))
|
||||
for i := range response.TradeData {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.TradeData[0].Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.TradeData[0].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -344,7 +360,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(topics[len(topics)-1], asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(topics[len(topics)-1], asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -382,7 +398,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Ticker.Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Ticker.Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -411,7 +427,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Delete) > 0 {
|
||||
for x := range response.Data.Delete {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Delete[x].Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Delete[x].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -435,7 +451,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Update) > 0 {
|
||||
for x := range response.Data.Update {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Update[x].Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Update[x].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -459,7 +475,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Insert) > 0 {
|
||||
for x := range response.Data.Insert {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Insert[x].Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Insert[x].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -510,7 +526,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
|
||||
for i := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[i].Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[i].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -566,7 +582,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
}
|
||||
for x := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[x].Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[x].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -628,7 +644,7 @@ func (by *Bybit) wsCoinHandleData(respRaw []byte) error {
|
||||
}
|
||||
for x := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[x].Symbol, asset.CoinMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[x].Symbol, asset.CoinMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData[0].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.OBData[0].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -198,7 +198,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Delete) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Delete[0].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.OBData.Delete[0].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -213,7 +213,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Update) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Update[0].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.OBData.Update[0].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -229,7 +229,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Insert) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Insert[0].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.OBData.Insert[0].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -261,7 +261,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
trades := make([]trade.Data, len(response.TradeData))
|
||||
for i := range response.TradeData {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.TradeData[0].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.TradeData[0].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -297,7 +297,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(topics[len(topics)-1], asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(topics[len(topics)-1], asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -327,7 +327,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Ticker.Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Ticker.Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -356,7 +356,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Delete) > 0 {
|
||||
for x := range response.Data.Delete {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Delete[x].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Delete[x].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -380,7 +380,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Update) > 0 {
|
||||
for x := range response.Data.Update {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Update[x].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Update[x].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -404,7 +404,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Insert) > 0 {
|
||||
for x := range response.Data.Insert {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Insert[x].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Insert[x].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -455,7 +455,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
|
||||
for i := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[i].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[i].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -509,7 +509,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
}
|
||||
for x := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[x].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[x].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -571,7 +571,7 @@ func (by *Bybit) wsFuturesHandleData(respRaw []byte) error {
|
||||
}
|
||||
for x := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[x].Symbol, asset.Futures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[x].Symbol, asset.Futures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.OBData[0].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.OBData[0].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -206,7 +206,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Delete) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Delete[0].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.OBData.Delete[0].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -222,7 +222,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Update) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Update[0].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.OBData.Update[0].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -238,7 +238,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
|
||||
if len(response.OBData.Insert) > 0 {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.OBData.Insert[0].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.OBData.Insert[0].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -268,7 +268,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
trades := make([]trade.Data, len(response.TradeData))
|
||||
for i := range response.TradeData {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.TradeData[0].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.TradeData[0].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -303,7 +303,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(topics[len(topics)-1], asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(topics[len(topics)-1], asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -333,7 +333,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
}
|
||||
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Ticker.Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Ticker.Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -362,7 +362,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Delete) > 0 {
|
||||
for x := range response.Data.Delete {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Delete[x].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Delete[x].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -386,7 +386,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Update) > 0 {
|
||||
for x := range response.Data.Update {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Update[x].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Update[x].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -410,7 +410,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
if len(response.Data.Insert) > 0 {
|
||||
for x := range response.Data.Insert {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data.Insert[x].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data.Insert[x].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -461,7 +461,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
|
||||
for i := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[i].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[i].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -515,7 +515,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
}
|
||||
for x := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[x].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[x].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -577,7 +577,7 @@ func (by *Bybit) wsUSDTHandleData(respRaw []byte) error {
|
||||
}
|
||||
for x := range response.Data {
|
||||
var p currency.Pair
|
||||
p, err = by.extractCurrencyPair(response.Data[x].Symbol, asset.USDTMarginedFutures)
|
||||
p, err = by.MatchSymbolWithAvailablePairs(response.Data[x].Symbol, asset.USDTMarginedFutures, false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user