跳转至

xtquant_manager.account

XtQuantAccount — 单账号封装

将一个 miniQMT 账号实例的完整生命周期封装在此类中: - 连接管理(connect / disconnect / reconnect) - 所有 xttrader + xtdata 操作(统一超时保护 + 指标记录) - 健康探测(is_healthy / ping) - 指数退避重连

AccountConfig dataclass

AccountConfig(account_id: str, qmt_path: str, account_type: str = 'STOCK', session_id: Optional[int] = None, call_timeout: float = 3.0, download_timeout: float = 30.0, connect_timeout: float = 30.0, reconnect_base_wait: float = 60.0, max_reconnect_attempts: int = 5, ping_stock: str = '000001.SZ', ping_staleness_threshold: float = 300.0)

账号配置

XtQuantAccount

XtQuantAccount(config: AccountConfig)

单账号封装,线程安全。

  • 所有对外 API 调用都通过 _call() 包装,保证超时保护 + 指标记录
  • connect() 失败返回 False,不抛异常
  • reconnect() 使用指数退避,最大等待 1 小时

is_reconnecting property

is_reconnecting: bool

是否正在执行重连流程(含指数退避等待阶段)

connect

connect() -> bool

连接 xttrader + xtdata。 失败返回 False,不抛异常。

disconnect

disconnect() -> None

断开连接,释放资源。若有重连在等待中,立即中断。

reconnect

reconnect() -> bool

指数退避重连。 wait = min(base * 2^attempt, 3600) 返回 True = 重连成功。

is_healthy

is_healthy() -> bool

快速内存检查(无 I/O)。

这里只判断连接对象和连接标志是否处于可用状态,不把 ping 过期当作 “不健康”。ping 过期只表示需要做一次例行真实探测,由 needs_ping() 单独表达,避免健康账号每 5 分钟产生一次误导性的 Level 0 失败日志。

needs_ping

needs_ping() -> bool

是否需要执行例行真实探测。

该方法只用于 HealthMonitor 的正常巡检路径:连接状态仍健康,但距离 上次 ping 成功已经超过阈值,需要主动探测 xtdata + xttrader,及时发现 QMT 进程崩溃、xttrader 隐性断连等问题。

ping

ping() -> bool

真实探测:同时验证 xtdata 和 xttrader 连接。

xtdata 探测:调用 get_full_tick,验证行情接口是否存活。 xttrader 探测:调用 query_stock_asset,验证交易接口是否存活。

QMT 进程重启后 xttrader 会断开,但 xtdata 可能因缓存仍能返回数据。 若仅探测 xtdata 会漏判 xttrader 断连,因此必须同时探测两者。

xttrader 探测失败时主动重置 _connected=False,确保 is_healthy() 下次返回 False,从而触发 HealthMonitor 的 Level 2 重连。

get_full_tick

get_full_tick(stock_codes: List[str]) -> dict

获取全推行情,失败返回空 dict

get_instrument_detail

get_instrument_detail(stock_code: str) -> dict

获取证券信息(含名称),失败返回空 dict。 xtdata 本地缓存调用,无网络开销。

get_market_data_ex

get_market_data_ex(fields: list, stock_list: List[str], period: str = '1d', start_time: str = '20200101', end_time: str = '') -> dict

获取历史行情数据,失败返回空 dict

download_history_data

download_history_data(stock_code: str, period: str = '1d', start_time: str = '20200101', end_time: str = '') -> bool

下载历史数据到本地,成功返回 True

order_stock

order_stock(stock_code: str, order_type: int, order_volume: int, price_type: int, price: float, strategy_name: str = '', order_remark: str = '') -> int

下单(同步),成功返回 order_id (>0),失败返回 -1

cancel_order

cancel_order(order_id: int) -> int

撤单,返回 0=成功,非 0=失败

query_positions

query_positions() -> List[dict]

查询持仓,返回 list[dict](与 easy_qmt_trader.position() 的行数据兼容)。 失败返回空列表。

query_asset

query_asset() -> dict

查询账户资产,失败返回空 dict

query_orders

query_orders() -> List[dict]

查询当日委托,失败返回空列表

query_trades

query_trades() -> List[dict]

查询当日成交,失败返回空列表

register_trade_callback

register_trade_callback(cb) -> None

注册成交回调,连接后触发

register_disconnect_callback

register_disconnect_callback(cb) -> None

注册断连事件回调。 QMT 连接断开时(on_disconnected 触发)立即调用 cb()。 主要供 HealthMonitor 注册以即时重置冷却计时器。

get_state

get_state() -> dict

返回账号状态快照

get_metrics

get_metrics() -> dict

返回指标快照