본문으로 건너뛰기

설정

터미널과 호가창의 설정을 읽고, 변경하고, 변경을 따라갑니다.

설정을 읽으려면 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이 카테고리나 키의 행만.
scope기본값인 global, 또는 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다시 호출합니다

이 페이지의 내용