Рахунок
Читайте заявки, позиції, баланси й виконання підключення та стежте за їхніми змінами.
Кожному виклику на цій сторінці потрібні право account:read і
connection_id. Рахунок не має типового підключення: беріть id із
connections(). Ціни й обсяги — десяткові рядки, час — у мілісекундах UTC.
Відкриті заявки
orders = terminal.account_orders(12)
for order in orders.data:
print(order.key, order.exchange_id, order.side, order.price, order.remaining, order.status)
for trigger in orders.triggers:
print(trigger.id, trigger.trigger_type, trigger.trigger_price)data містить відкриті заявки, triggers — стоп-лоси, тейк-профіти та
стоп-заявки. key — це ключ заявки в терміналі, exchange_id — на біржі.
Кожен із них порожній, поки не стане відомим.
Позиції
positions = terminal.account_positions(12)
for position in positions.data:
print(position.instrument, position.side, position.size, position.entry_price, position.unrealized_pnl)size — у базовій монеті. На MOEX — у лотах по lot_size базових одиниць.
unrealized_pnl і mark_price — власні значення термінала. Ціна
маркування — це найкращий bid для лонга і найкращий ask для шорта.
Баланси
balances = terminal.account_balances(12)
for balance in balances.data:
print(balance.currency, balance.total, balance.available, balance.locked)Термінал збирає баланси з моменту ввімкнення API. Валюти, яка відтоді не змінювалася, у списку немає.
Виконання
fills = terminal.account_fills(12, limit=50)
for fill in fills.data:
print(fill.ts, fill.instrument, fill.side, fill.price, fill.qty, fill.fee)
if fills.data:
newer = terminal.account_fills(12, since_ts=fills.data[-1].ts)Виконання йдуть від старих до нових. limit — від 1 до 1000, типово 100.
since_ts залишає виконання, починаючи з цього часу біржі.
Термінал зберігає останні 1000 виконань підключення, зібрані з моменту ввімкнення API. Вимкнення підключення стирає його виконання й баланси.
Стежити за змінами
import asyncio
from spectre_terminal import Event
async def main():
async with terminal.stream() as stream:
await stream.subscribe("account.orders", connection_id=12)
await stream.subscribe("account.fills", connection_id=12)
async for frame in stream:
if not isinstance(frame, Event):
continue
if frame.topic == "account.orders":
print(frame.data.instrument, len(frame.data.orders), len(frame.data.triggers))
elif frame.topic == "account.fills":
print(frame.data.instrument, frame.data.side, frame.data.price, frame.data.qty)
asyncio.run(main())| Топік | Що несе кадр |
|---|---|
account.orders | Усі заявки й тригери одного інструмента. Замініть ним свій список. |
account.positions | Позиція одного інструмента. Вона порожня, коли позицію закрито. |
account.balances | Баланс однієї валюти. |
account.fills | Одне виконання. |
Підписка не надсилає початкового стану. Спершу прочитайте його викликами вище.
Клієнт, який читає надто повільно, може пропустити виконання. Щоб
надолужити, прочитайте виконання ще раз із since_ts. Докладніше:
Стрімінг.