首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用rest api在期货合约成交时取消止损和取利指令

如何用rest api在期货合约成交时取消止损和取利指令
EN

Stack Overflow用户
提问于 2021-12-22 10:38:42
回答 2查看 4.2K关注 0票数 3

我使用Binance期货rest进行算法交易。在创建买卖订单之后,当我查看Binance应用程序时,我还创建了“获利”和“止损”指令。它看起来像普通的SL/TP订单,但是当我手动关闭位置时,或者当任何SL/TP订单执行SL/TP订单时,我的开放订单仍在等待。

但是当我用Binance应用程序创建SL/TP订单时,关闭位置(由于任何原因),打开订单也会关闭相同的符号。

以下是创建SL/TP订单的端点和参数;

代码语言:javascript
运行
复制
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符号创建了一个TP订单,但是我不知道为什么当这个位置关闭时,这个命令不被取消。

是否存在创建SL/TP订单的缺少参数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-03 09:45:02

我有个相关的问题。对于你的具体问题,我注意到,当你提交,例如,一个市场多头头寸。您可以通过将TP和SL顺序分别设置为TAKE_PROFIT_MARKET和STOP_MARKET来跟踪它们。

要使这一模式发挥作用,你必须采用“单向”模式(而不是“对冲”模式)。

然后将'timeInForce‘的值设置为'GTE_GTC’--我在文档中看不到这个值,但我确实看到,当您使用TP/SL通过UI设置订单时,如下所示。还将'reduceOnly‘设置为True。

然后,当你关闭原来的市场秩序,这两个‘悬而未决’的订单将被删除。

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

代码语言:javascript
运行
复制
POST /fapi/v1/batchOrders
代码语言:javascript
运行
复制
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'
        }
    ]
票数 5
EN

Stack Overflow用户

发布于 2022-01-09 21:09:56

默认情况下,在位置关闭后,Binance不关闭TAKE_PROFIT_MARKETSTOP_MARKET。您需要手动关闭这些订单,您可以提取并根据positionSide (SELL / LONG / BOTH)和origType (TAKE_PROFIT_MARKET / STOP_MARKET)筛选它们,您可以获得这些订单和的orderId,或者取消它们

代码语言:javascript
运行
复制
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)
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70447698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档