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:
Ryan O'Hara-Reid
2023-10-18 11:57:27 +11:00
committed by GitHub
parent d3bf4a460a
commit ceef7a14e0
32 changed files with 621 additions and 264 deletions

View File

@@ -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
}