如何在币安期货平仓时取消止损和止盈订单 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×tamp=12123123&closePosition=true&stopPrice=4100&workingType=MARK_PRICE&priceProtect=true
这个为 ETHUSDT 交易品种创建了一个止盈订单,但我不知道为什么在平仓时该订单没有取消。
是否缺少用于创建 SL/TP 订单的参数?
默认情况下,币安在平仓后不会关闭 TAKE_PROFIT_MARKET
或 STOP_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'
}
]
我正在使用币安期货剩余 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×tamp=12123123&closePosition=true&stopPrice=4100&workingType=MARK_PRICE&priceProtect=true
这个为 ETHUSDT 交易品种创建了一个止盈订单,但我不知道为什么在平仓时该订单没有取消。
是否缺少用于创建 SL/TP 订单的参数?
默认情况下,币安在平仓后不会关闭 TAKE_PROFIT_MARKET
或 STOP_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'
}
]