策略在 QMT 里跑起来了,下一个问题通常不是"怎么写",而是:持仓变了谁通知我?废单了怎么知道?
这篇只谈工程实现——怎么把数据打出来、异常怎么记、提醒往哪接。不构成投资建议,也不代操盘。
一、先分清两件事,不然会走弯路
很多人把这两件事混成一件,结果在错误的方向上折腾很久:
- 对账:策略进程里打印资金、持仓、委托、成交。这件事 QMT 里就能做,不需要任何外部服务。
- 提醒:把消息推到手机 / 微信。这件事 QMT 编辑器不负责,官方没有"自动推到你手机"这个功能,必须另接一条通道。
所以第一步是问自己:我要的是能查到,还是能收到?前者已经解决了,后者才需要自己接。
二、对账:四个数据源别搞混
QMT 里查数据有主动查和被动收两种,用途不一样:
- 资金、持仓:主动查
get_trade_detail_data,类型传 ACCOUNT / POSITION
- 委托状态:主动查
ORDER;被动收 order_callback
- 成交:主动查
DEAL;被动收 deal_callback
这里有个最容易踩的坑:passorder 的返回值只表示"请求被客户端接受了",不等于成交。日志里有返回、账户里没仓,不是 bug,是机制。废单、部成、拒单都是走委托状态,不是"没返回"。
完整写法见:https://www.kimiquant.cn/problems/qmt-order-callback
字段名这块,持仓仍是 m_dAvailable、m_nVolume 那一套。建议先打印出来和客户端界面对一遍,不要拿字段值当调仓指令。
三、提醒:QMT 没有内置推送,得自己接
PTrade 托管里有现成的 send_qywx(企业微信),QMT 这边常见做法是自己写一个 HTTP 请求或发邮件。
两个提醒:
- 令牌不要写进策略正文。放在同目录的配置文件里,策略读文件。
- 提醒要分级,不要什么都发。只在"状态发生变化"时发(新成交、废单、持仓归零),否则盘中会刷屏,最后你会把通知关掉——那就等于没接。
对账那部分的完整思路:https://www.kimiquant.cn/notes/qmt-monitor-wechat
持仓和资金字段速查:https://www.kimiquant.cn/notes/position-cash
四、一个容易被忽略的前提
电脑关机、断网,本机 QMT 上的策略就停了。
这一条不是让你"再买一台永远开机的服务器"——那是把可用性问题换成另一个可用性问题。真要人不在家也跑,方向是看券商的 PTrade 托管(策略跑在券商侧),而不是自己在家里堆机器。
先把"能查到、能收到"这两件事做扎实,比追求 7×24 更实际。
五、边界说清楚
上面都是接口和工程层面的事。能不能申、额度多少、成交与否,以券商规则和客户端实际回报为准。提醒通道只负责把状态告诉你,不保证你盘中一定看得到(手机没电、网络断了同样收不到)。
不构成投资建议,不代操盘。
(整理这些接口笔记时我常用 WorkBuddy 辅助,贴报错、对着 API 排错比翻手册快,有兴趣可以看看:https://workbuddy.ai/invite?code=66L9RNCT ) |