Skip to content

QmtApi 交易接口使用文档

当前发布版本:v1.0.0.0 发布日期:2026-04-24

本产品用于把大智慧公式、脚本调用和 QMT 连接起来。当前版本同时提供:

  • 主程序:QmtApi.exe
  • 大智慧 DLL:QmtApi32.dll / QmtApi64.dll
  • HTTP API:默认 http://127.0.0.1:8080
  • TCP 服务:默认 127.0.0.1:8766
  • GUI 监控窗口:资产、持仓、委托、成交、日志

本文档只描述当前版本支持并可直接使用的功能。

一、系统概览

text
大智慧公式 / QmtApi32.dll / QmtApi64.dll

            ├── TCP 8766 ──> QmtApi.exe ──> XtMiniQmt / QMT

浏览器 / 脚本 ── HTTP 8080 ─┘

组件说明

  1. QmtApi.exe
    • 连接 QMT
    • 启动 TCP / HTTP 服务
    • 启动 GUI
    • 负责配置加载、QMT 路径发现、鉴权
  2. QmtApi32.dll / QmtApi64.dll
    • 给大智慧公式调用
    • 首次调用任意函数时自动初始化
  3. HTTP API
    • 适合脚本、浏览器、自动化服务
  4. GUI
    • 展示账户状态和系统日志

二、启动与首次配置

首次启动流程

  1. 启动 QmtApi.exe
  2. 程序读取 config.yaml
  3. 自动检测 QMT 进程与账号
  4. xt_path 未配置,会提示自动发现并写回配置
  5. 完成鉴权后连接 QMT
  6. 启动 TCP、HTTP 和 GUI

配置文件示例

yaml
server:
  enable_http: 0
  enable_tcp: 1
  http_host: 127.0.0.1
  http_port: 8080
  tcp_host: 127.0.0.1
  tcp_port: 8766
  api_key: ''
  allowed_ips: []
  rate_limit_per_minute: 0
risk:
  max_order_amount: 10000.0
  max_daily_loss: 5000.0
  cancel_counts_as_trade: 0
trade_time_lock:
  enabled: 1
  weekend_locked: 1
  periods:
    - 06:00-15:00
gui:
  enabled: 1
  dark_mode: 0
qmt:
  account_id: "{你的QMT账号}"        # 例如: 资金账号或登录账号
  xt_path: "{你的QMT数据目录}"      # 例如: QMT 安装目录下的 userdata_mini
strategy:
  common_trading:
    enabled: true
  reverse_repo:
    enabled: true
    time: '14:55:00'
    auto_cancel_buy: true
    min_remain_cash: 1000

HTTP 安全配置说明

  • server.api_key
    • 为空:保持兼容开放模式
    • 非空:所有会改变状态的 HTTP 接口都要求请求头 X-API-Key
  • server.allowed_ips
    • 空列表:不限制来源 IP
    • 配置后:只有名单中的 IP 可以调用会改变状态的 HTTP 接口
  • server.rate_limit_per_minute
    • 0:不启用限流
    • >0:对会改变状态的 HTTP 接口按来源 IP 限流

说明:查询接口当前默认不强制鉴权;安全配置只作用于下单、撤单、熔断这类变更状态接口。

三、GUI 监控窗口

GUI 启动后默认展示:

  • 资产资金:账号、总资产、可用资金、持仓市值、连接状态
  • 持仓查询:持仓量、可用量、成本价、市值、浮盈、盈亏比
  • 当日委托:委托号、时间、方向、价格、数量、状态
  • 当日成交:成交号、时间、方向、价格、数量
  • 策略面板:策略配置与策略日志
  • 系统实时日志

GUI 操作

  • 双击“当日委托”中的可撤委托,可发起撤单
  • 菜单“日志”可打开当前运行目录下的 logs/bridge.log
  • 菜单“安装”可把 QmtApi32.dll / QmtApi64.dll 安装到目标目录
  • 菜单“帮助”可查看 接口调用指南.txt

四、DLL 调用规则

基本语法

pascal
"QmtApi@函数名"(参数1, 参数2, ...);
  • 引号里只写 QmtApi@函数名
  • 参数写在引号外的圆括号里
  • 无参数函数写法示例:
