Модели Python
Объекты, которые возвращает клиент на Python.
Level
class Level(NamedTuple)Один уровень стакана, пара [price, size] из контракта.
| Поле | Тип |
|---|---|
price | Decimal |
size | Decimal |
Limits
Потолки стрима и торговли, как их печатает /v1/meta.
commands_per_second — темп торговых команд на листенер,
workspace_commands_per_second — темп команд рабочего пространства,
settings_commands_per_second — темп записей настроек; каждый равен 0
у терминала старше этапа, который добавил лимит: такой терминал его
не печатает, потому что таких команд не принимает.
| Поле | Тип |
|---|---|
ws_connections_per_token | int |
subscriptions_per_connection | int |
api_only_instruments | int |
exchange_subscriptions_per_second | int |
commands_per_second | int |
workspace_commands_per_second | int |
settings_commands_per_second | int |
Meta
GET /v1/meta: версия API, сборка терминала, права токена, лимиты, топики стрима.
topics пуст, если терминал собран без отвода рыночных
данных; стрим и рыночные операции тогда отвечают unsupported.
| Поле | Тип |
|---|---|
api_version | str |
app_version | str |
build_hash | str |
build_env | str |
features | str |
scopes | list[str] |
limits | Limits |
topics | list[str] |
Health
GET /v1/health: состояние листенера и счётчики хаба рыночных данных.
| Поле | Тип |
|---|---|
status | str |
uptime_ms | int |
clients | int |
streams | int |
api_only_instruments | int |
dropped_events | int |
dropped_frames | int |
overflow_closes | int |
stream_available | bool |
LastEvent
Последняя запись истории подключения: код стадии или ошибки и его время.
| Поле | Тип |
|---|---|
code | str |
ts | int |
ConnectionStatus
Состояние подключения: disabled, enabled, connecting, connected или failed.
last_event равен None, пока у подключения нет истории.
| Поле | Тип |
|---|---|
state | str |
last_event | LastEvent | None |
Connection
Одно из подключений терминала к биржам. Секретов не несёт, даже в виде маски.
| Поле | Тип |
|---|---|
id | int |
exchange | str |
market | str |
label | str |
enabled | bool |
read_only | bool |
has_credentials | bool |
proxy_bound | bool |
status | ConnectionStatus |
Instrument
Запись справочника. Шаги и минимумы равны None, если биржа их не сообщила.
| Поле | Тип |
|---|---|
instrument | str |
exchange | str |
market | str |
symbol | str |
base | str |
quote | str |
status | str |
tick_size | Decimal | None |
lot_size | Decimal | None |
min_size | Decimal | None |
contract_value | Decimal | None |
Page
class Page(Generic[T])Одна страница списка: data плюс next_cursor для следующей страницы.
exchange и market называют пару, для которой перечислена страница.
next_cursor равен None на последней странице.
| Поле | Тип |
|---|---|
data | list[T] |
next_cursor | str | None |
exchange | str |
market | str |
Interval
Код интервала, который знает терминал, и его номинальная длительность.
| Поле | Тип |
|---|---|
id | str |
duration_ms | int |
Intervals
GET /v1/market/intervals: интервалы свечей и кластеров.
| Поле | Тип |
|---|---|
candles | list[Interval] |
clusters | list[Interval] |
Candle
Один бар. ts — открытие бара; volume — в базовой монете.
| Поле | Тип |
|---|---|
ts | int |
open | Decimal |
high | Decimal |
low | Decimal |
close | Decimal |
volume | Decimal |
quote_volume | Decimal |
closed | bool |
Candles
GET /v1/market/candles: бары одного инструмента и подключение, через которое они пришли.
| Поле | Тип |
|---|---|
instrument | str |
connection_id | int |
interval | str |
data | list[Candle] |
Trade
Одна сделка. ts — когда она прошла через терминал, exchange_ts — время биржи.
id в v1 всегда None.
| Поле | Тип |
|---|---|
id | str | None |
price | Decimal |
qty | Decimal |
side | str |
ts | int |
exchange_ts | int |
Trades
GET /v1/market/trades: последние сделки одного инструмента, от старых к новым.
| Поле | Тип |
|---|---|
instrument | str |
connection_id | int |
data | list[Trade] |
Ticker
Суточный тикер. Поля, которые биржа не сообщает, равны None.
best_bid и best_ask здесь — цены из ленты тикера, а не
уровни стакана; верхушка стакана — в Snapshot.
| Поле | Тип |
|---|---|
price | Decimal |
change_24h_pct | Decimal | None |
volume_24h | Decimal | None |
high_24h | Decimal | None |
low_24h | Decimal | None |
best_bid | Decimal | None |
best_ask | Decimal | None |
ts | int |
MarkPrice
Кадр стрима mark_price: цена маркировки и её время.
| Поле | Тип |
|---|---|
mark_price | Decimal |
ts | int |
Snapshot
GET /v1/market/snapshot: последнее, что хаб знает об одном инструменте.
best_bid и best_ask — пары Level из стакана хаба,
None, пока не пришёл снимок стакана. Остальные поля —
None, пока не пришли их данные.
| Поле | Тип |
|---|---|
instrument | str |
connection_id | int |
ts | int |
best_bid | Level | None |
best_ask | Level | None |
last_trade | Trade | None |
mark_price | Decimal | None |
ticker | Ticker | None |
BookTop
Верхушка стакана: биды от лучшей цены вниз, аски от лучшей цены вверх.
Это data кадра стрима book.top; OrderBook
добавляет инструмент и подключение для HTTP-операции.
| Поле | Тип |
|---|---|
ts | int |
depth | int |
bids | list[Level] |
asks | list[Level] |
OrderBook
class OrderBook(BookTop)GET /v1/market/orderbook: верхушка стакана одного инструмента.
| Поле | Тип |
|---|---|
instrument | str |
connection_id | int |
ClusterLevel
Объём, наторгованный по одной цене внутри бакета кластера.
| Поле | Тип |
|---|---|
price | Decimal |
volume | Decimal |
buy_volume | Decimal |
sell_volume | Decimal |
buy_trades | int |
sell_trades | int |
Cluster
Один бакет кластера: итоги, диапазон цен и все уровни от низшей цены вверх.
last_trade_ts равен 0 у бакета, засеянного из истории без
времени сделки. vwap, min_price и max_price равны None у
бакета без сделок.
| Поле | Тип |
|---|---|
interval | str |
ts | int |
end_ts | int |
volume | Decimal |
buy_volume | Decimal |
sell_volume | Decimal |
trades | int |
vwap | Decimal | None |
min_price | Decimal | None |
max_price | Decimal | None |
completed | bool |
last_trade_ts | int |
levels | list[ClusterLevel] |
Clusters
GET /v1/market/clusters: последние бакеты одного инструмента, от старых к новым.
interval — тот, что выбран для инструмента в терминале.
| Поле | Тип |
|---|---|
instrument | str |
connection_id | int |
interval | str |
ts | int |
data | list[Cluster] |
Order
Открытая заявка подключения: pending, open или partially_filled.
key — ключ заявки в терминале (t-...), exchange_id — id
биржи; каждый равен None, пока неизвестен. size, filled и
remaining — в базовой монете; notional — сумма в котировке, которую
ввёл трейдер, None у заявки, пришедшей из снимка
биржи. JSON-ключ type здесь — order_type.
| Поле | Тип |
|---|---|
key | str | None |
exchange_id | str | None |
instrument | str |
side | str |
order_type | str |
price | Decimal | None |
size | Decimal |
filled | Decimal |
remaining | Decimal |
notional | Decimal | None |
status | str |
created_ts | int |
TriggerOrder
Триггерная заявка: stop_loss, take_profit или stop (trigger_type).
rule — price_above_or_equal или price_below_or_equal;
status — open, finished, inactive или invalid.
size, notional, order_type, client_id и created_ts
равны None, если биржа их не сообщила.
| Поле | Тип |
|---|---|
id | str |
instrument | str |
trigger_type | str |
trigger_price | Decimal |
rule | str |
size | Decimal | None |
notional | Decimal | None |
status | str |
order_type | str | None |
client_id | str | None |
created_ts | int | None |
AccountOrders
GET /v1/account/orders: открытые заявки и триггерные заявки одного подключения.
| Поле | Тип |
|---|---|
connection_id | int |
data | list[Order] |
triggers | list[TriggerOrder] |
Position
Открытая позиция. size — в базовой монете (на MOEX — в лотах, по lot_size базовых единиц в каждом).
notional — в котировке; unrealized_pnl и mark_price —
собственные значения терминала (лучший bid для лонга, лучший ask для шорта), None
до первого тика стакана.
| Поле | Тип |
|---|---|
instrument | str |
side | str |
size | Decimal |
lot_size | Decimal | None |
entry_price | Decimal | None |
notional | Decimal | None |
unrealized_pnl | Decimal | None |
mark_price | Decimal | None |
AccountPositions
GET /v1/account/positions: открытые позиции одного подключения.
| Поле | Тип |
|---|---|
connection_id | int |
data | list[Position] |
Balance
Последний баланс одной валюты.
available и locked равны None, если биржа их не
сообщает; ts — время биржи там, где оно есть, иначе время
получения.
| Поле | Тип |
|---|---|
currency | str |
total | Decimal |
available | Decimal | None |
locked | Decimal | None |
ts | int |
AccountBalances
GET /v1/account/balances: по каждой валюте последнее значение с момента включения API.
| Поле | Тип |
|---|---|
connection_id | int |
data | list[Balance] |
Fill
Одно исполнение. position_side — long/short на биржах с режимом хеджирования, иначе None.
| Поле | Тип |
|---|---|
trade_id | str | None |
order_id | str | None |
instrument | str |
side | str |
price | Decimal |
qty | Decimal |
fee | Decimal | None |
fee_currency | str | None |
position_side | str | None |
ts | int |
AccountFills
GET /v1/account/fills: последние исполнения подключения, от старых к новым.
| Поле | Тип |
|---|---|
connection_id | int |
data | list[Fill] |
Accepted
Торговая команда принята терминалом, но ещё не биржей.
operation_id называет операцию в файле торговых операций терминала;
key — ключ заявки (t-...), под которым заявка появится
в account.orders, None у снятия. Подтверждение, исполнение
или отказ биржи приходят через стрим.
| Поле | Тип |
|---|---|
accepted | bool |
operation_id | str |
key | str | None |
connection_id | int |
instrument | str |
Leverage
GET /v1/account/leverage: плечо и режим маржи одного фьючерсного инструмента.
Читается из кэша терминала, который наполняют выбор инструмента в окне
и set_leverage; инструмент,
которого терминал ещё не касался, — ApiError not_active. mode
— режим плеча терминала (manual, max, smart), а не
биржи; margin_mode — cross или isolated.
| Поле | Тип |
|---|---|
connection_id | int |
instrument | str |
leverage | int |
max_leverage | int |
mode | str |
margin_mode | str |
CellPosition
Ячейка сетки вкладки: колонка слева направо, строка сверху вниз, ячейка внутри строки.
| Поле | Тип |
|---|---|
column | int |
row | int |
cell | int |
Stack
Стек — стакан с его лентой сделок и кластерами — внутри вкладки.
widget_id глобален для этого запуска терминала. instrument и
connection_id равны None, пока стек empty; position
равен None у стека, скрытого внутри группы стеков.
| Поле | Тип |
|---|---|
widget_id | int |
instrument | str | None |
connection_id | int | None |
empty | bool |
frozen | bool |
position | CellPosition | None |
Chart
График внутри вкладки.
owner_widget_id — стек, за которым следует график, None у самостоятельного.
| Поле | Тип |
|---|---|
widget_id | int |
instrument | str | None |
connection_id | int | None |
interval | str |
owner_widget_id | int | None |
position | CellPosition | None |
Tab
Вкладка окна: id нумеруется в каждом окне с 1, ровно одна вкладка active.
| Поле | Тип |
|---|---|
id | int |
name | str |
active | bool |
stacks | list[Stack] |
charts | list[Chart] |
Window
Окно терминала; main нельзя закрыть через API.
chart_window — вынесенное окно графиков. Геометрия — в логических
пикселях экрана; monitor — имя монитора по данным ОС или None.
| Поле | Тип |
|---|---|
id | int |
main | bool |
chart_window | bool |
focused | bool |
x | int |
y | int |
width | int |
height | int |
maximized | bool |
monitor | str | None |
tabs | list[Tab] |
Workspace
GET /v1/workspace и топик стрима workspace: все окна по возрастанию id.
Идентификаторы — внутренние номера этого запуска терминала: не храните их между перезапусками, читайте заново.
| Поле | Тип |
|---|---|
windows | list[Window] |
TabItem
Одна колонка вкладки, открытой или расширенной через API.
Стек instrument на connection_id (при None его выбирает
общее правило) и, с chart, график над ним.
| Поле | Тип |
|---|---|
instrument | str |
connection_id | int | None |
chart | bool |
WorkspaceOutcome
Что сделало окно по команде рабочего пространства.
При открытии: окно, новая вкладка и её stacks и
charts в порядке колонок; у колонок, добавленных во вкладку, — только
добавленные виджеты. При закрытии и активации: затронутые идентификаторы, остальное —
None или пусто.
| Поле | Тип |
|---|---|
window_id | int | None |
tab_id | int | None |
stacks | list[int] |
charts | list[int] |
SettingRow
Одна строка таблицы настроек терминала, как она хранится.
scope — global или order_book; scope_id — default,
адрес инструмента или None у горячих клавиш; connection_id —
подключение-владелец или None. value — декодированный JSON (числа как
записаны). writable говорит, принимает ли update_settings
этот ключ; в кадре стрима settings он равен None: кадр
такого флага не несёт.
| Поле | Тип |
|---|---|
scope | str |
scope_id | str | None |
connection_id | int | None |
category | str |
key | str |
value | Any |
writable | bool | None |
Settings
GET /v1/settings: строки, как они хранятся, без лестницы умолчаний.
| Поле | Тип |
|---|---|
data | list[SettingRow] |
OrderbookSetting
Одна настройка стека с уровнем, с которого она взята.
resolved_from — instrument (строка пары на подключении),
connection (умолчание подключения), app_instrument (строка пары
без подключения) или global.
| Поле | Тип |
|---|---|
value | Any |
resolved_from | str |
writable | bool |
OrderbookSettings
GET /v1/settings/orderbook: настройки стека одного инструмента, как их видит его стек.
| Поле | Тип |
|---|---|
connection_id | int |
instrument | str |
data | dict[str, dict[str, OrderbookSetting]] |
SettingChange
Одно изменение для update_settings.
instrument адресует строку пары (область order_book);
connection_id с scope="order_book" и без инструмента адресует
умолчание подключения; без того и другого — глобальное умолчание. Глобальные
настройки подключения не принимают.
| Поле | Тип |
|---|---|
category | str |
key | str |
value | Any |
scope | str | None |
instrument | str | None |
connection_id | int | None |
SettingsApplied
PATCH /v1/settings: сколько изменений применено (все, иначе вызов выбросил исключение).
| Поле | Тип |
|---|---|
applied | int |
OrdersUpdate
Кадр account.orders: заявки и триггеры одного инструмента после изменения.
| Поле | Тип |
|---|---|
instrument | str |
orders | list[Order] |
triggers | list[TriggerOrder] |
PositionUpdate
Кадр account.positions: позиция одного инструмента; закрытие — position=None.
| Поле | Тип |
|---|---|
instrument | str |
position | Position | None |
Subscribed
Ответ на subscribe: id подписки и выбранное для неё подключение.
connection_id равен None у workspace и settings: у них нет подключения.
| Поле | Тип |
|---|---|
sub | str |
connection_id | int | None |
request_id | str | None |
Unsubscribed
Ответ на unsubscribe.
| Поле | Тип |
|---|---|
sub | str |
request_id | str | None |
Event
Кадр данных подписки.
seq растёт на единицу у trades; у конфлируемых топиков пропуски в
нумерации — норма. data типизирован по топику, см.
parse_event_data.
| Поле | Тип |
|---|---|
sub | str |
seq | int |
ts | int |
data | Any |
Gap
События from_seq..to_seq подписки trades потеряны.
Приходит перед первым кадром после потери; сделки можно перечитать
через Terminal.trades(..., since_ts=...).
| Поле | Тип |
|---|---|
sub | str |
from_seq | int |
to_seq | int |
reason | str |
SubscriptionError
Сервер снял подписку: биржа отклонила пару, или на неё не удалось подписаться.
Новый subscribe заводит её заново.
| Поле | Тип |
|---|---|
sub | str |
code | str |
message | str |
Собрано из кода spectre-terminal, коммит 2d1c324.