'How to create a futures limit order together with take profit and stop loss on binance?
I am trying to create a limit order together with take profit and stop loss on binance, but this does not always work. Occasionally this code does everything right, but most often I get the error "API Error(code=-2021): Order would immediately trigger." Sometimes applications can be created, but after a couple of seconds they just disappear. What is the mistake?
from binance.client import Client
from binance.helpers import round_step_size
api_key = ''
api_secret = ''
client = Client(api_key, api_secret)
symbol = 'KNCUSDT'
def get_account_balance():
balance = client.futures_account_balance()[6]['balance']
return float(balance)
def get_min_quant(symbol):
info = client.futures_exchange_info()
for item in info['symbols']:
if item['symbol'] == symbol:
for f in item['filters']:
if f['filterType'] == 'PRICE_FILTER':
return f['tickSize']
bet = 13 # the percentage of the balance I am willing to buy with
balance = get_account_balance() * bet / 100
tick_size = float(get_min_quant(symbol))
print(tick_size)
symbol_info = client.get_ticker(symbol=symbol)
symbol_price = float(symbol_info['lastPrice'])
quantity = int(balance / symbol_price)
enter_long_coeff = 0.4
take_profit_percent = 0.2
stop_loss_percent = 0.2
price_long_enter = symbol_price * (1 - enter_long_coeff / 100) # entry price for a limit order
price_long_enter = round_step_size(price_long_enter, tick_size)
take_profit_price = price_long_enter * (1 + take_profit_percent / 100)
take_profit_price = round_step_size(take_profit_price, tick_size)
stop_loss_price = price_long_enter * (1 + take_profit_percent / 100)
stop_loss_price = round_step_size(stop_loss_price, tick_size)
print(price_long_enter)
print(stop_loss_price)
print(take_profit_price)
print('=======')
limit_order_long = client.futures_create_order(
symbol=symbol,
side='BUY',
positionSide='LONG',
type='LIMIT',
quantity=quantity,
timeInForce='GTC',
price=price_long_enter
)
sell_gain_market_long = client.futures_create_order(
symbol=symbol,
side='SELL',
type='TAKE_PROFIT_MARKET',
positionSide='LONG',
quantity=quantity,
stopPrice=take_profit_price
)
sell_stop_market_short = client.futures_create_order(
symbol=symbol,
side='SELL',
type='STOP_MARKET',
positionSide='LONG',
quantity=quantity,
stopPrice=stop_loss_price
)
Solution 1:[1]
Binance does not support the 3 actions at the same time (open_order, take_profit and stop_loss). You have to send the 3 different orders manually and keep the status of them (new, filled or so...) and do whatever you want with them.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | JPerez |