Files
sanguo_vnpy_v2/sanguo_qmt_bridge
claude_dev cadc59e6dc feat(bridge): bridge稳定性完善—自动重连miniQMT+health探活+交易日判断
- xt_gateway: _open_session抽离, reconnect(stop旧trader+重建), is_alive(query探活), _retry_with_reconnect(query/order失败重连重试一次)
- query_account/positions/place_order包重试: 断线(异常/None)→reconnect→重试, broker拒单(order_id<=0)不重连
- bridge /health: is_alive真实探活(5s缓存)+断线后台reconnect(不阻塞), 不再假阳性
- trade_calendar: is_trading_day(周一-周五), /order非交易日加warning(120141提示)
- test_gateway15+test_trade_calendar6=NAS21passed, 回归bridge_client/d4a 10绿
- 修复Issue#4运维发现: miniQMT重启后bridge自动重连(无需手动重启)
2026-07-11 07:32:23 +08:00
..

sanguo QMT bridge (D-1 MVP)

Windows 端 FastAPI 服务,封装 xtquant,供 sanguo(NAS) 跨网调 miniQMT 下单/查询。

前提

  1. miniQMT 客户端已登录并保持运行(极简模式即可)
  2. xtquant 可 importminiQMT 安装目录自带,或 pip install xtquant
  3. Python 3.10+

安装

cd C:\sanguo_qmt_bridge   # bridge 代码所在目录
pip install -r requirements.txt

xtquant 来自 miniQMT 安装目录(bin.x64\Lib\site-packages),无需 pip install。 若 import 失败,确认 miniQMT 的 site-packages 在 PYTHONPATH,或 pip install xtquant

配置(环境变量)

变量 说明 默认值
BRIDGE_TOKEN 必填。共享密钥,sanguo 端同值。不设则受保护接口返回 503
MINIQMT_USERDATA miniQMT userdata_mini 路径 D:\国金QMT交易端模拟\userdata_mini
ACCOUNT_ID miniQMT 账户 ID 66639661
BRIDGE_SESSION_ID xtquant session IDint 20260710

设置 BRIDGE_TOKENPowerShell):

# 临时(当前终端)
$env:BRIDGE_TOKEN = "你的随机密钥"

# 永久(系统环境变量)
[Environment]::SetEnvironmentVariable("BRIDGE_TOKEN", "你的随机密钥", "User")

生成密钥:python -c "import secrets; print(secrets.token_urlsafe(32))"

启动

cd C:\sanguo_qmt_bridge
uvicorn bridge:app --host 127.0.0.1 --port 8765

启动日志看到 xtquant 连接成功 即就绪。若 miniQMT 未连上,服务仍运行(/healthdisconnected)。

接口

所有受保护接口需 header X-Bridge-Token: <BRIDGE_TOKEN>/health 豁免。

GET /health(无需鉴权)

{"status": "ok", "miniqmt_connected": true}

POST /order

请求:

{
  "code": "sh600000",
  "action": "buy",
  "price": 10.50,
  "volume": 100,
  "price_type": "limit",
  "reason": "策略信号"
}

成功:

{"ok": true, "order_id": 12345}

失败:

{"ok": false, "error": "报单失败 order_id=-1"}

GET /account

{"ok": true, "cash": 100000.0, "frozen": 0.0, "market_value": 50000.0, "total": 150000.0}

GET /positions

{
  "ok": true,
  "positions": [
    {"code": "sh600000", "volume": 200, "can_use": 200, "avg_price": 10.30}
  ]
}

代码格式

  • 入参(/order):sanguo 格式 sh600000 / sz000001
  • 返回(/positions):sanguo 格式 sh600000 / sz000001
  • bridge 内部自动转 xtquant 格式 600000.SH / 000001.SZ

验证

跑过 check_xtquant.py 确认 xtquant 可用后,启动 bridge 再验证:

# 健康检查(无需 token
curl http://127.0.0.1:8765/health

# 查资金(需 token
curl -H "X-Bridge-Token: 你的密钥" http://127.0.0.1:8765/account

自启(可选,D-2

任务计划程序创建 sanguo-bridgeonstart,命令:

uvicorn bridge:app --host 127.0.0.1 --port 8765

工作目录设为 bridge 代码目录。依赖 miniQMT 客户端已先启动。