Торговля
Постановка и снятие заявок, закрытие позиций, стоп-лосс и тейк-профит, смена плеча.
Вызовам на этой странице нужно право trading:write. Цены и объёмы
передаются десятичными строками.
Реальные деньги. Эти вызовы отправляют на биржу настоящие заявки через терминал, и подтверждения нет. Чтобы сразу остановить программу, выключите Local API в терминале.
Поставить заявку
accepted = terminal.place_order(
12,
"binance:futures:BTCUSDT",
side="buy",
order_type="limit",
price="60000",
size="0.001",
client_key="bot-42",
)
print(accepted.key)| Аргумент | Значение |
|---|---|
order_type | limit с ценой price или market без неё. В TypeScript это type. |
size или notional | Ровно одно из двух: объём в базовой монете или сумма в валюте котировки. |
reduce_only, post_only | Необязательные, по умолчанию false. |
time_in_force | Необязательный: gtc, ioc, fok или post_only. |
Всегда передавайте client_key. Повтор с тем же ключом возвращает первый
ответ и ничего не ставит, поэтому повторный запрос никогда не поставит
заявку дважды. Терминал помнит последнюю тысячу ключей.
Передавайте цены и объёмы строками. Python отклоняет float.
Проверить исход
# accepted is the answer of place_order
orders = terminal.account_orders(12)
order = next((o for o in orders.data if o.key == accepted.key), None)
if order:
print(order.status, order.exchange_id, order.filled)Ответ accepted значит, что терминал принял команду. Он не значит, что
биржа приняла заявку или исполнила её. Исход читайте из счёта: заявка
появляется там под своим key.
Чтобы не опрашивать счёт, подпишитесь на account.orders до постановки
заявки. См. Счёт.
Снять заявку
terminal.cancel_order(12, "binance:futures:BTCUSDT", "t-173029440000000001")
terminal.cancel_all(12, "binance:futures:BTCUSDT")Первый вызов принимает ключ заявки в терминале или её идентификатор на
бирже. Отправляйте его после того, как у заявки в счёте появился
exchange_id. Снятие заявки в состоянии pending ничего не находит на
бирже, и заявка остаётся.
Второй вызов снимает все заявки инструмента. Триггерные заявки остаются.
Закрыть позицию
terminal.close_position(12, "binance:futures:BTCUSDT")На фьючерсах терминал отправляет рыночную заявку на размер позиции. На споте он снимает все заявки инструмента и закрывает позицию одной командой.
Поставить стоп-лосс или тейк-профит
stop_loss = terminal.place_trigger(
12, "binance:futures:BTCUSDT", kind="stop_loss", trigger_price="59000", client_key="sl-42"
)
print(stop_loss.key)kind — это stop_loss или take_profit. Оба ставятся на открытую
позицию: сторону и размер терминал берёт из неё.
Поставить стоп
stop = terminal.place_trigger(
12,
"binance:futures:BTCUSDT",
kind="stop",
side="sell",
notional="800",
trigger_price="59000",
rule="price_below_or_equal",
)
print(stop.key)Стоп — это самостоятельная заявка. Ему нужны свои side и notional,
сумма в валюте котировки. rule необязателен: по умолчанию стоп стоит выше
рынка для покупки и ниже рынка для продажи.
Перенести триггер
for trigger in terminal.account_orders(12).triggers:
print(trigger.id, trigger.client_id, trigger.trigger_price)
terminal.amend_trigger(12, "binance:futures:BTCUSDT", 42, kind="stop_loss", trigger_price="58500")Триггер переносится и снимается по числовому id из счёта, а не по ключу.
Его client_id там — это key, который вы получили при постановке.
Терминал заменяет триггер новым. Передайте kind ещё раз, а для стопа ещё
и side.
Снять триггер
terminal.cancel_trigger(12, "binance:futures:BTCUSDT", 42)
terminal.cancel_all_triggers(12, "binance:futures:BTCUSDT")Второй вызов снимает все триггеры инструмента. Обычные заявки остаются.
Изменить плечо
terminal.set_leverage(12, "binance:futures:BTCUSDT", leverage=20)
terminal.set_leverage(12, "binance:futures:BTCUSDT", mode="max")Плечо есть только у фьючерсов. Передайте либо leverage, целое число от 1,
либо mode со значением max или smart.
Прочитать плечо
leverage = terminal.leverage(12, "binance:futures:BTCUSDT")
print(leverage.leverage, leverage.max_leverage, leverage.mode, leverage.margin_mode)Этому вызову нужно право account:read. Он отвечает 409 not_active, пока
инструмент не открывали в терминале и не задавали его плечо.
Изменить режим маржи
terminal.set_margin_mode(12, "binance:futures:BTCUSDT", "isolated")Режим — это cross или isolated. Биржа отклоняет смену, пока открыта
позиция, и ответ accepted этого не показывает.
Когда вызов не удался
| Что происходит | Что вы получите | Что делать |
|---|---|---|
| Подключение выключено, только для чтения или без ключей | 409 not_tradable | Использовать торговое подключение |
| Неверный аргумент или заявка ниже минимума биржи | 400 invalid_request | Исправить запрос |
| Нет открытой позиции, которую можно закрыть или защитить | 400 invalid_request | Сначала прочитать позиции |
| Больше 10 торговых команд в секунду на весь терминал | 429 rate_limited | Снизить темп, см. Лимиты |
| Терминал слишком занят, чтобы принять команду | 503 unavailable | Команда не отправлена. Отправить её снова |
| В терминале нет триггерных заявок для этой биржи | 501 unsupported | Повтор не поможет |
Что недоступно
Торговля на Московской бирже (MOEX) недоступна: любой вызов по инструменту
moex: отвечает 501 unsupported.