(BTC Markets) Ticker batching support (#399)

* moved to getticekers endpoint

* add support for tickerbatching

* const and things

* moved openOrders to bool

* gofmt and clean up test logs

* revert canManipulateRealOrders to false
This commit is contained in:
Andrew
2019-12-18 10:56:02 +11:00
committed by Adrian Gallagher
parent 40122b3094
commit e37512e94f
3 changed files with 46 additions and 34 deletions

View File

@@ -29,7 +29,7 @@ const (
btcMarketsGetTrades = "/trades?"
btcMarketOrderBooks = "/orderbook?"
btcMarketsCandles = "/candles?"
btcMarketsTickers = "/tickers?"
btcMarketsTickers = "tickers?"
btcMarketsMultipleOrderbooks = "/orderbooks?"
btcMarketsGetTime = "/time"
btcMarketsWithdrawalFees = "/withdrawal-fees"
@@ -227,11 +227,11 @@ func (b *BTCMarkets) GetMarketCandles(marketID, timeWindow, from, to string, bef
}
// GetTickers gets multiple tickers
func (b *BTCMarkets) GetTickers(marketIDs []string) ([]Ticker, error) {
func (b *BTCMarkets) GetTickers(marketIDs []currency.Pair) ([]Ticker, error) {
var tickers []Ticker
params := url.Values{}
for x := range marketIDs {
params.Add("marketId", marketIDs[x])
params.Add("marketId", marketIDs[x].String())
}
return tickers, b.SendHTTPRequest(btcMarketsUnauthPath+btcMarketsTickers+params.Encode(),
&tickers)
@@ -375,7 +375,7 @@ func (b *BTCMarkets) NewOrder(marketID string, price, amount float64, orderType,
}
// GetOrders returns current order information on the exchange
func (b *BTCMarkets) GetOrders(marketID string, before, after, limit int64, status string) ([]OrderData, error) {
func (b *BTCMarkets) GetOrders(marketID string, before, after, limit int64, openOnly bool) ([]OrderData, error) {
if (before > 0) && (after >= 0) {
return nil, errors.New("BTCMarkets only supports either before or after, not both")
}
@@ -393,8 +393,8 @@ func (b *BTCMarkets) GetOrders(marketID string, before, after, limit int64, stat
if limit > 0 {
params.Set("limit", strconv.FormatInt(limit, 10))
}
if status != "" {
params.Set("status", status)
if openOnly {
params.Set("status", "open")
}
return resp, b.SendAuthenticatedRequest(http.MethodGet,
common.EncodeURLValues(btcMarketsOrders, params), nil, &resp)

View File

@@ -94,7 +94,7 @@ func TestGetMarketCandles(t *testing.T) {
func TestGetTickers(t *testing.T) {
t.Parallel()
temp := []string{BTCAUD, LTCAUD, ETHAUD}
temp := currency.NewPairsFromStrings([]string{LTCAUD, BTCAUD})
_, err := b.GetTickers(temp)
if err != nil {
t.Error(err)
@@ -194,11 +194,11 @@ func TestGetOrders(t *testing.T) {
if !areTestAPIKeysSet() {
t.Skip("API keys required but not set, skipping test")
}
_, err := b.GetOrders("", -1, -1, 2, "")
_, err := b.GetOrders("", -1, -1, 2, false)
if err != nil {
t.Error(err)
}
_, err = b.GetOrders(LTCAUD, -1, -1, -1, "open")
_, err = b.GetOrders(LTCAUD, -1, -1, -1, true)
if err != nil {
t.Error(err)
}
@@ -454,9 +454,10 @@ func TestGetOrderHistory(t *testing.T) {
if !areTestAPIKeysSet() {
t.Skip("API keys required but not set, skipping test")
}
var input order.GetOrdersRequest
input.OrderSide = order.Buy
_, err := b.GetOrderHistory(&input)
_, err := b.GetOrderHistory(&order.GetOrdersRequest{
OrderSide: order.Buy,
})
if err != nil {
t.Error(err)
}
@@ -479,3 +480,15 @@ func TestUpdateTicker(t *testing.T) {
t.Error(err)
}
}
func TestGetActiveOrders(t *testing.T) {
t.Parallel()
if !areTestAPIKeysSet() {
t.Skip("API keys required but not set, skipping test")
}
_, err := b.GetActiveOrders(&order.GetOrdersRequest{})
if err != nil {
t.Fatal(err)
}
}

View File

@@ -76,6 +76,7 @@ func (b *BTCMarkets) SetDefaults() {
REST: true,
Websocket: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
@@ -245,24 +246,24 @@ func (b *BTCMarkets) UpdateTradablePairs(forceUpdate bool) error {
// UpdateTicker updates and returns the ticker for a currency pair
func (b *BTCMarkets) UpdateTicker(p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
tickerPrice := new(ticker.Price)
allPairs := b.GetEnabledPairs(assetType)
for x := range allPairs {
tick, err := b.GetTicker(b.FormatExchangeCurrency(allPairs[x], assetType).String())
tickers, err := b.GetTickers(allPairs.Slice())
if err != nil {
return nil, err
}
for x := range tickers {
var resp ticker.Price
resp.Pair = currency.NewPairFromString(tickers[x].MarketID)
resp.Last = tickers[x].LastPrice
resp.High = tickers[x].High24h
resp.Low = tickers[x].Low24h
resp.Bid = tickers[x].BestBID
resp.Ask = tickers[x].BestAsk
resp.Volume = tickers[x].Volume
resp.LastUpdated = time.Now()
err = ticker.ProcessTicker(b.Name, &resp, assetType)
if err != nil {
return tickerPrice, err
}
tickerPrice.Pair = allPairs[x]
tickerPrice.Last = tick.LastPrice
tickerPrice.High = tick.High24h
tickerPrice.Low = tick.Low24h
tickerPrice.Bid = tick.BestBID
tickerPrice.Ask = tick.BestAsk
tickerPrice.Volume = tick.Volume
tickerPrice.LastUpdated = time.Now()
err = ticker.ProcessTicker(b.Name, tickerPrice, assetType)
if err != nil {
return tickerPrice, err
return nil, err
}
}
return ticker.GetTicker(b.Name, p, assetType)
@@ -396,7 +397,7 @@ func (b *BTCMarkets) CancelAllOrders(_ *order.Cancel) (order.CancelAllResponse,
var resp order.CancelAllResponse
tempMap := make(map[string]string)
var orderIDs []string
orders, err := b.GetOrders("", -1, -1, -1, "open")
orders, err := b.GetOrders("", -1, -1, -1, true)
if err != nil {
return resp, err
}
@@ -547,10 +548,8 @@ func (b *BTCMarkets) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detai
}
var resp []order.Detail
var err error
for x := range req.Currencies {
var tempData []OrderData
tempData, err = b.GetOrders(b.FormatExchangeCurrency(req.Currencies[x], asset.Spot).String(), -1, -1, -1, "open")
tempData, err := b.GetOrders(b.FormatExchangeCurrency(req.Currencies[x], asset.Spot).String(), -1, -1, -1, true)
if err != nil {
return resp, err
}
@@ -612,7 +611,7 @@ func (b *BTCMarkets) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detai
var tempResp order.Detail
var tempArray []string
if len(req.Currencies) == 0 {
orders, err := b.GetOrders("", -1, -1, -1, "")
orders, err := b.GetOrders("", -1, -1, -1, false)
if err != nil {
return resp, err
}
@@ -621,7 +620,7 @@ func (b *BTCMarkets) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detai
}
}
for y := range req.Currencies {
orders, err := b.GetOrders(b.FormatExchangeCurrency(req.Currencies[y], asset.Spot).String(), -1, -1, -1, "")
orders, err := b.GetOrders(b.FormatExchangeCurrency(req.Currencies[y], asset.Spot).String(), -1, -1, -1, false)
if err != nil {
return resp, err
}