Рабочее пространство
Окна, вкладки, стеки и графики терминала: как их прочитать, открыть, изменить или закрыть.
Для чтения раскладки нужно право workspace:read. Для изменения нужно
workspace:write. Стек — это стакан с лентой сделок и кластерами.
Прочитать раскладку
workspace = terminal.workspace()
for window in workspace.windows:
for tab in window.tabs:
print(window.id, tab.id, tab.name, [stack.instrument for stack in tab.stacks])В ответе перечислены все окна с их вкладками и все вкладки с их стеками и графиками. Все поля есть в справочнике.
Идентификаторы действуют один запуск
У окна и вкладки есть id, у стека и графика — widget_id. Вкладки
нумеруются внутри каждого окна, поэтому вкладка адресуется окном и вкладкой
вместе.
Все идентификаторы действуют только в текущем запуске терминала. После перезапуска прочитайте раскладку заново.
Открыть стек
opened = terminal.open_stack("binance:futures:BTCUSDT", chart=True)
print(opened.window_id, opened.tab_id, opened.stacks, opened.charts)| Аргумент | Значение |
|---|---|
chart | true открывает вместе со стеком график инструмента. По умолчанию false. |
target | new_tab (по умолчанию) или new_window. |
window_id | Окно для новой вкладки. По умолчанию — окно в фокусе. |
activate | false открывает вкладку в фоне. Новое окно всегда получает фокус. |
Ответ называет окно, вкладку и идентификаторы открытых виджетов. Все команды на этой странице отвечают в этой форме.
Открыть вкладку с несколькими инструментами
from spectre_terminal import TabItem
opened = terminal.open_tab(
[TabItem("binance:futures:BTCUSDT", chart=True), "binance:futures:ETHUSDT"],
name="Majors",
)
print(opened.tab_id, opened.stacks, opened.charts)Каждый элемент становится колонкой, в порядке списка. В списке от 1 до
50 элементов, name — до 64 символов. Если хотя бы один элемент отклонён,
не открывается ничего.
target, window_id и activate работают так же, как в
Открыть стек.
Добавить стеки во вкладку
added = terminal.add_stacks(1, 2, ["binance:futures:SOLUSDT"])
print(added.stacks, added.charts)Первые два аргумента — окно и вкладка. Новые колонки встают после последней. В ответе перечислены только добавленные виджеты.
Открыть монету на всех биржах
opened = terminal.open_multiview("BTC", target="new_window")
print(opened.window_id, opened.stacks, opened.charts)Это кнопка «Мультивью» в терминале: монета открывается на всех биржах,
включённых в настройке «Раскладка бирж». Передайте монету, BTC, или пару,
BTC/USDT. Без target терминал следует своей настройке «Мультивью».
Сменить инструмент стека
terminal.set_stack_instrument(14, "binance:futures:ETHUSDT")Первый аргумент — это widget_id стека. Его графики тоже переключаются.
Закрыть стек, вкладку или окно
terminal.close_stack(14)
terminal.close_tab(1, 2)
terminal.close_window(2)Подтверждения нет. Главное окно, помеченное в раскладке как main, и
единственную вкладку окна закрыть нельзя: вызов отвечает
400 invalid_request.
Вывести вкладку или окно на передний план
terminal.activate_tab(1, 2)
terminal.activate_window(2)Первый вызов выбирает вкладку, не меняя фокус окна. Второй выводит окно на передний план.
Следить за изменениями
import asyncio
from spectre_terminal import Event
async def main():
async with terminal.stream() as stream:
await stream.subscribe("workspace")
async for frame in stream:
if isinstance(frame, Event) and frame.topic == "workspace":
for window in frame.data.windows:
print(window.id, [tab.name for tab in window.tabs])
asyncio.run(main())Первый кадр — это текущая раскладка. Затем на каждое изменение приходит кадр со всей раскладкой. Подробнее в разделе Стриминг.
Когда команда не удалась
| Что происходит | Что вы получите | Что делать |
|---|---|---|
| Инструмента нет в справочнике, или идентификатор принадлежит графику | 400 invalid_request | Исправить запрос |
| Такого окна, вкладки или стека нет | 404 not_found | Прочитать раскладку заново |
| Монеты нет ни на одной включённой бирже | 404 not_found | Проверить монету |
| Больше 5 команд рабочего пространства в секунду на весь терминал | 429 rate_limited | Снизить темп, см. Лимиты |
| Окно не ответило за 2 секунды | 503 unavailable | Проверить раскладку, затем повторить |
Что недоступно
API не переносит стеки между вкладками, не меняет ширину колонок и не управляет другими окнами, например скринером.