mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-05 23:16:53 +00:00
exchanges: Initial context propagation (#744)
* gct: phase one context awareness pass * exchanges: context propagation pass * common/requester: force context requirement * gctcli/exchanges: linter fix * rpcserver: fix test using dummy rpc server * backtester: fix comments * grpc: add correct cancel and timeout for commands * rpcserver_test: add comment on dummy server * common: deprecated SendHTTPGetRequest * linter: fix * linter: turn on no context check * apichecker: fix context linter issue * binance: use param context * common: remove checks as this gets executed before main * common: change mutex to RW as clients can be used by multiple go routines. * common: remove init and JIT default client. Unexport global variables and add protection. * common: Add comments * bithumb: after dinner mints fix
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package binance
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
@@ -41,7 +42,7 @@ func (b *Binance) GetDefaultConfig() (*config.ExchangeConfig, error) {
|
||||
}
|
||||
|
||||
if b.Features.Supports.RESTCapabilities.AutoPairUpdates {
|
||||
err = b.UpdateTradablePairs(true)
|
||||
err = b.UpdateTradablePairs(context.TODO(), true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -317,7 +318,7 @@ func (b *Binance) Run() {
|
||||
|
||||
a := b.GetAssetTypes(true)
|
||||
for x := range a {
|
||||
err = b.UpdateOrderExecutionLimits(a[x])
|
||||
err = b.UpdateOrderExecutionLimits(context.TODO(), a[x])
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys,
|
||||
"%s failed to set exchange order execution limits. Err: %v",
|
||||
@@ -329,7 +330,7 @@ func (b *Binance) Run() {
|
||||
if !b.GetEnabledFeatures().AutoPairUpdates && !forceUpdate {
|
||||
return
|
||||
}
|
||||
err = b.UpdateTradablePairs(forceUpdate)
|
||||
err = b.UpdateTradablePairs(context.TODO(), forceUpdate)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys,
|
||||
"%s failed to update tradable pairs. Err: %s",
|
||||
@@ -339,7 +340,7 @@ func (b *Binance) Run() {
|
||||
}
|
||||
|
||||
// FetchTradablePairs returns a list of the exchanges tradable pairs
|
||||
func (b *Binance) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
func (b *Binance) FetchTradablePairs(ctx context.Context, a asset.Item) ([]string, error) {
|
||||
if !b.SupportsAsset(a) {
|
||||
return nil, fmt.Errorf("asset type of %s is not supported by %s", a, b.Name)
|
||||
}
|
||||
@@ -350,7 +351,7 @@ func (b *Binance) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
var pairs []string
|
||||
switch a {
|
||||
case asset.Spot, asset.Margin:
|
||||
info, err := b.GetExchangeInfo()
|
||||
info, err := b.GetExchangeInfo(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -368,7 +369,7 @@ func (b *Binance) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
}
|
||||
}
|
||||
case asset.CoinMarginedFutures:
|
||||
cInfo, err := b.FuturesExchangeInfo()
|
||||
cInfo, err := b.FuturesExchangeInfo(ctx)
|
||||
if err != nil {
|
||||
return pairs, nil
|
||||
}
|
||||
@@ -382,7 +383,7 @@ func (b *Binance) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
}
|
||||
}
|
||||
case asset.USDTMarginedFutures:
|
||||
uInfo, err := b.UExchangeInfo()
|
||||
uInfo, err := b.UExchangeInfo(ctx)
|
||||
if err != nil {
|
||||
return pairs, nil
|
||||
}
|
||||
@@ -401,10 +402,10 @@ func (b *Binance) FetchTradablePairs(a asset.Item) ([]string, error) {
|
||||
|
||||
// UpdateTradablePairs updates the exchanges available pairs and stores
|
||||
// them in the exchanges config
|
||||
func (b *Binance) UpdateTradablePairs(forceUpdate bool) error {
|
||||
func (b *Binance) UpdateTradablePairs(ctx context.Context, forceUpdate bool) error {
|
||||
assetTypes := b.GetAssetTypes(false)
|
||||
for i := range assetTypes {
|
||||
p, err := b.FetchTradablePairs(assetTypes[i])
|
||||
p, err := b.FetchTradablePairs(ctx, assetTypes[i])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -423,10 +424,10 @@ func (b *Binance) UpdateTradablePairs(forceUpdate bool) error {
|
||||
}
|
||||
|
||||
// UpdateTickers updates the ticker for all currency pairs of a given asset type
|
||||
func (b *Binance) UpdateTickers(a asset.Item) error {
|
||||
func (b *Binance) UpdateTickers(ctx context.Context, a asset.Item) error {
|
||||
switch a {
|
||||
case asset.Spot, asset.Margin:
|
||||
tick, err := b.GetTickers()
|
||||
tick, err := b.GetTickers(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -454,7 +455,7 @@ func (b *Binance) UpdateTickers(a asset.Item) error {
|
||||
}
|
||||
}
|
||||
case asset.USDTMarginedFutures:
|
||||
tick, err := b.U24HTickerPriceChangeStats(currency.Pair{})
|
||||
tick, err := b.U24HTickerPriceChangeStats(ctx, currency.Pair{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -481,7 +482,7 @@ func (b *Binance) UpdateTickers(a asset.Item) error {
|
||||
}
|
||||
}
|
||||
case asset.CoinMarginedFutures:
|
||||
tick, err := b.GetFuturesSwapTickerChangeStats(currency.Pair{}, "")
|
||||
tick, err := b.GetFuturesSwapTickerChangeStats(ctx, currency.Pair{}, "")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -514,10 +515,10 @@ func (b *Binance) UpdateTickers(a asset.Item) error {
|
||||
}
|
||||
|
||||
// UpdateTicker updates and returns the ticker for a currency pair
|
||||
func (b *Binance) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
func (b *Binance) UpdateTicker(ctx context.Context, p currency.Pair, a asset.Item) (*ticker.Price, error) {
|
||||
switch a {
|
||||
case asset.Spot, asset.Margin:
|
||||
tick, err := b.GetPriceChangeStats(p)
|
||||
tick, err := b.GetPriceChangeStats(ctx, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -543,7 +544,7 @@ func (b *Binance) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, er
|
||||
return nil, err
|
||||
}
|
||||
case asset.USDTMarginedFutures:
|
||||
tick, err := b.U24HTickerPriceChangeStats(p)
|
||||
tick, err := b.U24HTickerPriceChangeStats(ctx, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -567,7 +568,7 @@ func (b *Binance) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, er
|
||||
return nil, err
|
||||
}
|
||||
case asset.CoinMarginedFutures:
|
||||
tick, err := b.GetFuturesSwapTickerChangeStats(p, "")
|
||||
tick, err := b.GetFuturesSwapTickerChangeStats(ctx, p, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -598,7 +599,7 @@ func (b *Binance) UpdateTicker(p currency.Pair, a asset.Item) (*ticker.Price, er
|
||||
}
|
||||
|
||||
// FetchTicker returns the ticker for a currency pair
|
||||
func (b *Binance) FetchTicker(p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
|
||||
func (b *Binance) FetchTicker(ctx context.Context, p currency.Pair, assetType asset.Item) (*ticker.Price, error) {
|
||||
fPair, err := b.FormatExchangeCurrency(p, assetType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -606,22 +607,22 @@ func (b *Binance) FetchTicker(p currency.Pair, assetType asset.Item) (*ticker.Pr
|
||||
|
||||
tickerNew, err := ticker.GetTicker(b.Name, fPair, assetType)
|
||||
if err != nil {
|
||||
return b.UpdateTicker(p, assetType)
|
||||
return b.UpdateTicker(ctx, p, assetType)
|
||||
}
|
||||
return tickerNew, nil
|
||||
}
|
||||
|
||||
// FetchOrderbook returns orderbook base on the currency pair
|
||||
func (b *Binance) FetchOrderbook(p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
func (b *Binance) FetchOrderbook(ctx context.Context, p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
ob, err := orderbook.Get(b.Name, p, assetType)
|
||||
if err != nil {
|
||||
return b.UpdateOrderbook(p, assetType)
|
||||
return b.UpdateOrderbook(ctx, p, assetType)
|
||||
}
|
||||
return ob, nil
|
||||
}
|
||||
|
||||
// UpdateOrderbook updates and returns the orderbook for a currency pair
|
||||
func (b *Binance) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
func (b *Binance) UpdateOrderbook(ctx context.Context, p currency.Pair, assetType asset.Item) (*orderbook.Base, error) {
|
||||
book := &orderbook.Base{
|
||||
Exchange: b.Name,
|
||||
Pair: p,
|
||||
@@ -632,13 +633,14 @@ func (b *Binance) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*order
|
||||
var err error
|
||||
switch assetType {
|
||||
case asset.Spot, asset.Margin:
|
||||
orderbookNew, err = b.GetOrderBook(OrderBookDataRequestParams{
|
||||
Symbol: p,
|
||||
Limit: 1000})
|
||||
orderbookNew, err = b.GetOrderBook(ctx,
|
||||
OrderBookDataRequestParams{
|
||||
Symbol: p,
|
||||
Limit: 1000})
|
||||
case asset.USDTMarginedFutures:
|
||||
orderbookNew, err = b.UFuturesOrderbook(p, 1000)
|
||||
orderbookNew, err = b.UFuturesOrderbook(ctx, p, 1000)
|
||||
case asset.CoinMarginedFutures:
|
||||
orderbookNew, err = b.GetFuturesOrderbook(p, 1000)
|
||||
orderbookNew, err = b.GetFuturesOrderbook(ctx, p, 1000)
|
||||
}
|
||||
if err != nil {
|
||||
return book, err
|
||||
@@ -665,13 +667,13 @@ func (b *Binance) UpdateOrderbook(p currency.Pair, assetType asset.Item) (*order
|
||||
|
||||
// UpdateAccountInfo retrieves balances for all enabled currencies for the
|
||||
// Binance exchange
|
||||
func (b *Binance) UpdateAccountInfo(assetType asset.Item) (account.Holdings, error) {
|
||||
func (b *Binance) UpdateAccountInfo(ctx context.Context, assetType asset.Item) (account.Holdings, error) {
|
||||
var info account.Holdings
|
||||
var acc account.SubAccount
|
||||
info.Exchange = b.Name
|
||||
switch assetType {
|
||||
case asset.Spot:
|
||||
raw, err := b.GetAccount()
|
||||
raw, err := b.GetAccount(ctx)
|
||||
if err != nil {
|
||||
return info, err
|
||||
}
|
||||
@@ -698,7 +700,7 @@ func (b *Binance) UpdateAccountInfo(assetType asset.Item) (account.Holdings, err
|
||||
acc.Currencies = currencyBalance
|
||||
|
||||
case asset.CoinMarginedFutures:
|
||||
accData, err := b.GetFuturesAccountInfo()
|
||||
accData, err := b.GetFuturesAccountInfo(ctx)
|
||||
if err != nil {
|
||||
return info, err
|
||||
}
|
||||
@@ -714,7 +716,7 @@ func (b *Binance) UpdateAccountInfo(assetType asset.Item) (account.Holdings, err
|
||||
acc.Currencies = currencyDetails
|
||||
|
||||
case asset.USDTMarginedFutures:
|
||||
accData, err := b.UAccountBalanceV2()
|
||||
accData, err := b.UAccountBalanceV2(ctx)
|
||||
if err != nil {
|
||||
return info, err
|
||||
}
|
||||
@@ -729,7 +731,7 @@ func (b *Binance) UpdateAccountInfo(assetType asset.Item) (account.Holdings, err
|
||||
|
||||
acc.Currencies = currencyDetails
|
||||
case asset.Margin:
|
||||
accData, err := b.GetMarginAccount()
|
||||
accData, err := b.GetMarginAccount(ctx)
|
||||
if err != nil {
|
||||
return info, err
|
||||
}
|
||||
@@ -757,10 +759,10 @@ func (b *Binance) UpdateAccountInfo(assetType asset.Item) (account.Holdings, err
|
||||
}
|
||||
|
||||
// FetchAccountInfo retrieves balances for all enabled currencies
|
||||
func (b *Binance) FetchAccountInfo(assetType asset.Item) (account.Holdings, error) {
|
||||
func (b *Binance) FetchAccountInfo(ctx context.Context, assetType asset.Item) (account.Holdings, error) {
|
||||
acc, err := account.GetHoldings(b.Name, assetType)
|
||||
if err != nil {
|
||||
return b.UpdateAccountInfo(assetType)
|
||||
return b.UpdateAccountInfo(ctx, assetType)
|
||||
}
|
||||
|
||||
return acc, nil
|
||||
@@ -768,13 +770,13 @@ func (b *Binance) FetchAccountInfo(assetType asset.Item) (account.Holdings, erro
|
||||
|
||||
// GetFundingHistory returns funding history, deposits and
|
||||
// withdrawals
|
||||
func (b *Binance) GetFundingHistory() ([]exchange.FundHistory, error) {
|
||||
func (b *Binance) GetFundingHistory(ctx context.Context) ([]exchange.FundHistory, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// GetWithdrawalsHistory returns previous withdrawals data
|
||||
func (b *Binance) GetWithdrawalsHistory(c currency.Code) (resp []exchange.WithdrawalHistory, err error) {
|
||||
w, err := b.WithdrawStatus(c, "", 0, 0)
|
||||
func (b *Binance) GetWithdrawalsHistory(ctx context.Context, c currency.Code) (resp []exchange.WithdrawalHistory, err error) {
|
||||
w, err := b.WithdrawStatus(ctx, c, "", 0, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -796,10 +798,11 @@ func (b *Binance) GetWithdrawalsHistory(c currency.Code) (resp []exchange.Withdr
|
||||
}
|
||||
|
||||
// GetRecentTrades returns the most recent trades for a currency and asset
|
||||
func (b *Binance) GetRecentTrades(p currency.Pair, assetType asset.Item) ([]trade.Data, error) {
|
||||
func (b *Binance) GetRecentTrades(ctx context.Context, p currency.Pair, assetType asset.Item) ([]trade.Data, error) {
|
||||
var resp []trade.Data
|
||||
limit := 1000
|
||||
tradeData, err := b.GetMostRecentTrades(RecentTradeRequestParams{p, limit})
|
||||
tradeData, err := b.GetMostRecentTrades(ctx,
|
||||
RecentTradeRequestParams{p, limit})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -826,13 +829,13 @@ func (b *Binance) GetRecentTrades(p currency.Pair, assetType asset.Item) ([]trad
|
||||
}
|
||||
|
||||
// GetHistoricTrades returns historic trade data within the timeframe provided
|
||||
func (b *Binance) GetHistoricTrades(p currency.Pair, a asset.Item, from, to time.Time) ([]trade.Data, error) {
|
||||
func (b *Binance) GetHistoricTrades(ctx context.Context, p currency.Pair, a asset.Item, from, to time.Time) ([]trade.Data, error) {
|
||||
req := AggregatedTradeRequestParams{
|
||||
Symbol: p,
|
||||
StartTime: from,
|
||||
EndTime: to,
|
||||
}
|
||||
trades, err := b.GetAggregatedTrades(&req)
|
||||
trades, err := b.GetAggregatedTrades(ctx, &req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -859,7 +862,7 @@ func (a *AggregatedTrade) toTradeData(p currency.Pair, exchange string, aType as
|
||||
}
|
||||
|
||||
// SubmitOrder submits a new order
|
||||
func (b *Binance) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
func (b *Binance) SubmitOrder(ctx context.Context, s *order.Submit) (order.SubmitResponse, error) {
|
||||
var submitOrderResponse order.SubmitResponse
|
||||
if err := s.Validate(); err != nil {
|
||||
return submitOrderResponse, err
|
||||
@@ -895,7 +898,7 @@ func (b *Binance) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
TimeInForce: timeInForce,
|
||||
NewClientOrderID: s.ClientOrderID,
|
||||
}
|
||||
response, err := b.NewOrder(&orderRequest)
|
||||
response, err := b.NewOrder(ctx, &orderRequest)
|
||||
if err != nil {
|
||||
return submitOrderResponse, err
|
||||
}
|
||||
@@ -947,7 +950,8 @@ func (b *Binance) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
default:
|
||||
return submitOrderResponse, errors.New("invalid type, check api docs for updates")
|
||||
}
|
||||
o, err := b.FuturesNewOrder(s.Pair, reqSide,
|
||||
o, err := b.FuturesNewOrder(ctx,
|
||||
s.Pair, reqSide,
|
||||
"", oType, "GTC", "",
|
||||
s.ClientOrderID, "", "",
|
||||
s.Amount, s.Price, 0, 0, 0, s.ReduceOnly)
|
||||
@@ -985,7 +989,8 @@ func (b *Binance) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
default:
|
||||
return submitOrderResponse, errors.New("invalid type, check api docs for updates")
|
||||
}
|
||||
order, err := b.UFuturesNewOrder(s.Pair, reqSide,
|
||||
order, err := b.UFuturesNewOrder(ctx,
|
||||
s.Pair, reqSide,
|
||||
"", oType, "GTC", "",
|
||||
s.ClientOrderID, "", "",
|
||||
s.Amount, s.Price, 0, 0, 0, s.ReduceOnly)
|
||||
@@ -1003,12 +1008,12 @@ func (b *Binance) SubmitOrder(s *order.Submit) (order.SubmitResponse, error) {
|
||||
|
||||
// ModifyOrder will allow of changing orderbook placement and limit to
|
||||
// market conversion
|
||||
func (b *Binance) ModifyOrder(action *order.Modify) (order.Modify, error) {
|
||||
func (b *Binance) ModifyOrder(ctx context.Context, action *order.Modify) (order.Modify, error) {
|
||||
return order.Modify{}, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// CancelOrder cancels an order by its corresponding ID number
|
||||
func (b *Binance) CancelOrder(o *order.Cancel) error {
|
||||
func (b *Binance) CancelOrder(ctx context.Context, o *order.Cancel) error {
|
||||
if err := o.Validate(o.StandardCancel()); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1018,19 +1023,20 @@ func (b *Binance) CancelOrder(o *order.Cancel) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = b.CancelExistingOrder(o.Pair,
|
||||
_, err = b.CancelExistingOrder(ctx,
|
||||
o.Pair,
|
||||
orderIDInt,
|
||||
o.AccountID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case asset.CoinMarginedFutures:
|
||||
_, err := b.FuturesCancelOrder(o.Pair, o.ID, "")
|
||||
_, err := b.FuturesCancelOrder(ctx, o.Pair, o.ID, "")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case asset.USDTMarginedFutures:
|
||||
_, err := b.UCancelOrder(o.Pair, o.ID, "")
|
||||
_, err := b.UCancelOrder(ctx, o.Pair, o.ID, "")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1039,12 +1045,12 @@ func (b *Binance) CancelOrder(o *order.Cancel) error {
|
||||
}
|
||||
|
||||
// CancelBatchOrders cancels an orders by their corresponding ID numbers
|
||||
func (b *Binance) CancelBatchOrders(o []order.Cancel) (order.CancelBatchResponse, error) {
|
||||
func (b *Binance) CancelBatchOrders(ctx context.Context, o []order.Cancel) (order.CancelBatchResponse, error) {
|
||||
return order.CancelBatchResponse{}, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// CancelAllOrders cancels all orders associated with a currency pair
|
||||
func (b *Binance) CancelAllOrders(req *order.Cancel) (order.CancelAllResponse, error) {
|
||||
func (b *Binance) CancelAllOrders(ctx context.Context, req *order.Cancel) (order.CancelAllResponse, error) {
|
||||
if err := req.Validate(); err != nil {
|
||||
return order.CancelAllResponse{}, err
|
||||
}
|
||||
@@ -1052,12 +1058,13 @@ func (b *Binance) CancelAllOrders(req *order.Cancel) (order.CancelAllResponse, e
|
||||
cancelAllOrdersResponse.Status = make(map[string]string)
|
||||
switch req.AssetType {
|
||||
case asset.Spot, asset.Margin:
|
||||
openOrders, err := b.OpenOrders(req.Pair)
|
||||
openOrders, err := b.OpenOrders(ctx, req.Pair)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
for i := range openOrders {
|
||||
_, err = b.CancelExistingOrder(req.Pair,
|
||||
_, err = b.CancelExistingOrder(ctx,
|
||||
req.Pair,
|
||||
openOrders[i].OrderID,
|
||||
"")
|
||||
if err != nil {
|
||||
@@ -1071,13 +1078,13 @@ func (b *Binance) CancelAllOrders(req *order.Cancel) (order.CancelAllResponse, e
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
for i := range enabledPairs {
|
||||
_, err = b.FuturesCancelAllOpenOrders(enabledPairs[i])
|
||||
_, err = b.FuturesCancelAllOpenOrders(ctx, enabledPairs[i])
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
_, err := b.FuturesCancelAllOpenOrders(req.Pair)
|
||||
_, err := b.FuturesCancelAllOpenOrders(ctx, req.Pair)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
@@ -1089,13 +1096,13 @@ func (b *Binance) CancelAllOrders(req *order.Cancel) (order.CancelAllResponse, e
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
for i := range enabledPairs {
|
||||
_, err = b.UCancelAllOpenOrders(enabledPairs[i])
|
||||
_, err = b.UCancelAllOpenOrders(ctx, enabledPairs[i])
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
_, err := b.UCancelAllOpenOrders(req.Pair)
|
||||
_, err := b.UCancelAllOpenOrders(ctx, req.Pair)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
}
|
||||
@@ -1107,7 +1114,7 @@ func (b *Binance) CancelAllOrders(req *order.Cancel) (order.CancelAllResponse, e
|
||||
}
|
||||
|
||||
// GetOrderInfo returns information on a current open order
|
||||
func (b *Binance) GetOrderInfo(orderID string, pair currency.Pair, assetType asset.Item) (order.Detail, error) {
|
||||
func (b *Binance) GetOrderInfo(ctx context.Context, orderID string, pair currency.Pair, assetType asset.Item) (order.Detail, error) {
|
||||
var respData order.Detail
|
||||
orderIDInt, err := strconv.ParseInt(orderID, 10, 64)
|
||||
if err != nil {
|
||||
@@ -1115,7 +1122,7 @@ func (b *Binance) GetOrderInfo(orderID string, pair currency.Pair, assetType ass
|
||||
}
|
||||
switch assetType {
|
||||
case asset.Spot:
|
||||
resp, err := b.QueryOrder(pair, "", orderIDInt)
|
||||
resp, err := b.QueryOrder(ctx, pair, "", orderIDInt)
|
||||
if err != nil {
|
||||
return respData, err
|
||||
}
|
||||
@@ -1146,7 +1153,7 @@ func (b *Binance) GetOrderInfo(orderID string, pair currency.Pair, assetType ass
|
||||
LastUpdated: resp.UpdateTime,
|
||||
}, nil
|
||||
case asset.CoinMarginedFutures:
|
||||
orderData, err := b.FuturesOpenOrderData(pair, orderID, "")
|
||||
orderData, err := b.FuturesOpenOrderData(ctx, pair, orderID, "")
|
||||
if err != nil {
|
||||
return respData, err
|
||||
}
|
||||
@@ -1154,7 +1161,7 @@ func (b *Binance) GetOrderInfo(orderID string, pair currency.Pair, assetType ass
|
||||
feeBuilder.Amount = orderData.ExecutedQuantity
|
||||
feeBuilder.PurchasePrice = orderData.AveragePrice
|
||||
feeBuilder.Pair = pair
|
||||
fee, err := b.GetFee(&feeBuilder)
|
||||
fee, err := b.GetFee(ctx, &feeBuilder)
|
||||
if err != nil {
|
||||
return respData, err
|
||||
}
|
||||
@@ -1175,7 +1182,7 @@ func (b *Binance) GetOrderInfo(orderID string, pair currency.Pair, assetType ass
|
||||
respData.Date = orderData.Time
|
||||
respData.LastUpdated = orderData.UpdateTime
|
||||
case asset.USDTMarginedFutures:
|
||||
orderData, err := b.UGetOrderData(pair, orderID, "")
|
||||
orderData, err := b.UGetOrderData(ctx, pair, orderID, "")
|
||||
if err != nil {
|
||||
return respData, err
|
||||
}
|
||||
@@ -1183,7 +1190,7 @@ func (b *Binance) GetOrderInfo(orderID string, pair currency.Pair, assetType ass
|
||||
feeBuilder.Amount = orderData.ExecutedQuantity
|
||||
feeBuilder.PurchasePrice = orderData.AveragePrice
|
||||
feeBuilder.Pair = pair
|
||||
fee, err := b.GetFee(&feeBuilder)
|
||||
fee, err := b.GetFee(ctx, &feeBuilder)
|
||||
if err != nil {
|
||||
return respData, err
|
||||
}
|
||||
@@ -1210,18 +1217,19 @@ func (b *Binance) GetOrderInfo(orderID string, pair currency.Pair, assetType ass
|
||||
}
|
||||
|
||||
// GetDepositAddress returns a deposit address for a specified currency
|
||||
func (b *Binance) GetDepositAddress(cryptocurrency currency.Code, _ string) (string, error) {
|
||||
return b.GetDepositAddressForCurrency(cryptocurrency.String())
|
||||
func (b *Binance) GetDepositAddress(ctx context.Context, cryptocurrency currency.Code, _ string) (string, error) {
|
||||
return b.GetDepositAddressForCurrency(ctx, cryptocurrency.String())
|
||||
}
|
||||
|
||||
// WithdrawCryptocurrencyFunds returns a withdrawal ID when a withdrawal is
|
||||
// submitted
|
||||
func (b *Binance) WithdrawCryptocurrencyFunds(withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *Binance) WithdrawCryptocurrencyFunds(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
if err := withdrawRequest.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
amountStr := strconv.FormatFloat(withdrawRequest.Amount, 'f', -1, 64)
|
||||
v, err := b.WithdrawCrypto(withdrawRequest.Currency.String(),
|
||||
v, err := b.WithdrawCrypto(ctx,
|
||||
withdrawRequest.Currency.String(),
|
||||
withdrawRequest.Crypto.Address,
|
||||
withdrawRequest.Crypto.AddressTag,
|
||||
withdrawRequest.Description, amountStr)
|
||||
@@ -1235,27 +1243,27 @@ func (b *Binance) WithdrawCryptocurrencyFunds(withdrawRequest *withdraw.Request)
|
||||
|
||||
// WithdrawFiatFunds returns a withdrawal ID when a
|
||||
// withdrawal is submitted
|
||||
func (b *Binance) WithdrawFiatFunds(_ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *Binance) WithdrawFiatFunds(_ context.Context, _ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// WithdrawFiatFundsToInternationalBank returns a withdrawal ID when a
|
||||
// withdrawal is submitted
|
||||
func (b *Binance) WithdrawFiatFundsToInternationalBank(_ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
func (b *Binance) WithdrawFiatFundsToInternationalBank(_ context.Context, _ *withdraw.Request) (*withdraw.ExchangeResponse, error) {
|
||||
return nil, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// GetFeeByType returns an estimate of fee based on type of transaction
|
||||
func (b *Binance) GetFeeByType(feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
func (b *Binance) GetFeeByType(ctx context.Context, feeBuilder *exchange.FeeBuilder) (float64, error) {
|
||||
if (!b.AllowAuthenticatedRequest() || b.SkipAuthCheck) && // Todo check connection status
|
||||
feeBuilder.FeeType == exchange.CryptocurrencyTradeFee {
|
||||
feeBuilder.FeeType = exchange.OfflineTradeFee
|
||||
}
|
||||
return b.GetFee(feeBuilder)
|
||||
return b.GetFee(ctx, feeBuilder)
|
||||
}
|
||||
|
||||
// GetActiveOrders retrieves any orders that are active/open
|
||||
func (b *Binance) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
func (b *Binance) GetActiveOrders(ctx context.Context, req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
if err := req.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1267,7 +1275,7 @@ func (b *Binance) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
for i := range req.Pairs {
|
||||
switch req.AssetType {
|
||||
case asset.Spot, asset.Margin:
|
||||
resp, err := b.OpenOrders(req.Pairs[i])
|
||||
resp, err := b.OpenOrders(ctx, req.Pairs[i])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1290,7 +1298,7 @@ func (b *Binance) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
})
|
||||
}
|
||||
case asset.CoinMarginedFutures:
|
||||
openOrders, err := b.GetFuturesAllOpenOrders(req.Pairs[i], "")
|
||||
openOrders, err := b.GetFuturesAllOpenOrders(ctx, req.Pairs[i], "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1299,7 +1307,7 @@ func (b *Binance) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
feeBuilder.Amount = openOrders[y].ExecutedQty
|
||||
feeBuilder.PurchasePrice = openOrders[y].AvgPrice
|
||||
feeBuilder.Pair = req.Pairs[i]
|
||||
fee, err := b.GetFee(&feeBuilder)
|
||||
fee, err := b.GetFee(ctx, &feeBuilder)
|
||||
if err != nil {
|
||||
return orders, err
|
||||
}
|
||||
@@ -1323,7 +1331,7 @@ func (b *Binance) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
})
|
||||
}
|
||||
case asset.USDTMarginedFutures:
|
||||
openOrders, err := b.UAllAccountOpenOrders(req.Pairs[i])
|
||||
openOrders, err := b.UAllAccountOpenOrders(ctx, req.Pairs[i])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1332,7 +1340,7 @@ func (b *Binance) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
feeBuilder.Amount = openOrders[y].ExecutedQuantity
|
||||
feeBuilder.PurchasePrice = openOrders[y].AveragePrice
|
||||
feeBuilder.Pair = req.Pairs[i]
|
||||
fee, err := b.GetFee(&feeBuilder)
|
||||
fee, err := b.GetFee(ctx, &feeBuilder)
|
||||
if err != nil {
|
||||
return orders, err
|
||||
}
|
||||
@@ -1368,7 +1376,7 @@ func (b *Binance) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
|
||||
// GetOrderHistory retrieves account order information
|
||||
// Can Limit response to specific order status
|
||||
func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
func (b *Binance) GetOrderHistory(ctx context.Context, req *order.GetOrdersRequest) ([]order.Detail, error) {
|
||||
if err := req.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1379,7 +1387,8 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
switch req.AssetType {
|
||||
case asset.Spot, asset.Margin:
|
||||
for x := range req.Pairs {
|
||||
resp, err := b.AllOrders(req.Pairs[x],
|
||||
resp, err := b.AllOrders(ctx,
|
||||
req.Pairs[x],
|
||||
"",
|
||||
"1000")
|
||||
if err != nil {
|
||||
@@ -1423,7 +1432,8 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
if time.Since(req.StartTime) > time.Hour*24*30 {
|
||||
return nil, fmt.Errorf("can only fetch orders 30 days out")
|
||||
}
|
||||
orderHistory, err = b.GetAllFuturesOrders(req.Pairs[i], "", req.StartTime, req.EndTime, 0, 0)
|
||||
orderHistory, err = b.GetAllFuturesOrders(ctx,
|
||||
req.Pairs[i], "", req.StartTime, req.EndTime, 0, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1432,7 +1442,8 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
orderHistory, err = b.GetAllFuturesOrders(req.Pairs[i], "", time.Time{}, time.Time{}, fromID, 0)
|
||||
orderHistory, err = b.GetAllFuturesOrders(ctx,
|
||||
req.Pairs[i], "", time.Time{}, time.Time{}, fromID, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1444,7 +1455,7 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
feeBuilder.Amount = orderHistory[y].ExecutedQty
|
||||
feeBuilder.PurchasePrice = orderHistory[y].AvgPrice
|
||||
feeBuilder.Pair = req.Pairs[i]
|
||||
fee, err := b.GetFee(&feeBuilder)
|
||||
fee, err := b.GetFee(ctx, &feeBuilder)
|
||||
if err != nil {
|
||||
return orders, err
|
||||
}
|
||||
@@ -1479,7 +1490,8 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
if time.Since(req.StartTime) > time.Hour*24*7 {
|
||||
return nil, fmt.Errorf("can only fetch orders 7 days out")
|
||||
}
|
||||
orderHistory, err = b.UAllAccountOrders(req.Pairs[i], 0, 0, req.StartTime, req.EndTime)
|
||||
orderHistory, err = b.UAllAccountOrders(ctx,
|
||||
req.Pairs[i], 0, 0, req.StartTime, req.EndTime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1488,7 +1500,8 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
orderHistory, err = b.UAllAccountOrders(req.Pairs[i], fromID, 0, time.Time{}, time.Time{})
|
||||
orderHistory, err = b.UAllAccountOrders(ctx,
|
||||
req.Pairs[i], fromID, 0, time.Time{}, time.Time{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1500,7 +1513,7 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
feeBuilder.Amount = orderHistory[y].ExecutedQty
|
||||
feeBuilder.PurchasePrice = orderHistory[y].AvgPrice
|
||||
feeBuilder.Pair = req.Pairs[i]
|
||||
fee, err := b.GetFee(&feeBuilder)
|
||||
fee, err := b.GetFee(ctx, &feeBuilder)
|
||||
if err != nil {
|
||||
return orders, err
|
||||
}
|
||||
@@ -1534,8 +1547,8 @@ func (b *Binance) GetOrderHistory(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
|
||||
// ValidateCredentials validates current credentials used for wrapper
|
||||
// functionality
|
||||
func (b *Binance) ValidateCredentials(assetType asset.Item) error {
|
||||
_, err := b.UpdateAccountInfo(assetType)
|
||||
func (b *Binance) ValidateCredentials(ctx context.Context, assetType asset.Item) error {
|
||||
_, err := b.UpdateAccountInfo(ctx, assetType)
|
||||
return b.CheckTransientError(err)
|
||||
}
|
||||
|
||||
@@ -1556,7 +1569,7 @@ func (b *Binance) FormatExchangeKlineInterval(interval kline.Interval) string {
|
||||
}
|
||||
|
||||
// GetHistoricCandles returns candles between a time period for a set time interval
|
||||
func (b *Binance) GetHistoricCandles(pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
func (b *Binance) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
if err := b.ValidateKline(pair, a, interval); err != nil {
|
||||
return kline.Item{}, err
|
||||
}
|
||||
@@ -1577,7 +1590,7 @@ func (b *Binance) GetHistoricCandles(pair currency.Pair, a asset.Item, start, en
|
||||
Interval: interval,
|
||||
}
|
||||
|
||||
candles, err := b.GetSpotKline(&req)
|
||||
candles, err := b.GetSpotKline(ctx, &req)
|
||||
if err != nil {
|
||||
return kline.Item{}, err
|
||||
}
|
||||
@@ -1596,7 +1609,7 @@ func (b *Binance) GetHistoricCandles(pair currency.Pair, a asset.Item, start, en
|
||||
}
|
||||
|
||||
// GetHistoricCandlesExtended returns candles between a time period for a set time interval
|
||||
func (b *Binance) GetHistoricCandlesExtended(pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
func (b *Binance) GetHistoricCandlesExtended(ctx context.Context, pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
if err := b.ValidateKline(pair, a, interval); err != nil {
|
||||
return kline.Item{}, err
|
||||
}
|
||||
@@ -1621,7 +1634,7 @@ func (b *Binance) GetHistoricCandlesExtended(pair currency.Pair, a asset.Item, s
|
||||
Limit: int(b.Features.Enabled.Kline.ResultLimit),
|
||||
}
|
||||
|
||||
candles, err = b.GetSpotKline(&req)
|
||||
candles, err = b.GetSpotKline(ctx, &req)
|
||||
if err != nil {
|
||||
return kline.Item{}, err
|
||||
}
|
||||
@@ -1698,19 +1711,19 @@ func compatibleOrderVars(side, status, orderType string) OrderVars {
|
||||
}
|
||||
|
||||
// UpdateOrderExecutionLimits sets exchange executions for a required asset type
|
||||
func (b *Binance) UpdateOrderExecutionLimits(a asset.Item) error {
|
||||
func (b *Binance) UpdateOrderExecutionLimits(ctx context.Context, a asset.Item) error {
|
||||
var limits []order.MinMaxLevel
|
||||
var err error
|
||||
switch a {
|
||||
case asset.Spot:
|
||||
limits, err = b.FetchSpotExchangeLimits()
|
||||
limits, err = b.FetchSpotExchangeLimits(ctx)
|
||||
case asset.USDTMarginedFutures:
|
||||
limits, err = b.FetchUSDTMarginExchangeLimits()
|
||||
limits, err = b.FetchUSDTMarginExchangeLimits(ctx)
|
||||
case asset.CoinMarginedFutures:
|
||||
limits, err = b.FetchCoinMarginExchangeLimits()
|
||||
limits, err = b.FetchCoinMarginExchangeLimits(ctx)
|
||||
case asset.Margin:
|
||||
if err = b.CurrencyPairs.IsAssetEnabled(asset.Spot); err != nil {
|
||||
limits, err = b.FetchSpotExchangeLimits()
|
||||
limits, err = b.FetchSpotExchangeLimits(ctx)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user