mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-01 23:16:51 +00:00
exchanges/order, GateIO: Update USDT margined futures pathway for cancel all orders (#2021)
* order/gateio: update USDT margined futures pathway for cancel all orders and drop count field * gateio: add and expand tests for CancelAllOrders and getExchangeSide * Add test for load * linter: fix * Update exchanges/kraken/kraken_wrapper.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits * Update exchanges/order/orders.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * gk: nits * glorious: nits * reverted change for options * Update exchanges/gateio/gateio_wrapper_test.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/gateio/gateio_wrapper.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * Update exchanges/deribit/deribit_wrapper.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * Update exchanges/gateio/gateio_wrapper_test.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * Update exchanges/gateio/gateio_wrapper_test.go Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * Add consts for cancel side references * Update exchanges/gateio/gateio_wrapper.go Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io> * Update exchanges/gateio/gateio_wrapper.go Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io> * Update exchanges/gateio/gateio_websocket_request_futures.go Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io> * thrasher-: nits --------- Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io> Co-authored-by: Scott <gloriousCode@users.noreply.github.com> Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
This commit is contained in:
@@ -1124,65 +1124,73 @@ func (e *Exchange) CancelBatchOrders(ctx context.Context, o []order.Cancel) (*or
|
||||
|
||||
// CancelAllOrders cancels all orders associated with a currency pair
|
||||
func (e *Exchange) CancelAllOrders(ctx context.Context, o *order.Cancel) (order.CancelAllResponse, error) {
|
||||
err := o.Validate()
|
||||
if err != nil {
|
||||
return order.CancelAllResponse{}, err
|
||||
var resp order.CancelAllResponse
|
||||
if err := o.Validate(); err != nil {
|
||||
return resp, err
|
||||
}
|
||||
var cancelAllOrdersResponse order.CancelAllResponse
|
||||
cancelAllOrdersResponse.Status = map[string]string{}
|
||||
|
||||
fmtPair, err := e.FormatExchangeCurrency(o.Pair, o.AssetType)
|
||||
if err != nil {
|
||||
return resp, err
|
||||
}
|
||||
|
||||
var side string
|
||||
switch {
|
||||
case o.Side.IsLong():
|
||||
side = order.Bid.Lower()
|
||||
case o.Side.IsShort():
|
||||
side = order.Ask.Lower()
|
||||
case o.Side == order.UnknownSide, o.Side == order.AnySide:
|
||||
default:
|
||||
return resp, fmt.Errorf("%w: %q", order.ErrSideIsInvalid, o.Side)
|
||||
}
|
||||
|
||||
switch o.AssetType {
|
||||
case asset.Spot, asset.Margin, asset.CrossMargin:
|
||||
if o.Pair.IsEmpty() {
|
||||
return order.CancelAllResponse{}, currency.ErrCurrencyPairEmpty
|
||||
}
|
||||
var cancel []SpotPriceTriggeredOrder
|
||||
cancel, err = e.CancelMultipleSpotOpenOrders(ctx, o.Pair, o.AssetType)
|
||||
cancel, err := e.CancelMultipleSpotOpenOrders(ctx, fmtPair, o.AssetType)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
return resp, err
|
||||
}
|
||||
for x := range cancel {
|
||||
cancelAllOrdersResponse.Status[strconv.FormatInt(cancel[x].AutoOrderID, 10)] = cancel[x].Status
|
||||
resp.Add(strconv.FormatInt(cancel[x].AutoOrderID, 10), cancel[x].Status)
|
||||
}
|
||||
case asset.CoinMarginedFutures, asset.USDTMarginedFutures, asset.DeliveryFutures:
|
||||
if o.Pair.IsEmpty() {
|
||||
return cancelAllOrdersResponse, currency.ErrCurrencyPairEmpty
|
||||
}
|
||||
settle, err := getSettlementCurrency(o.Pair, o.AssetType)
|
||||
settle, err := getSettlementCurrency(fmtPair, o.AssetType)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
return resp, err
|
||||
}
|
||||
var cancel []Order
|
||||
if o.AssetType == asset.DeliveryFutures {
|
||||
cancel, err = e.CancelMultipleDeliveryOrders(ctx, o.Pair, o.Side.Lower(), settle)
|
||||
cancel, err = e.CancelMultipleDeliveryOrders(ctx, fmtPair, side, settle)
|
||||
} else {
|
||||
cancel, err = e.CancelMultipleFuturesOpenOrders(ctx, o.Pair, o.Side.Lower(), settle)
|
||||
cancel, err = e.CancelMultipleFuturesOpenOrders(ctx, fmtPair, side, settle)
|
||||
}
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
return resp, err
|
||||
}
|
||||
for f := range cancel {
|
||||
cancelAllOrdersResponse.Status[strconv.FormatInt(cancel[f].ID, 10)] = cancel[f].Status
|
||||
resp.Add(strconv.FormatInt(cancel[f].ID, 10), cancel[f].FinishAs)
|
||||
}
|
||||
case asset.Options:
|
||||
var underlying currency.Pair
|
||||
if !o.Pair.IsEmpty() {
|
||||
underlying, err = e.GetUnderlyingFromCurrencyPair(o.Pair)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
return resp, err
|
||||
}
|
||||
}
|
||||
cancel, err := e.CancelMultipleOptionOpenOrders(ctx, o.Pair, underlying.String(), o.Side.Lower())
|
||||
cancel, err := e.CancelMultipleOptionOpenOrders(ctx, fmtPair, underlying.String(), side)
|
||||
if err != nil {
|
||||
return cancelAllOrdersResponse, err
|
||||
return resp, err
|
||||
}
|
||||
for x := range cancel {
|
||||
cancelAllOrdersResponse.Status[strconv.FormatInt(cancel[x].OptionOrderID, 10)] = cancel[x].Status
|
||||
resp.Add(strconv.FormatInt(cancel[x].OptionOrderID, 10), cancel[x].FinishAs)
|
||||
}
|
||||
default:
|
||||
return cancelAllOrdersResponse, fmt.Errorf("%w asset type: %v", asset.ErrNotSupported, o.AssetType)
|
||||
return resp, fmt.Errorf("%w asset type: %v", asset.ErrNotSupported, o.AssetType)
|
||||
}
|
||||
|
||||
return cancelAllOrdersResponse, nil
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// GetOrderInfo returns order information based on order ID
|
||||
@@ -2573,13 +2581,14 @@ func (e *Exchange) deriveFuturesWebsocketOrderResponses(responses []*WebsocketFu
|
||||
}
|
||||
|
||||
func (e *Exchange) getSpotOrderRequest(s *order.Submit) (*CreateOrderRequest, error) {
|
||||
var side string
|
||||
switch {
|
||||
case s.Side.IsLong():
|
||||
s.Side = order.Buy
|
||||
side = order.Buy.Lower()
|
||||
case s.Side.IsShort():
|
||||
s.Side = order.Sell
|
||||
side = order.Sell.Lower()
|
||||
default:
|
||||
return nil, order.ErrSideIsInvalid
|
||||
return nil, fmt.Errorf("%w: %q", order.ErrSideIsInvalid, s.Side)
|
||||
}
|
||||
|
||||
tif, err := toExchangeTIF(s.TimeInForce, s.Price)
|
||||
@@ -2588,7 +2597,7 @@ func (e *Exchange) getSpotOrderRequest(s *order.Submit) (*CreateOrderRequest, er
|
||||
}
|
||||
|
||||
return &CreateOrderRequest{
|
||||
Side: s.Side.Lower(),
|
||||
Side: side,
|
||||
Type: s.Type.Lower(),
|
||||
Account: e.assetTypeToString(s.AssetType),
|
||||
Amount: types.Number(s.GetTradeAmount(e.GetTradingRequirements())),
|
||||
|
||||
Reference in New Issue
Block a user