pascal
连接状态 := "QmtApi@IsConnected", PRECIS0;

当前股票的含义

DLL 调用时,函数默认针对当前图表中的股票执行。 因此:

  • Buy/BuyE/BuyByCashRatio/BuyByAssetRatio/Sell/SellE 都是对“当前股票”下单
  • GetPosition/GetBuyCount/CancelBuy 也都是针对“当前股票”

返回值约定

  • 成功下单:返回委托股数
  • 条件不满足、次数限制触发、金额不足一手、QMT 拒单、超时:通常返回 0
  • 程序未连接、当前图表没有股票或关键参数异常:可能返回 -1

条件*次数 机制

Buy/BuyE/BuyByCashRatio/BuyByAssetRatio/Sell/SellE 的第 1 个参数不是单纯布尔值,而是“条件乘以次数限制”。

  • <= 0:本次不下单
  • > 0:允许下单,并把该值作为当日该方向的最大次数限制

示例:

pascal
下单结果 := "QmtApi@Buy"(CROSS(MA(C,5), MA(C,10)) * 5, C, 100, 0), PRECIS0;

含义:

  • 金叉成立时才下单
  • 当日最多买入 5 次

委托方式

Buy/Sell 的第 4 参数 {方式},以及 HTTP 的 price_type/pt,都表示委托方式。

说明:系统会按市场自动处理对应委托方式,调用时只需要记住下面这套统一编号。

编号含义
0限价
1最新价
2五档即时
3对手方最优
4本方最优
5卖一
6卖二
7卖三
8卖四
9卖五
10买一
11买二
12买三
13买四
14买五
15沪转限价 / 深即成剩撤

补充说明:

  • 五档即时
    • 按当前盘口对手方前五档价格立即尝试成交
    • 能马上成交的部分会先成交
    • 不能马上成交的剩余部分,由交易所按该市场对应的“五档即时”规则继续处理
    • 对使用者来说,可以把它理解为“尽量按当前盘口快速成交”,比普通限价单更偏向立即成交

提示:即使是市价类方式,当前接口仍要求传一个价格参数,建议传当前价或预期参考价。

五、DLL 函数完整说明

5.1 交易函数

Buy

  • 调用语法:
pascal
"QmtApi@Buy"(条件*次数, 价格, 数量, 方式)
  • 参数说明:
参数序号含义
1条件乘以次数限制
2委托价格
3委托股数
4委托方式
  • 返回值:
    • 成功返回委托股数
    • 条件不满足、次数限制触发、QMT 拒单或超时通常返回 0
    • 程序未连接或不可用时可能返回 -1
  • 刷新行为:直接发起下单,不读取网络查询结果
  • 示例:
pascal
下单结果 := "QmtApi@Buy"(1 * 3, C, 100, 0), PRECIS0;
下单结果 := "QmtApi@Buy"(CROSS(MA(C,5), MA(C,10)) * 5, C, 100, 2), PRECIS0;

BuyE

  • 调用语法:
pascal
"QmtApi@BuyE"(条件*次数, 价格, 金额, 方式)
  • 参数说明:
参数序号含义
1条件乘以次数限制
2委托价格
3委托总金额,单位元
4委托方式
  • 返回值:
    • 成功返回最终下单股数
    • 条件不满足、金额不足一手、QMT 拒单或超时通常返回 0
    • 价格 <= 0.0001 或程序不可用时可能返回 -1
  • 刷新行为:直接发起下单,不读取网络查询结果
  • 当前金额换股规则:
    • 先计算:股数 = floor(金额 / 价格)
    • 普通 A 股:向下取整到 100 股整数倍
    • 688 开头股票:至少 200 股才允许下单,之后仍按 100 股向下取整
    • 最终股数 <= 0:不下单,返回 0
  • 示例:
pascal
下单结果 := "QmtApi@BuyE"(1, C, 10000, 0), PRECIS0;
下单结果 := "QmtApi@BuyE"(CROSS(MA(C,5), MA(C,10)) * 3, C, 20000, 2), PRECIS0;
下单结果 := "QmtApi@BuyE"(1, C, 500, 0), PRECIS0;  // 金额不足一手时通常返回 0

