# QMT 模块配置说明 本文档详细介绍 NewStock 量化交易系统中 QMT 模块的配置文件格式和所有配置项的含义。 ## 配置文件概述 QMT 模块使用 JSON 格式的配置文件来管理 MiniQMT 终端连接、多个交易策略的执行配置。配置文件通常命名为 `config.json`,位于项目根目录或 `qmt/` 目录下。 ## 完整配置示例 ```json { "redis": { "host": "localhost", "port": 123, "password": "123", "db": 0 }, "qmt_terminals": [ { "qmt_id": "gj", "alias": "国金证券", "path": "D:\\QMT\\国金证券QMT交易端\\userdata_mini", "account_id": "123", "account_type": "STOCK" } ], "strategies": { "ST_Strategy": { "qmt_id": "gj", "total_slots": 5, "execution": { "buy_drift_pct": 0.005, "sell_drift_fixed": -0.01, "max_adjust_limit": 0.05 } }, "XSZ_Strategy": { "qmt_id": "gj", "total_slots": 5, "execution": { "buy_drift_pct": 0.005, "sell_drift_fixed": -0.01, "max_adjust_limit": 0.05 } } } } ``` ## 配置项详解 ### 1. Redis 配置(redis) Redis 用于存储交易状态、缓存策略信号和实时行情数据。 | 配置项 | 类型 | 必选 | 默认值 | 说明 | |--------|------|------|--------|------| | `host` | 字符串 | 是 | - | Redis 服务器地址,支持 IP 地址或域名 | | `port` | 整数 | 是 | - | Redis 服务端口,默认为 6379 | | `password` | 字符串 | 否 | `null` | Redis 访问密码,如无密码则设为空字符串或 `null` | | `db` | 整数 | 否 | 0 | Redis 数据库编号,范围 0-15 | #### 详细说明 - **`host`**:配置 Redis 服务器的网络地址。本地开发环境通常使用 `localhost` 或 `127.0.0.1`;生产环境应使用服务器的实际 IP 地址或域名。 - **`port`**:Redis 服务监听端口,标准端口为 6379。如果您的 Redis 使用非标准端口,请在此处修改。 - **`password`**:Redis 认证密码。如果 Redis 服务器未启用密码认证,此项可设为空字符串 `""` 或 `null`。生产环境建议启用密码认证以保证安全性。 - **`db`**:Redis 数据库编号。不同的应用可以使用不同的数据库来隔离数据,避免键名冲突。 #### 完整示例 ```json "redis": { "host": "192.168.1.100", "port": 6379, "password": "your_password_here", "db": 0 } ``` ### 2. QMT 终端配置(qmt_terminals) `qmt_terminals` 是一个数组,用于配置一个或多个 MiniQMT 交易终端。每个终端代表一个券商账户。 | 配置项 | 类型 | 必选 | 默认值 | 说明 | |--------|------|------|--------|------| | `qmt_id` | 字符串 | 是 | - | 终端唯一标识符,用于在策略中引用此终端 | | `alias` | 字符串 | 否 | `qmt_id` | 终端别名,用于日志和界面显示 | | `path` | 字符串 | 是 | - | MiniQMT 终端的 userdata_mini 目录路径 | | `account_id` | 字符串 | 是 | - | 交易账户 ID,通常为券商账号 | | `account_type` | 字符串 | 是 | - | 账户类型,详见下方的可选值 | #### account_type 可选值 | 账户类型 | 说明 | |----------|------| | `STOCK` | 股票账户(默认) | | `FUTURES` | 期货账户 | | `OPTIONS` | 期权账户 | | `两融` | 融资融券账户 | | `港股通` | 港股通账户 | #### 详细说明 - **`qmt_id`**:终端的唯一标识符,建议使用简短的英文标识,如 `gj`(国金证券)、`yh`(银河证券)。此 ID 用于在策略配置中关联到具体的终端。 - **`alias`**:终端的友好名称,会在日志、仪表盘等界面中显示。建议使用中文券商名称,便于识别。 - **`path`**:MiniQMT 终端的 `userdata_mini` 目录的绝对路径。此目录包含终端的配置文件和交易数据。注意:路径分隔符在 JSON 中需要使用双反斜杠 `\\` 或使用正斜杠 `/`。 - **`account_id`**:您的券商交易账号。请确保此账号与 MiniQMT 终端登录的账号一致。 - **`account_type`**:账户类型决定了可以交易的品种范围。请根据实际账户类型填写。 #### 多终端配置示例 ```json "qmt_terminals": [ { "qmt_id": "gj", "alias": "国金证券", "path": "D:\\QMT\\国金证券QMT交易端\\userdata_mini", "account_id": "12345678", "account_type": "STOCK" }, { "qmt_id": "yh", "alias": "银河证券", "path": "D:\\QMT\\银河证券QMT交易端\\userdata_mini", "account_id": "87654321", "account_type": "两融" } ] ``` ### 3. 策略配置(strategies) `strategies` 是一个对象,用于定义一个或多个交易策略。每个策略有自己的执行参数和关联的 QMT 终端。 #### 策略顶级配置 | 配置项 | 类型 | 必选 | 默认值 | 说明 | |--------|------|------|--------|------| | `qmt_id` | 字符串 | 是 | - | 策略绑定的 QMT 终端 ID,必须在 `qmt_terminals` 中定义 | | `total_slots` | 整数 | 是 | - | 策略可用的交易仓位总数 | | `execution` | 对象 | 是 | - | 策略执行参数,详见下方说明 | #### execution 执行参数配置 | 配置项 | 类型 | 必选 | 默认值 | 说明 | |--------|------|------|--------|------| | `buy_drift_pct` | 浮点数 | 是 | - | 买入时价格漂移百分比,用于滑点控制 | | `sell_drift_fixed` | 浮点数 | 是 | - | 卖出时固定漂移值,用于滑点控制 | | `max_adjust_limit` | 浮点数 | 是 | - | 最大调仓限制,范围 0-1 表示仓位调整比例上限 | #### 详细说明 **策略顶级配置** - **`qmt_id`**:策略绑定的 QMT 终端标识符。一个策略只能绑定到一个终端,但多个策略可以绑定到同一个终端。 - **`total_slots`**:策略可用的总仓位数量。例如设为 5 表示策略最多同时持有 5 只股票。此参数用于仓位管理和风险控制。 - **`execution`**:包含策略的具体执行参数,这些参数控制订单的提交方式。 **执行参数详解** - **`buy_drift_pct`**:买入时允许的价格漂移百分比。例如设置为 `0.005`(0.5%)表示买入时允许以高于基准价 0.5% 的价格成交,用于应对行情快速上涨的情况。计算公式为:买入价 = 基准价 × (1 + buy_drift_pct)。 - **`sell_drift_fixed`**:卖出时的固定漂移值。例如设置为 `-0.01`(-1%)表示卖出时允许以低于基准价 1% 的价格成交,用于应对行情快速下跌的情况。计算公式为:卖出价 = 基准价 × (1 + sell_drift_fixed)。 - **`max_adjust_limit`**:单次调仓的最大比例限制。例如设置为 `0.05`(5%)表示每次调仓不超过总仓位的 5%。此参数用于控制换手率和交易成本。 #### 完整策略配置示例 ```json "strategies": { "ST_Strategy": { "qmt_id": "gj", "total_slots": 5, "execution": { "buy_drift_pct": 0.005, "sell_drift_fixed": -0.01, "max_adjust_limit": 0.05 } }, "XSZ_Strategy": { "qmt_id": "gj", "total_slots": 5, "execution": { "buy_drift_pct": 0.003, "sell_drift_fixed": -0.015, "max_adjust_limit": 0.03 } }, "FUTURES_Strategy": { "qmt_id": "yh", "total_slots": 3, "execution": { "buy_drift_pct": 0.002, "sell_drift_fixed": -0.005, "max_adjust_limit": 0.1 } } } ``` ## 配置验证清单 在启动 QMT 模块之前,请确保完成以下检查: ### Redis 配置检查 - [ ] `host` 指向正确的 Redis 服务器地址 - [ ] `port` 与 Redis 服务端口一致 - [ ] 如果 Redis 启用了密码认证,`password` 已正确设置 - [ ] 确保 Redis 服务器已启动且可访问 ### QMT 终端配置检查 - [ ] 每个 `qmt_id` 在配置文件中唯一 - [ ] `path` 指向正确的 `userdata_mini` 目录 - [ ] `account_id` 与 MiniQMT 终端登录账号一致 - [ ] `account_type` 与实际账户类型匹配 - [ ] 确保 MiniQMT 终端已启动并登录成功 ### 策略配置检查 - [ ] 每个策略的 `qmt_id` 已在 `qmt_terminals` 中定义 - [ ] `total_slots` 设置合理,建议根据资金规模和风险管理需求设置 - [ ] `buy_drift_pct` 设置合理,通常 0.3%-1% 之间 - [ ] `sell_drift_fixed` 设置合理,通常 -0.5% 到 -2% 之间 - [ ] `max_adjust_limit` 设置合理,通常 3%-10% 之间 ## 常见问题 ### Q:如何添加新的券商终端? A:按照以下步骤操作: 1. 在 MiniQMT 终端中登录您的账户 2. 复制终端的 `userdata_mini` 目录路径 3. 在配置文件的 `qmt_terminals` 数组中添加新的终端配置 4. 保存配置文件后重启 QMT 模块 ### Q:如何为一个策略绑定多个终端? A:当前设计不支持一个策略直接绑定多个终端。如果需要跨券商交易,建议创建多个策略分别绑定不同的终端。 ### Q:执行参数如何影响交易? A: - `buy_drift_pct` 越大,买入时允许的价格溢价越高,利于快速成交但可能增加滑点成本 - `sell_drift_fixed` 越负(绝对值越大),卖出时允许的价格折价越高,利于快速成交但可能减少收益 - `max_adjust_limit` 越小,换手率越低,交易成本降低但灵活性也降低 ### Q:Redis 连接失败怎么办? A:请检查以下几点: 1. Redis 服务是否已启动 2. `host` 和 `port` 配置是否正确 3. 防火墙是否允许 Redis 端口访问 4. 如果设置了密码,`password` 是否正确 ## 配置文件路径说明 配置文件应放置在以下位置之一: | 路径 | 说明 | |------|------| | `qmt/config.json` | 推荐位置,专门存放 QMT 模块配置 | | `./config.json` | 项目根目录 | | 环境变量 `QMT_CONFIG_PATH` 指定的路径 | 通过环境变量自定义配置路径 | 系统启动时会按上述顺序查找配置文件,找到第一个存在的配置文件后即停止搜索。 ## 相关文件 | 文件 | 路径 | 说明 | |------|------|------| | QMT 交易引擎 | `qmt/qmt_trader.py` | 负责与 MiniQMT 终端通信 | | QMT 引擎核心 | `qmt/qmt_engine.py` | 策略执行引擎 | | API 服务 | `qmt/api_server.py` | 提供 REST API 接口 | | 仪表盘 | `qmt/dashboard.html` | 交易状态可视化界面 |