在 Windows 主机运行 bullet-trade server,为本地/远程策略提供行情与交易。核心关注:安全、端口放行、账户配置。
┌─────────────────────────────────────────────────────────────────────────────┐
│ 部署架构图 │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Windows 主机(券商软件所在机器) │
│ │
│ ┌─────────────────────────┐ ┌─────────────────────────────────────────┐ │
│ │ miniQMT 交易端 │ │ bullet-trade server │ │
│ │ │ │ │ │
│ │ ┌─────────────────┐ │ │ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ xtquant SDK │◀───┼────┼──│ QmtData │ │ QmtBroker │ │ │
│ │ │ (行情+交易) │ │ │ │ Adapter │ │ Adapter │ │ │
│ │ └─────────────────┘ │ │ │ (行情服务) │ │ (交易服务) │ │ │
│ │ │ │ └─────────────┘ └─────────────────┘ │ │
│ │ ┌─────────────────┐ │ │ │ │ │ │
│ │ │ userdata_mini │ │ │ └───────┬───────┘ │ │
│ │ │ (数据目录) │ │ │ │ │ │
│ │ └─────────────────┘ │ │ ┌────────────────▼──────────────────┐ │ │
│ │ │ │ │ TCP Server (:58620) │ │ │
│ └─────────────────────────┘ │ │ Token 鉴权 + 心跳保活 │ │ │
│ │ └────────────────┬──────────────────┘ │ │
│ └───────────────────┼─────────────────────┘ │
└─────────────────────────────────────────────────────┼───────────────────────┘
│
┌───────────────────────────────┼───────────────────────┐
│ 网络(局域网/公网) │ │
│ │ │
┌─────────────────▼───────────────┐ ┌──────────▼────────────────────┐ │
│ │ │ │ │
│ 场景 A: 本地/云端策略 │ │ 场景 B: 聚宽模拟盘 │ │
│ (macOS/Linux/Windows) │ │ (joinquant.com) │ │
│ │ │ │ │
│ ┌───────────────────────────┐ │ │ ┌─────────────────────────┐ │ │
│ │ bullet-trade live │ │ │ │ 聚宽策略 │ │ │
│ │ --broker qmt-remote │ │ │ │ (模拟盘/研究环境) │ │ │
│ │ │ │ │ │ │ │ │
│ │ ┌─────────────────────┐ │ │ │ │ ┌───────────────────┐ │ │ │
│ │ │ RemoteQmtBroker │ │ │ │ │ │ helper.py │ │ │ │
│ │ │ RemoteQmtProvider │ │ │ │ │ │ bt.order() │ │ │ │
│ │ │ │ │ │ │ │ │ bt.get_positions()│ │ │ │
│ │ │ TCP ────────────────┼──┼──┼───┼──┼──┼─► TCP │ │ │ │
│ │ └─────────────────────┘ │ │ │ │ └───────────────────┘ │ │ │
│ │ │ │ │ │ │ │ │
│ │ .env: │ │ │ │ configure(): │ │ │
│ │ QMT_SERVER_HOST=... │ │ │ │ host, port, token │ │ │
│ │ QMT_SERVER_PORT=58620 │ │ │ │ account_key │ │ │
│ │ QMT_SERVER_TOKEN=secret │ │ │ │ │ │ │
│ └───────────────────────────┘ │ │ └─────────────────────────┘ │ │
│ │ │ │ │
└─────────────────────────────────┘ └───────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ 数据 & 交易请求流向 │
│ │
│ 客户端 服务端 券商 │
│ │
│ order('000001', 100) │
│ │ │
│ ├─► broker.buy ─────────► QmtBrokerAdapter ─────────► xtquant.order │
│ │ │ │ │
│ │ │◀─────── 委托回报 ────────┤ │
│ │◀────── order_id ◀─────────────┘ │ │
│ ▼ │
│ get_price('000001') miniQMT │
│ │ │ │
│ ├─► data.price ─────────► QmtDataAdapter ◀──── xtdata ────┘ │
│ │ │ │
│ │◀────── DataFrame ◀────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
python -m venv .venv && .venv\Scripts\activate
pip install bullet-trade
bullet-trade server --listen 0.0.0.0 --port 58620 --token secret ^
--enable-data --enable-broker ^
--accounts main=123456:stock ^
--data-path "C:\国金QMT交易端\userdata_mini"关键参数:
--token:必配,防止未授权访问。--accounts:别名=账号:类型,可逗号分隔多账户。--data-path:xtquant 数据目录,保证对应账户已登录。
本地/云端策略 .env 示例:
DEFAULT_BROKER=qmt-remote
QMT_SERVER_HOST=10.0.0.8
QMT_SERVER_PORT=58620
QMT_SERVER_TOKEN=secret
QMT_SERVER_ACCOUNT_KEY=main # 多账户时指定别名运行:
bullet-trade live strategies/demo_strategy.py --broker qmt-remote- 聚宽端到端步骤与 helper 用法请看 trade-support。
- 端口/防火墙:确保监听端口放行,跨网段配置安全组。
- 鉴权失败:token 不一致;必要时加
--allowlist或 TLS。 - 行情缺失:确认 QMT 已登录且有行情权限。
- 多账户:
--accounts a=123456:stock,b=654321:stock,客户端QMT_SERVER_ACCOUNT_KEY=a选择账户。 - 撤单等待:broker.cancel_order 默认按 TRADE_MAX_WAIT_TIME 轮询订单状态,返回 timed_out=true 表示仍未进入终态,可再调用 broker.order_status 确认

