mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-04 23:16:54 +00:00
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:
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user