说明:

  • 当前股票若是普通 A 股,价格 10.20、金额 10000,先算得 980 股,再向下取整到 900
  • 当前股票若是 688xxx,价格 8.00、金额 1800,先算得 225 股,最终会按 200 股下单
  • 当前股票若是 688xxx,价格 8.00、金额 1000,先算得 125 股,小于 200 股,返回 0

BuyByCashRatio

  • 调用语法:
pascal
"QmtApi@BuyByCashRatio"(条件*次数, 价格, 比例, 方式)
  • 参数说明:
参数序号含义
1条件乘以次数限制
2委托价格
3按当前可用资金换算的买入比例
4委托方式
  • 返回值:
    • 成功返回最终下单股数
    • 条件不满足、比例换算后金额不足一手、QMT 拒单或超时通常返回 0
    • 价格 <= 0.0001、比例大于 100 或程序不可用时可能返回 -1
  • 刷新行为:直接按当前可用资金换算后下单,不主动等待资产刷新
  • 比例规则:
    • 0 < 比例 <= 1:按小数比例处理,例如 0.2 = 20%
    • 1 < 比例 <= 100:按百分数处理,例如 20 = 20%
    • <= 0:不下单,返回 0
    • > 100:视为参数异常,可能返回 -1
  • 当前换算公式:
    • 目标金额 = 当前可用资金 × 比例
    • 股数 = floor(目标金额 / 价格)
    • 普通 A 股按 100 股向下取整
    • 688 开头代码:至少 200 股才允许下单,之后按 100 股向下取整
  • 示例:
pascal
下单结果 := "QmtApi@BuyByCashRatio"(1, C, 0.2, 2), PRECIS0;
下单结果 := "QmtApi@BuyByCashRatio"(1, C, 20, 2), PRECIS0;   // 20 也表示 20%
下单结果 := "QmtApi@BuyByCashRatio"(CROSS(MA(C,5), MA(C,10)) * 3, C, 0.35, 0), PRECIS0;

说明:

  • 若当前可用资金为 50000,比例 0.2,价格 10.00,则目标金额为 10000,普通 A 股最终下单 1000
  • 若当前可用资金不足,或换算后不足一手,返回 0

BuyByAssetRatio

  • 调用语法:
pascal
"QmtApi@BuyByAssetRatio"(条件*次数, 价格, 比例, 方式)
  • 参数说明:
参数序号含义
1条件乘以次数限制
2委托价格
3按当前总资产换算的买入比例
4委托方式
  • 返回值:
    • 成功返回最终下单股数
    • 条件不满足、比例换算后金额不足一手、QMT 拒单或超时通常返回 0
    • 价格 <= 0.0001、比例大于 100 或程序不可用时可能返回 -1
  • 刷新行为:直接按当前总资产换算后下单,不主动等待资产刷新
  • 比例规则:
    • 0 < 比例 <= 1:按小数比例处理,例如 0.1 = 10%
    • 1 < 比例 <= 100:按百分数处理,例如 10 = 10%
    • <= 0:不下单,返回 0
    • > 100:视为参数异常,可能返回 -1
  • 当前换算公式:
    • 目标金额 = 当前总资产 × 比例
    • 股数 = floor(目标金额 / 价格)
    • 普通 A 股按 100 股向下取整
    • 688 开头代码:至少 200 股才允许下单,之后按 100 股向下取整
  • 示例:
pascal
下单结果 := "QmtApi@BuyByAssetRatio"(1, C, 0.1, 2), PRECIS0;
下单结果 := "QmtApi@BuyByAssetRatio"(1, C, 10, 2), PRECIS0;   // 10 也表示 10%
下单结果 := "QmtApi@BuyByAssetRatio"(CROSS(MA(C,5), MA(C,10)) * 2, C, 0.08, 0), PRECIS0;

说明:

  • 若当前总资产为 200000,比例 0.1,价格 10.00,则目标金额为 20000,普通 A 股最终下单 2000
  • 该函数按总资产换算金额,不会自动截断到可用资金;若换算金额超过实际可用资金,QMT 仍可能拒单
  • 若换算后不足一手,返回 0

