Как отправить OCO-ордер на binance

Я хочу попросить вас о помощи. Я пытаюсь изменить код Python с отправки лимитного / рыночного ордера на ордер OCO через API на binance. Я могу сделать лимитный ордер, рыночный ордер, лимитный ордер стоп-лосс. Я не могу понять, как разместить заказ OCO ...

Когда я использовал лимитный ордер, я отправлял order_type = ORDER_TYPE_LIMIT, тогда я использовал order = client.create_order (), и он работал. Когда я хотел отправить рыночный ордер, я использовал order_type = ORDER_TYPE_MARKET, но когда я хочу сделать OCO-ордер, я обнаружил, что единственный вариант, который должен работать, это: order = client.create_oco_order () без order_type, но здесь я получаю ошибку 1013 Stop loss не поддерживается для этого символа ...

Я проверил https://api.binance.com/api/v1/exchangeInfo

и есть следующие типы orderTypes: [LIMIT, LIMIT_MAKER, MARKET, STOP_LOSS_LIMIT, TAKE_PROFIT_LIMIT], icebergAllowed: true, ocoAllowed: true,

Поэтому я не могу использовать order_type. Нет ORDER_TYPE_OCO и ocoAllowed истинно, поэтому я могу отправить заказ oco. Но я получаю сообщение об ошибке 1013: для этого символа не поддерживаются стоп-лоссы. заказ не выполнен.

Я хочу установить цену как лимитный ордер на продажу, чтобы зафиксировать более высокую прибыль, когда цена будет достигнута, и установить стоп-лосс stopPrice ниже, если цена пойдет вниз ... сразу. Вот как должен работать OCO.

Может кто-нибудь дать мне совет, как это сделать? Я не гуру Python. Я просто меняю один код, который я нашел, и я понимаю, что если разрешено oco, то следует разрешить и стоп-лосс. Спасибо


person Garik    schedule 03.01.2021    source источник
comment
Наконец-то я нашел ответ на github. Для оформления заказа необходимы другие параметры. Для создания OCO-ордера необходимы следующие параметры: количество символов, сторона, цена, stopPrice, stopLimit, цена, stopLimitTimeInForce. Я добавил stopLimitPrice и stopLimitTimeInForce, и теперь он работает. Для заказа OCO требуются 3 разные цены, которые у меня были только 2. github.com/ccxt/ccxt/issues/5966   -  person Garik    schedule 03.01.2021


Ответы (1)


чтобы у всех желающих был точный ответ по поводу решения этой проблемы, включаю код с комментариями.

Я буду использовать ордер на продажу OCO в качестве примера в BTCUSDT.

Представьте, что у меня есть 1 BTC. Текущая цена составляет 30157,85, и я хочу продать 1 BTC намного дороже по 32000,07.

Но цена не растет и начинает падать, поэтому я ставлю стоп-цену на 29283,03, где будет открыт лимитный ордер на продажу по цене 29000,00.

Это означает, что я продам по цене 32000,07 или 29000,00 долларов США. Порядок записывается следующим образом:

order= client.order_oco_sell(
    symbol= 'BTCUSDT',                                            
    quantity= 1.00000,                                            
    price= '32000.07',                                            
    stopPrice= '29283.03',                                            
    stopLimitPrice= '29000.00',                                            
    stopLimitTimeInForce= 'FOK')

Обратите внимание, что для заказа OCO требуется параметр stopLimitTimeInForce. Я использовал значение "FOK", но оставляю вам здесь описание различных значений, которые вы можете использовать: https://help.bybit.com/hc/en-us/articles/360039749233-What-are-time-in-force-TIF-GTC-IOC-FOK-

Обратите внимание, что параметры price, stopPrice, stopLimitPrice и stopLimitTimeInForce являются строками, а не с плавающей точкой или десятичными числами.

person aKratos    schedule 30.01.2021
comment
Вопрос для Binance, но этот ответ ссылается на документацию ByBit, применим ли он и к Binance? - person Jason; 06.02.2021
comment
Да @ Джейсон. Я сам использую эту процедуру для Binance. Я не торгую на Bybit. Значения stopLimitTimeInForce относятся к концепциям, применимым на любой платформе. - person aKratos; 07.02.2021
comment
Проблема с ордером OCO заключается в том, что вместо рыночного ордера есть лимитный ордер, я прекратил его использовать, потому что он просто пропустил мои лимитные ордера, и цена упала ... Не гарантируется, что лимитный ордер будет исполнен, поэтому его полезно я без рыночного ордера на продажу, боты всегда пропускают ваши лимитные ордера на продажу, если цена снижается ... - person Garik; 01.04.2021
comment
@Garik, похоже, Binance просто обновили свои документы об OCO: academy .binance.com / ru / article / what-is-an-oco-order - person Chau Giang; 22.04.2021