워크스페이스
터미널의 창, 탭, 스택, 차트를 읽고, 열고, 변경하고, 닫습니다.
레이아웃을 읽으려면 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는 한 번의 실행 동안만 유효합니다
창과 탭에는 id가, 스택과 차트에는 widget_id가 있습니다. 탭은 창마다
따로 번호가 매겨지므로, 탭은 창과 탭을 함께 지정해 가리킵니다.
모든 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이면 탭을 백그라운드로 엽니다. 새 창은 항상 포커스를 가져갑니다. |
응답은 열린 것의 창, 탭, 위젯 ID를 알려 줍니다. 이 페이지의 모든 명령은 이 형태로 응답합니다.
여러 종목으로 탭 열기
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())첫 프레임은 현재 레이아웃입니다. 그 뒤로는 변경이 있을 때마다 전체 레이아웃이 담긴 프레임이 옵니다. 자세한 내용은 스트리밍에 있습니다.
명령이 실패할 때
| 상황 | 받는 응답 | 대처 방법 |
|---|---|---|
| 종목이 카탈로그에 없거나, ID가 차트의 것임 | 400 invalid_request | 요청을 수정합니다 |
| 그런 창, 탭, 스택이 없음 | 404 not_found | 레이아웃을 다시 읽습니다 |
| 켜져 있는 거래소 중 그 코인을 상장한 곳이 없음 | 404 not_found | 코인을 확인합니다 |
| 터미널 전체 기준으로 초당 워크스페이스 명령이 5개를 넘음 | 429 rate_limited | 속도를 줄입니다. 제한을 참고하십시오 |
| 창이 2초 안에 응답하지 않음 | 503 unavailable | 레이아웃을 확인한 뒤 다시 호출합니다 |
제공되지 않는 것
API는 스택을 탭 사이에서 옮기거나, 열 너비를 바꾸거나, 스크리너 같은 다른 창을 제어하지 않습니다.