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

Налаштування

Читайте налаштування термінала і стакана, змінюйте їх і стежте за змінами.

Для читання налаштувань потрібне право 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Повторити виклик

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