Sell

  • 调用语法:
pascal
"QmtApi@Sell"(条件*次数, 价格, 数量, 方式)
  • 参数说明:
参数序号含义
1条件乘以次数限制
2委托价格
3委托股数
4委托方式
  • 返回值:
    • 成功返回委托股数
    • 条件不满足、次数限制触发、QMT 拒单或超时通常返回 0
    • 程序不可用时可能返回 -1
  • 刷新行为:直接发起下单,不读取网络查询结果
  • 示例:
pascal
下单结果 := "QmtApi@Sell"(1 * 3, C, 100, 0), PRECIS0;
下单结果 := "QmtApi@Sell"((盈亏比例 >= 0.05 AND 持仓 > 0) * 2, C, 可卖数量, 2), PRECIS0;

SellE

  • 调用语法:
pascal
"QmtApi@SellE"(条件*次数, 价格, 金额, 方式)
  • 参数说明:
参数序号含义
1条件乘以次数限制
2委托价格
3委托总金额,单位元
4委托方式
  • 返回值:
    • 成功返回最终下单股数
    • 条件不满足、金额不足一手、QMT 拒单或超时通常返回 0
    • 价格 <= 0.0001 或程序不可用时可能返回 -1
  • 刷新行为:直接发起下单,不读取网络查询结果
  • 当前金额换股规则:
    • 先计算:股数 = floor(金额 / 价格)
    • 统一按 100 股向下取整
    • 最终股数 <= 0:不下单,返回 0
  • 示例:
pascal
下单结果 := "QmtApi@SellE"(1, C, 10000, 0), PRECIS0;
下单结果 := "QmtApi@SellE"((盈亏比例 >= 0.05 AND 持仓 > 0) * 2, C, 20000, 2), PRECIS0;
下单结果 := "QmtApi@SellE"(1, C, 500, 0), PRECIS0;  // 金额不足一手时通常返回 0

5.2 刷新 / 查询函数

GetAsset

  • 调用语法:
pascal
"QmtApi@GetAsset"
  • 参数说明:无
  • 返回值:
    • 返回当前总资产
    • 同时发起一次资产刷新
  • 刷新行为:会发起刷新,但返回值不保证已经是最新值
  • 示例:
pascal
总资产 := "QmtApi@GetAsset", PRECIS2;

GetPositions

  • 调用语法:
pascal
"QmtApi@GetPositions"
  • 参数说明:无
  • 返回值:
    • 返回当前股票的持仓量
    • 同时发起一次持仓刷新
  • 刷新行为:会发起刷新,但返回值不保证已经是最新值
  • 示例:
pascal
持仓 := "QmtApi@GetPositions", PRECIS0;

GetHistOrders

  • 调用语法:
pascal
"QmtApi@GetHistOrders"(结束日期, 天数)
  • 参数说明:
参数序号含义
1结束日期,格式如 20260419
2回看天数,默认用法建议显式传入
  • 返回值:
    • 固定返回 1,表示历史委托查询请求已发出
  • 刷新行为:会发起历史查询
  • 限制说明:
    • 该函数只负责发起查询,不会把历史委托逐条返回到公式中
  • 示例:
pascal
"QmtApi@GetHistOrders"(20260419, 30);

GetHistTrades

  • 调用语法:
pascal
"QmtApi@GetHistTrades"(结束日期, 天数)
  • 参数说明:
参数序号含义
1结束日期,格式如 20260419
2回看天数
  • 返回值:
    • 固定返回 1,表示历史成交查询请求已发出
  • 刷新行为:会发起历史查询
  • 限制说明:
    • 该函数只负责发起查询,不会把历史成交逐条返回到公式中
  • 示例:
pascal
"QmtApi@GetHistTrades"(20260419, 30);

5.3 数据读取函数

GetCash

  • 调用语法:
pascal
"QmtApi@GetCash"
  • 参数说明:无
  • 返回值:当前已获取的可用资金
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
可用资金 := "QmtApi@GetCash", PRECIS2;

GetTotalAsset

  • 调用语法:
