"""交易上下文:设置读取、资金、模式。""" from __future__ import annotations from typing import Callable, Optional TRADING_MODE_SIM = "simulation" # SimNow CTP TRADING_MODE_LIVE = "live" # 期货公司 CTP def get_trading_mode(get_setting: Callable[[str, str], str]) -> str: m = (get_setting("trading_mode", TRADING_MODE_SIM) or TRADING_MODE_SIM).strip().lower() return m if m in (TRADING_MODE_SIM, TRADING_MODE_LIVE) else TRADING_MODE_SIM def get_sizing_mode(get_setting: Callable[[str, str], str]) -> str: from position_sizing import normalize_sizing_mode return normalize_sizing_mode(get_setting("position_sizing_mode", "risk")) def get_risk_percent(get_setting: Callable[[str, str], str]) -> float: try: return max(0.1, float(get_setting("risk_percent", "1") or 1)) except (TypeError, ValueError): return 1.0 def get_account_capital(conn, get_setting: Callable[[str, str], str]) -> float: """优先 SimNow/期货公司 CTP 权益;未连接时用设置中的参考资金。""" del conn mode = get_trading_mode(get_setting) try: from vnpy_bridge import ctp_status, get_ctp_balance st = ctp_status(mode) if st.get("connected"): bal = get_ctp_balance(mode) if bal and bal > 0: return float(bal) except Exception: pass try: return float(get_setting("live_capital", "0") or 0) except (TypeError, ValueError): return 0.0 def trading_mode_label(get_setting: Callable[[str, str], str]) -> str: return "SimNow 模拟" if get_trading_mode(get_setting) == TRADING_MODE_SIM else "期货公司实盘"