Перейти до вмісту

Торгівля

Ставте й скасовуйте заявки, закривайте позиції, задавайте стоп-лос і тейк-профіт, змінюйте плече.

Викликам на цій сторінці потрібне право 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_typelimit із price або market без неї. У TypeScript — type.
size або notionalРівно одне з двох: сума в базовій монеті або у валюті котирування.
reduce_only, post_onlyНеобов’язкові, типово false.
time_in_forceНеобов’язковий: gtc, ioc, fok або post_only.

Завжди передавайте client_key. Повтор із тим самим ключем повертає першу відповідь і нічого не ставить, тож повторна спроба ніколи не поставить заявку двічі. Термінал пам’ятає останні 1000 ключів.

Передавайте ціни й обсяги рядками. 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")

Перший виклик приймає ключ заявки в терміналі або її id на біржі. Надсилайте його після того, як заявка покаже 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.

На цій сторінці