pascal
"QmtApi@GetTotalAsset"
  • 参数说明:无
  • 返回值:当前已获取的总资产
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
总资产 := "QmtApi@GetTotalAsset", PRECIS2;

GetPosition

  • 调用语法:
pascal
"QmtApi@GetPosition"
  • 参数说明:无
  • 返回值:当前股票的持仓量
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
持仓 := "QmtApi@GetPosition", PRECIS0;

GetPosCanUseVolume

  • 调用语法:
pascal
"QmtApi@GetPosCanUseVolume"
  • 参数说明:无
  • 返回值:当前股票的可卖数量
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
可卖数量 := "QmtApi@GetPosCanUseVolume", PRECIS0;

GetPosOpenPrice

  • 调用语法:
pascal
"QmtApi@GetPosOpenPrice"
  • 参数说明:无
  • 返回值:当前股票的持仓成本价
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
持仓成本 := "QmtApi@GetPosOpenPrice", PRECIS2;

GetPosMarketValue

  • 调用语法:
pascal
"QmtApi@GetPosMarketValue"
  • 参数说明:无
  • 返回值:当前股票的持仓市值
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
持仓市值 := "QmtApi@GetPosMarketValue", PRECIS2;

GetPosProfit

  • 调用语法:
pascal
"QmtApi@GetPosProfit"
  • 参数说明:无
  • 返回值:当前股票的浮盈金额
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
盈亏金额 := "QmtApi@GetPosProfit", PRECIS2;

GetPosProfitRatio

  • 调用语法:
pascal
"QmtApi@GetPosProfitRatio"
  • 参数说明:无
  • 返回值:当前股票的盈亏比例
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
盈亏比例 := "QmtApi@GetPosProfitRatio", PRECIS2;

5.4 委托计数函数

说明:函数名里的 Cancle 是历史拼写,当前版本继续保留这个名称以兼容旧公式。

GetBuyCount

  • 调用语法:
pascal
"QmtApi@GetBuyCount"
  • 参数说明:无
  • 返回值:当前股票的活跃买单数
  • 活跃状态:未报 / 待报 / 已报 / 部成
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
买单数 := "QmtApi@GetBuyCount", PRECIS0;

GetSellCount

  • 调用语法:
pascal
"QmtApi@GetSellCount"
  • 参数说明:无
  • 返回值:当前股票的活跃卖单数
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
卖单数 := "QmtApi@GetSellCount", PRECIS0;

GetCanCancleBuyCount

  • 调用语法:
pascal
"QmtApi@GetCanCancleBuyCount"
  • 参数说明:无
  • 返回值:当前股票的可撤买单数
  • 可撤状态:已报 / 部成
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
可撤买单数 := "QmtApi@GetCanCancleBuyCount", PRECIS0;

GetCanCancleSellCount

  • 调用语法:
pascal
"QmtApi@GetCanCancleSellCount"
  • 参数说明:无
  • 返回值:当前股票的可撤卖单数
  • 刷新行为:只读取当前数据,不主动刷新
  • 示例:
pascal
可撤卖单数 := "QmtApi@GetCanCancleSellCount", PRECIS0;

5.5 撤单函数

CancelBuy

  • 调用语法:
pascal
"QmtApi@CancelBuy"(条件, 序号)
  • 参数说明:
参数序号含义
1撤单条件,<=0 不执行
2撤单序号,0=全部1=第一个2=第二个
  • 返回值:
    • 返回成功发起的撤单数量
  • 刷新行为:直接发起撤单,不主动刷新委托列表
  • 示例:
pascal
"QmtApi@CancelBuy"(1, 0);
"QmtApi@CancelBuy"(1, 1);

CancelSell

  • 调用语法:
pascal
"QmtApi@CancelSell"(条件, 序号)
  • 参数说明:
参数序号含义
1撤单条件,<=0 不执行
2撤单序号,0=全部1=第一个2=第二个
  • 返回值:
    • 返回成功发起的撤单数量
  • 刷新行为:直接发起撤单,不主动刷新委托列表
  • 示例:
pascal
"QmtApi@CancelSell"(盈亏比例 >= 0.05, 0);

5.6 状态与工具函数

IsConnected

  • 调用语法:
