Appearance
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 ─┘组件说明
QmtApi.exe- 连接 QMT
- 启动 TCP / HTTP 服务
- 启动 GUI
- 负责配置加载、QMT 路径发现、鉴权
QmtApi32.dll/QmtApi64.dll- 给大智慧公式调用
- 首次调用任意函数时自动初始化
- HTTP API
- 适合脚本、浏览器、自动化服务
- GUI
- 展示账户状态和系统日志
二、启动与首次配置
首次启动流程
- 启动
QmtApi.exe - 程序读取
config.yaml - 自动检测 QMT 进程与账号
- 若
xt_path未配置,会提示自动发现并写回配置 - 完成鉴权后连接 QMT
- 启动 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: 1000HTTP 安全配置说明
server.api_key- 为空:保持兼容开放模式
- 非空:所有会改变状态的 HTTP 接口都要求请求头
X-API-Key
server.allowed_ips- 空列表:不限制来源 IP
- 配置后:只有名单中的 IP 可以调用会改变状态的 HTTP 接口
server.rate_limit_per_minute0:不启用限流>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; // 金额不足一手时通常返回 05.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
}说明:
volume和buy_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时,volume和buy_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/buy、POST /api/sell或POST /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 不会把历史数组直接返回给公式
这两个函数只负责发起历史查询,不会把历史明细逐条直接返回到公式里。