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

@@ -242,6 +242,13 @@ func TestUpdateTicker(t *testing.T) {
}
}
func TestUpdateTickers(t *testing.T) {
err := b.UpdateTickers(asset.Spot)
if err != nil {
t.Fatal(err)
}
}
func setFeeBuilder() *exchange.FeeBuilder {
return &exchange.FeeBuilder{
Amount: 1,

View File

@@ -251,24 +251,23 @@ func (b *Bithumb) UpdateTradablePairs(forceUpdate bool) error {
return b.UpdatePairs(p, asset.Spot, false, forceUpdate)
}
// UpdateTicker updates and returns the ticker for a currency pair
func (b *Bithumb) UpdateTicker(p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
// UpdateTickers updates the ticker for all currency pairs of a given asset type
func (b *Bithumb) UpdateTickers(a asset.Item) error {
tickers, err := b.GetAllTickers()
if err != nil {
return nil, err
return err
}
pairs, err := b.GetEnabledPairs(assetType)
pairs, err := b.GetEnabledPairs(a)
if err != nil {
return nil, err
return err
}
for i := range pairs {
curr := pairs[i].Base.String()
t, ok := tickers[curr]
if !ok {
return nil,
fmt.Errorf("enabled pair %s [%s] not found in returned ticker map %v",
pairs[i], pairs, tickers)
return fmt.Errorf("enabled pair %s [%s] not found in returned ticker map %v",
pairs[i], pairs, tickers)
}
err = ticker.ProcessTicker(&ticker.Price{
High: t.MaxPrice,
@@ -278,20 +277,29 @@ func (b *Bithumb) UpdateTicker(p currency.Pair, assetType asset.Item) (*ticker.P
Close: t.ClosingPrice,
Pair: pairs[i],
ExchangeName: b.Name,
AssetType: assetType,
AssetType: a,
})
if err != nil {
return nil, err
return err
}
}
return ticker.GetTicker(b.Name, p, assetType)
return nil
}
// UpdateTicker updates and returns the ticker for a currency pair
func (b *Bithumb) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, error) {
err := b.UpdateTickers(a)
if err != nil {
return nil, err
}
return ticker.GetTicker(b.Name, p, a)
}
// FetchTicker returns the ticker for a currency pair
func (b *Bithumb) FetchTicker(p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
tickerNew, err := ticker.GetTicker(b.Name, p, assetType)
func (b *Bithumb) FetchTicker(p currency.Pair, a asset.Item) (*ticker.Price, error) {
tickerNew, err := ticker.GetTicker(b.Name, p, a)
if err != nil {
return b.UpdateTicker(p, assetType)
return b.UpdateTicker(p, a)
}
return tickerNew, nil
}