pascal
"QmtApi@IsConnected"
  • 参数说明:无
  • 返回值:1=已连接0=未连接
  • 刷新行为:只读当前连接状态
  • 示例:
pascal
连接状态 := "QmtApi@IsConnected", PRECIS0;

savelog

  • 调用语法:
pascal
"QmtApi@savelog"
  • 参数说明:无
  • 返回值:固定返回 1
  • 刷新行为:立即把 DLL 日志刷新到磁盘
  • 示例:
pascal
"QmtApi@savelog";

六、完整公式示例

pascal
连接状态 := "QmtApi@IsConnected", PRECIS0;

"QmtApi@GetAsset";
"QmtApi@GetPositions";

可用资金 := "QmtApi@GetCash", PRECIS2;
总资产   := "QmtApi@GetTotalAsset", PRECIS2;
持仓     := "QmtApi@GetPosition", PRECIS0;
可卖数量 := "QmtApi@GetPosCanUseVolume", PRECIS0;
盈亏比例 := "QmtApi@GetPosProfitRatio", PRECIS2;

// 金叉买入,最多 5 次
买入结果 := "QmtApi@Buy"((CROSS(MA(C,5), MA(C,10)) AND 持仓 = 0) * 5, C, 100, 2), PRECIS0;

// 按金额买入,最多 3 次
金额买入结果 := "QmtApi@BuyE"((CROSS(MA(C,5), MA(C,10)) AND 持仓 = 0) * 3, C, 20000, 2), PRECIS0;

// 按可用资金 20% 买入,最多 2 次
资金比例买入结果 := "QmtApi@BuyByCashRatio"((CROSS(MA(C,5), MA(C,10)) AND 持仓 = 0) * 2, C, 0.2, 2), PRECIS0;

// 按总资产 10% 买入,最多 2 次
资产比例买入结果 := "QmtApi@BuyByAssetRatio"((CROSS(MA(C,5), MA(C,10)) AND 持仓 = 0) * 2, C, 0.1, 2), PRECIS0;

// 止盈时先撤买单,再卖出
"QmtApi@CancelBuy"(盈亏比例 >= 0.05 AND 持仓 > 0, 0);
卖出结果 := "QmtApi@Sell"((盈亏比例 >= 0.05 AND 持仓 > 0) * 2, C, 可卖数量, 2), PRECIS0;

七、HTTP API

需在 config.yaml 中设置 server.enable_http: 1

7.1 查询接口

方法路径说明
GET/api/health系统状态
GET/api/assets资金信息
GET/api/positions持仓列表
GET/api/orders当日委托
GET/api/trades当日成交
GET/api/traded_volume/{code}当日个股成交量统计

/api/health 返回示例

json
{
  "status": "running",
  "xt_connected": true,
  "account_id": "{你的QMT账号}",
  "emergency_stop": false,
  "last_reject_reason": ""
}

/api/traded_volume/{code} 返回示例

json
{
  "stock_code": "600000.SH",
  "buy_volume": 1000,
  "sell_volume": 500,
  "total_volume": 1500
}

7.2 变更状态接口

方法路径说明
POST/api/buy买入
POST/api/sell卖出
POST/api/order通用下单
POST/api/cancel撤单
POST/api/emergency_stop触发熔断
GET/api/buy/{code}/{price}/{volume}兼容型快捷买入
GET/api/buy/{code}/{price}/{volume}/{pt}兼容型快捷买入
GET/api/buy_cash_ratio/{code}/{price}/{ratio}按可用资金比例快捷买入
GET/api/buy_cash_ratio/{code}/{price}/{ratio}/{pt}按可用资金比例快捷买入
GET/api/buy_asset_ratio/{code}/{price}/{ratio}按总资产比例快捷买入
GET/api/buy_asset_ratio/{code}/{price}/{ratio}/{pt}按总资产比例快捷买入
GET/api/sell/{code}/{price}/{volume}兼容型快捷卖出
GET/api/sell/{code}/{price}/{volume}/{pt}兼容型快捷卖出
GET/api/cancel/{order_id}兼容型快捷撤单

7.3 HTTP 安全规则

  • 若配置了 server.api_key,所有变更状态接口都要求:
