Перейти к содержимому

Настройки

Настройки терминала и стакана: как их прочитать, изменить и как следить за изменениями.

Для чтения настроек нужно право settings:read. Для изменения нужно settings:write.

Прочитать настройки

settings = terminal.settings(category="multiview")
for row in settings.data:
    print(row.category, row.key, row.value, row.writable)

Настройка — это строка с category, key и value. writable говорит, может ли API её изменить. Без аргументов вы получите настройки всего терминала.

АргументЗначение
category, keyТолько строки этой категории или этого ключа.
scopeglobal (по умолчанию) или order_book.
instrumentСтроки, сохранённые для стакана этого инструмента.
connection_idСтроки, сохранённые для этого подключения.

Прочитать настройки стакана

book = terminal.orderbook_settings(12, "binance:futures:BTCUSDT")
for category, keys in book.data.items():
    for key, setting in keys.items():
        print(category, key, setting.value, setting.resolved_from)

Вызов выше показывает, что сохранено. Этот показывает, что стакан получает в итоге: каждая настройка берётся из первого места, где есть значение, и resolved_from называет это место.

resolved_fromГде сохранено значение
instrumentДля этого инструмента на этом подключении
connectionКак значение по умолчанию для подключения
app_instrumentДля этого инструмента без подключения
globalКак значение по умолчанию для терминала

Изменить настройку

from spectre_terminal import SettingChange

applied = terminal.update_settings([
    SettingChange("multiview", "stack_width_px", 300),
    SettingChange("general", "auto_scroll", True, instrument="binance:futures:BTCUSDT", connection_id=12),
])
print(applied.applied)

Вызов принимает до 100 изменений. Куда сохранится изменение, зависит от того, что вы передаёте вместе с ним.

Вы передаётеИзменение сохраняется
instrumentДля стакана этого инструмента
scope="order_book" и connection_idКак значение по умолчанию для стаканов подключения
Только scope="order_book"Как значение по умолчанию для стаканов терминала
Больше ничегоКак настройка всего терминала

Сначала терминал сверяет каждое изменение со своим списком настроек. Если хотя бы одно отклонено, не сохраняется ничего.

Затем изменения применяются по порядку. Если одно не применилось, вызов останавливается с ошибкой, а изменения до него остаются применёнными.

Плечо через настройки не меняется. Используйте Изменить плечо.

Изменить тему или горячую клавишу

from spectre_terminal import SettingChange

terminal.update_settings([
    SettingChange("appearance", "theme", {"stack": "dark"}),
    SettingChange("hotkeys_orderbook", "close_position", {"code": "KeyX", "modifiers": []}),
])

Тема принимает любые из stack, graphic и interface. Последние два принимают только light или dark.

Горячая клавиша принимает code и modifiers или null. Сочетание, которое занято другим действием, отклоняется.

Следить за изменениями

import asyncio
from spectre_terminal import Event

async def main():
    async with terminal.stream() as stream:
        await stream.subscribe("settings")
        async for frame in stream:
            if isinstance(frame, Event) and frame.topic == "settings":
                print(frame.data.scope, frame.data.category, frame.data.key, frame.data.value)

asyncio.run(main())

Кадр приходит на каждую сохранённую строку, кто бы её ни сохранил. Подписка не присылает начальное состояние, поэтому сначала прочитайте значения через settings(). Подробнее в разделе Стриминг.

Когда вызов не удался

Что происходитЧто вы получитеЧто делать
Неизвестный ключ, неверный тип или форма значения, число вне диапазона400 invalid_requestНичего не сохранено. Исправить изменение, которое названо в сообщении
Настройка — это плечо или служебная строка терминала501 unsupportedПовтор не поможет
Больше 5 записей настроек в секунду на весь терминал429 rate_limitedСнизить темп, см. Лимиты
Терминал не смог прочитать или сохранить настройки503 unavailableПовторить

На этой странице