如何在币安期货平仓时取消止损和止盈订单 api

how to cancel stop loss and take profit order when position close on binance futures with rest api

我正在使用币安期货剩余 API 进行算法交易。创建买入或卖出订单后,当我查看 Binance 应用程序时,我还创建了“获利”和“止损”订单。它看起来像常规的 SL/TP 订单,但是当我手动平仓时,或者当任何 SL/TP 订单执行时 SL/TP 订单仍在我的未结订单中等待。

但是当我使用 Binance 应用程序创建 SL/TP 订单并平仓(出于任何原因)时,未平仓订单也会针对相同的交易品种平仓。

这里是创建SL/TP个订单的端点和参数;

https://fapi.binance.com/fapi/v1/order?symbol=ETHUSDT&side=BUY&type=TAKE_PROFIT_MARKET&timestamp=12123123&closePosition=true&stopPrice=4100&workingType=MARK_PRICE&priceProtect=true

这个为 ETHUSDT 交易品种创建了一个止盈订单,但我不知道为什么在平仓时该订单没有取消。

是否缺少用于创建 SL/TP 订单的参数?

默认情况下,币安在平仓后不会关闭 TAKE_PROFIT_MARKETSTOP_MARKET。您需要手动关闭这些订单,您可以拉取 current opened orders and filter them based on the positionSide (SELL / LONG / BOTH) and origType (TAKE_PROFIT_MARKET / STOP_MARKET) and you can get the orderId for those orders and batch cancel them or cancel them one by one

const position = 'LONG' // LONG, SHORT, BOTH

axios
.get('https://fapi.binance.com/fapi/v1/openOrders', {
  params: {
    symbol: 'BTCUSDT'
  }
})
.then(({ data }) => {
  const orderIds = data
    .filter(
      ({ positionSide, origType }) =>
        positionSide === position &&
        ['TAKE_PROFIT_MARKET', 'STOP_MARKET'].includes(origType)
    )
    .map(({ orderId }) => orderId)

  // Use batch cancel or cancel order one by one
  console.log('orderIds', orderIds)
})

我有一个相关问题。对于您的具体问题,我注意到当您提交市场多头头寸时。您可以通过将它们分别设置为 TAKE_PROFIT_MARKET 和 STOP_MARKET 来跟进止盈和止损订单。

为此,您必须使用 'one-way' 模式(相对于 'hedge' 模式)。

然后将 'timeInForce' 的值设置为 'GTE_GTC' - 我在文档中看不到这个值,但是当你通过 UI 设置订单时我确实看到了 TP/SL 显示的是这个。同时将 'reduceOnly' 设置为 True。

然后当您关闭原始市价订单时,这两个 'pending' 订单将被删除。

刚刚测试过您实际上可以批量提交所有这些订单(json 的列表)到:

POST /fapi/v1/batchOrders
batch_payload = [
        {
            'newClientOrderId': '467fba09-a286-43c3-a79a-32efec4be80e',
            'symbol': 'ETHUSDT',
            'type': 'MARKET',
            'quantity': '9.059',
            'side': 'SELL'
        },
        {
            'newClientOrderId': '6925e0cb-2d86-42af-875c-877da7b5fda5',
            'symbol': 'ETHUSDT',
            'type': 'STOP_MARKET',
            'quantity': '9.059',
            'side': 'BUY',
            'stopPrice': '3037.9',
            'timeInForce': 'GTE_GTC',
            'reduceOnly': 'True'
        },
        {
            'newClientOrderId': '121637a9-e15a-4f44-b62d-d424fb4870e0',
            'symbol': 'ETHUSDT',
            'type': 'TAKE_PROFIT_MARKET',
            'quantity': '9.059',
            'side': 'BUY',
            'stopPrice': '2748.58',
            'timeInForce': 'GTE_GTC',
            'reduceOnly': 'True'
        }
    ]