exchanges: Add UpdateTickers method and reserve UpdateTicker for single ticker symbol update requests (if supported) (#764)

* exchanges: add an UpdateTickers method to the main exchange interface

This method will fetch all currency pair tickers of a given asset type
and update them internally, does nothing for now.

* exchanges: refactor UpdateTicker on all exchanges

Keep the exact previous behaviour but implement the UpdateTickers
method and refactor UpdateTicker by using it where applicable.

* sync_manager: update all tickers when batching is enabled

* binance: UpdateTicker to fetch single ticker symbol

* ftx: UpdateTicker to fetch single ticker symbol
This commit is contained in:
Luis Rascão
2021-08-27 03:31:34 +01:00
committed by GitHub
parent 4851e94eba
commit c9ab0b1164
52 changed files with 931 additions and 267 deletions

View File

@@ -935,6 +935,14 @@ func TestUpdateTicker(t *testing.T) {
}
}
func TestUpdateTickers(t *testing.T) {
t.Parallel()
err := f.UpdateTickers(asset.Spot)
if err != nil {
t.Error(err)
}
}
func TestGetActiveOrders(t *testing.T) {
t.Parallel()
if !areTestAPIKeysSet() {

View File

@@ -94,6 +94,7 @@ func (f *FTX) SetDefaults() {
Websocket: true,
RESTCapabilities: protocol.Features{
TickerFetching: true,
TickerBatching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
@@ -299,25 +300,21 @@ func (f *FTX) UpdateTradablePairs(forceUpdate bool) error {
return nil
}
// UpdateTicker updates and returns the ticker for a currency pair
func (f *FTX) UpdateTicker(p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
allPairs, err := f.GetEnabledPairs(assetType)
// UpdateTickers updates the ticker for all currency pairs of a given asset type
func (f *FTX) UpdateTickers(a asset.Item) error {
allPairs, err := f.GetEnabledPairs(a)
if err != nil {
return nil, err
}
if !allPairs.Contains(p, true) {
allPairs = append(allPairs, p)
return err
}
markets, err := f.GetMarkets()
if err != nil {
return nil, err
return err
}
for a := range allPairs {
formattedPair, err := f.FormatExchangeCurrency(allPairs[a], assetType)
for p := range allPairs {
formattedPair, err := f.FormatExchangeCurrency(allPairs[p], a)
if err != nil {
return nil, err
return err
}
for x := range markets {
@@ -327,21 +324,52 @@ func (f *FTX) UpdateTicker(p currency.Pair, assetType asset.Item) (*ticker.Price
var resp ticker.Price
resp.Pair, err = currency.NewPairFromString(markets[x].Name)
if err != nil {
return nil, err
return err
}
resp.Last = markets[x].Last
resp.Bid = markets[x].Bid
resp.Ask = markets[x].Ask
resp.LastUpdated = time.Now()
resp.AssetType = assetType
resp.AssetType = a
resp.ExchangeName = f.Name
err = ticker.ProcessTicker(&resp)
if err != nil {
return nil, err
return err
}
}
}
return ticker.GetTicker(f.Name, p, assetType)
return nil
}
// UpdateTicker updates and returns the ticker for a currency pair
func (f *FTX) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, error) {
formattedPair, err := f.FormatExchangeCurrency(p, a)
if err != nil {
return nil, err
}
market, err := f.GetMarket(formattedPair.String())
if err != nil {
return nil, err
}
var resp ticker.Price
resp.Pair, err = currency.NewPairFromString(market.Name)
if err != nil {
return nil, err
}
resp.Last = market.Last
resp.Bid = market.Bid
resp.Ask = market.Ask
resp.LastUpdated = time.Now()
resp.AssetType = a
resp.ExchangeName = f.Name
err = ticker.ProcessTicker(&resp)
if err != nil {
return nil, err
}
return ticker.GetTicker(f.Name, p, a)
}
// FetchTicker returns the ticker for a currency pair