- 在 qmt_engine.py 中增加权重计算逻辑 - 下单金额公式改为: target_amt = total_equity * weight / total_weighted_slots - 更新 qmt_config.md 添加 weight 字段配置说明 - 保持向后兼容,不配置 weight 时默认为 1
13 KiB
QMT 模块配置说明
本文档详细介绍 NewStock 量化交易系统中 QMT 模块的配置文件格式和所有配置项的含义。
配置文件概述
QMT 模块使用 JSON 格式的配置文件来管理 MiniQMT 终端连接、多个交易策略的执行配置。配置文件通常命名为 config.json,位于项目根目录或 qmt/ 目录下。
完整配置示例
{
"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 数据库编号。不同的应用可以使用不同的数据库来隔离数据,避免键名冲突。
完整示例
"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:账户类型决定了可以交易的品种范围。请根据实际账户类型填写。
多终端配置示例
"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 |
整数 | 是 | - | 策略可用的交易仓位总数 |
weight |
整数 | 否 | 1 | 策略权重,用于按权重分配下单金额 |
execution |
对象 | 是 | - | 策略执行参数,详见下方说明 |
execution 执行参数配置
| 配置项 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
buy_drift_pct |
浮点数 | 是 | - | 买入时价格漂移百分比,用于滑点控制 |
sell_drift_fixed |
浮点数 | 是 | - | 卖出时固定漂移值,用于滑点控制 |
max_adjust_limit |
浮点数 | 是 | - | 最大调仓限制,范围 0-1 表示仓位调整比例上限 |
详细说明
策略顶级配置
qmt_id:策略绑定的 QMT 终端标识符。一个策略只能绑定到一个终端,但多个策略可以绑定到同一个终端。total_slots:策略可用的总仓位数量。例如设为 5 表示策略最多同时持有 5 只股票。此参数用于仓位管理和风险控制。weight:策略权重,用于按权重分配下单金额。当不配置时,默认为 1,表示等权分配。可用于实现策略间的资金分配比例控制。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%。此参数用于控制换手率和交易成本。
权重配置示例
通过 weight 字段可以控制策略间的资金分配比例。下单金额计算公式为:
下单金额 = 可用资金 × 策略权重 / Σ(各策略槽位数 × 权重)
基础配置(无权重,等权分配)
不配置 weight 时,所有策略默认为权重 1,实现等权分配:
"strategies": {
"strategy_a": {
"qmt_id": "gj",
"total_slots": 5,
"execution": {
"buy_drift_pct": 0.005,
"sell_drift_fixed": -0.01,
"max_adjust_limit": 0.05
}
},
"strategy_b": {
"qmt_id": "gj",
"total_slots": 5,
"execution": {
"buy_drift_pct": 0.005,
"sell_drift_fixed": -0.01,
"max_adjust_limit": 0.05
}
}
}
计算示例:A(权重1×5) + B(权重1×5) = 10,可用资金 100 万时,A 和 B 各分配 50 万。
加权配置(按权重分配)
配置 weight 字段可以实现差异化的资金分配:
"strategies": {
"strategy_a": {
"qmt_id": "gj",
"total_slots": 5,
"weight": 1,
"execution": {
"buy_drift_pct": 0.005,
"sell_drift_fixed": -0.01,
"max_adjust_limit": 0.05
}
},
"strategy_b": {
"qmt_id": "gj",
"total_slots": 5,
"weight": 2,
"execution": {
"buy_drift_pct": 0.005,
"sell_drift_fixed": -0.01,
"max_adjust_limit": 0.05
}
}
}
计算示例:A(权重1×5) + B(权重2×5) = 15,可用资金 100 万时,A 分配 100×1/15 ≈ 6.67 万,B 分配 100×2/15 ≈ 13.33 万。
不同槽位数的加权配置
"strategies": {
"conservative_strategy": {
"qmt_id": "gj",
"total_slots": 3,
"weight": 1,
"execution": {
"buy_drift_pct": 0.003,
"sell_drift_fixed": -0.01,
"max_adjust_limit": 0.03
}
},
"aggressive_strategy": {
"qmt_id": "gj",
"total_slots": 8,
"weight": 3,
"execution": {
"buy_drift_pct": 0.008,
"sell_drift_fixed": -0.02,
"max_adjust_limit": 0.1
}
}
}
计算示例:保守策略(权重1×3) + 激进策略(权重3×8) = 27,可用资金 100 万时,保守策略分配 100×1/27 ≈ 3.7 万,激进策略分配 100×3/27 ≈ 11.1 万。
"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:按照以下步骤操作:
- 在 MiniQMT 终端中登录您的账户
- 复制终端的
userdata_mini目录路径 - 在配置文件的
qmt_terminals数组中添加新的终端配置 - 保存配置文件后重启 QMT 模块
Q:如何为一个策略绑定多个终端?
A:当前设计不支持一个策略直接绑定多个终端。如果需要跨券商交易,建议创建多个策略分别绑定不同的终端。
Q:执行参数如何影响交易?
A:
buy_drift_pct越大,买入时允许的价格溢价越高,利于快速成交但可能增加滑点成本sell_drift_fixed越负(绝对值越大),卖出时允许的价格折价越高,利于快速成交但可能减少收益max_adjust_limit越小,换手率越低,交易成本降低但灵活性也降低
Q:Redis 连接失败怎么办?
A:请检查以下几点:
- Redis 服务是否已启动
host和port配置是否正确- 防火墙是否允许 Redis 端口访问
- 如果设置了密码,
password是否正确
Q:如何配置策略的资金分配权重?
A:通过 weight 字段可以配置策略的资金分配权重:
weight是可选字段,不配置时默认为 1- 下单金额计算公式:可用资金 × 策略权重 / Σ(各策略槽位数 × 权重)
- 示例:两个策略,A 的 weight=1、total_slots=5,B 的 weight=2、total_slots=5,则 A 分配 1/(1×5+2×5)=1/15,B 分配 2/(1×5+2×5)=2/15
- 现有配置无需修改即可兼容,不配置 weight 时按等权分配
配置文件路径说明
配置文件应放置在以下位置之一:
| 路径 | 说明 |
|---|---|
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 |
交易状态可视化界面 |