http
X-API-Key: your_api_key
  • 若配置了 server.allowed_ips,调用方 IP 必须在白名单中
  • 若配置了 server.rate_limit_per_minute,变更状态接口会按来源 IP 限流

7.4 下单请求示例

POST /api/buy

json
{
  "stock_code": "600000.SH",
  "buy_ratio": 0.2,
  "buy_ratio_base": "cash",
  "price": 9.85,
  "price_type": 2,
  "limit_count": 3
}

说明:

  • volumebuy_ratio 二选一
  • buy_ratio_base 支持:
    • cash:按可用资金比例换算
    • asset:按总资产比例换算
  • buy_ratio 支持两种写法:
    • 0.2 表示 20%
    • 20 也表示 20%
  • 当比例换算后不足一手时,请求会直接失败并返回明确原因

按股数买入时也可以继续使用旧写法:

json
{
  "stock_code": "600000.SH",
  "volume": 100,
  "price": 9.85,
  "price_type": 2,
  "limit_count": 3
}

成功返回示例:

json
{
  "order_id": 123456,
  "status": "buy_submitted",
  "reason": "",
  "buy_ratio_base": "cash",
  "buy_ratio_fraction": 0.2,
  "buy_ratio_percent": 20,
  "ratio_base_amount": 50000,
  "resolved_amount": 10000,
  "resolved_volume": 1000
}

POST /api/sell

json
{
  "stock_code": "600000.SH",
  "volume": 100,
  "price": 9.95,
  "price_type": 2,
  "limit_count": 2
}

POST /api/order

json
{
  "stock_code": "600000.SH",
  "order_type": 23,
  "buy_ratio": 0.1,
  "buy_ratio_base": "asset",
  "price": 9.85,
  "price_type": 2,
  "limit_count": 3
}
  • order_type=23:买入
  • order_type=24:卖出
  • order_type=23 时,volumebuy_ratio 也支持二选一
  • order_type=24 时,仍然只支持 volume

POST /api/cancel

json
{
  "order_id": "123456"
}

成功返回示例:

json
{
  "result": true,
  "status": "cancel_request_sent",
  "reason": ""
}

POST /api/emergency_stop

json
{
  "reason": "人工触发"
}

返回示例:

json
{
  "emergency_stop": true,
  "reason": "人工触发",
  "cancelled_orders": ["123456"],
  "failed_orders": [],
  "cancel_requested": 1
}

7.5 兼容型 GET 示例

text
http://127.0.0.1:8080/api/buy/600000/9.85/100/2
http://127.0.0.1:8080/api/buy_cash_ratio/600000/9.85/0.2/2
http://127.0.0.1:8080/api/buy_asset_ratio/600000/9.85/10/2
http://127.0.0.1:8080/api/sell/600000/9.95/100/2
http://127.0.0.1:8080/api/cancel/123456

说明:

  • 6 位股票代码会自动补全为带市场后缀的完整代码
  • 快捷 GET 接口不支持 limit_count
  • 比例快捷接口中,ratio=0.2 表示 20%ratio=20 也表示 20%
  • 需要控制次数限制时,请改用 POST /api/buyPOST /api/sellPOST /api/order

八、常见误区

1. BuyE/SellE 的第 3 参数是金额,不是股数

错误理解:

pascal
"QmtApi@BuyE"(1, C, 100, 0);   // 这不是 100 股,而是 100 元

2. BuyByCashRatio/BuyByAssetRatio 的第 3 参数是比例,不是金额也不是股数

例如:

  • 0.2 表示 20%
  • 20 也表示 20%
  • 1 表示 100%

3. price_type 传的是委托方式,不是 QMT 原始编号

例如:

  • 2 表示“五档即时”
  • 系统会自动转换成对应市场使用的实际方式

4. 部分 Get* 会发起刷新,部分 Get* 只读取当前数据

  • GetAsset/GetPositions:发起刷新,但当前返回值未必已经是最新数据
  • GetCash/GetPosition:不发请求,只读取当前已获取数据

5. GetHistOrders/GetHistTrades 不会把历史数组直接返回给公式

这两个函数只负责发起历史查询,不会把历史明细逐条直接返回到公式里。