add launcher

This commit is contained in:
2026-09-17 15:10:46 +08:00
parent 1962d3f8a7
commit a2b0bba05f
10 changed files with 778 additions and 3 deletions

View File

@@ -1,11 +1,13 @@
"""策略单次运行所需的公共上下文对象。"""
import logging
from concurrent.futures import ThreadPoolExecutor
from dataclasses import dataclass
from dataclasses import dataclass, field
from config import AccountConfig, GlobalConfig
from config import AccountConfig, GlobalConfig, HTTP_TIMEOUT
from sdk import Client
from libs.grid_take_profit import GridTrailingTracker
from libs.http import get_json
from libs.order import OrderBook
from libs.watch import DipWatch
@@ -22,3 +24,23 @@ class Runtime:
add_watch: DipWatch
profit_tracker: GridTrailingTracker
executor: ThreadPoolExecutor | None = None
server_inital: dict[str, list[str]] = field(init=False)
def __post_init__(self) -> None:
"""读取服务端初始化数据,失败时保留空证券列表。"""
self.server_inital = {"all_codes": [], "today_pass_codes": []}
try:
url = f"{self.global_cfg.api_host.rstrip('/')}/a/initial"
payload = get_json(url, HTTP_TIMEOUT)
if not isinstance(payload, dict) or str(payload.get("code")) != "0":
raise ValueError(f"服务端初始化响应失败: {payload!r}")
data = payload.get("data")
if not isinstance(data, dict):
raise ValueError("服务端初始化 data 必须为对象")
for key in ("all_codes", "today_pass_codes"):
codes = data.get(key)
if not isinstance(codes, list) or not all(isinstance(code, str) for code in codes):
raise ValueError(f"服务端初始化 {key} 必须为字符串列表")
self.server_inital = data
except Exception:
logging.exception("[初始化] 获取服务端初始化数据失败")