QMT 日志在哪里?QMT 日志的作用、路径与排查场景完整指南

跑 QMT 策略的人迟早会撞上这几个场面:点了运行,没反应;策略跑起来了,报错看不懂;行情刷不出来;下单没回报。多数人的第一反应是去群里问、去搜帖子,其实答案通常就躺在你本机的一个文件夹里——日志

日志记录关键步骤、变量值和异常信息,可以还原代码的执行路径,告诉你问题究竟出在哪一层。这篇文章按「存在哪里 → 每个文件记什么 → 什么时候该查 → 怎么查能解决问题」的顺序,把 QMT 的日志一次讲透。

一、为什么 QMT 用户绕不开日志

QMT 的策略编辑器有个容易被忽略的特点:点「编译」只做保存,并不检查语法和引用的错误。也就是说,代码里写错了函数名、少了个括号,编译时一片安静,只有点「运行」之后,错误才会出现在日志输出的位置。

这意味着两件事:

  1. 调试 QMT 策略 = 读日志,没有别的更快的路径。
  2. 日志不只是「出错才看」的东西,它是策略开发流程里的常规信息源。

另外,日志也是你和券商技术支持之间最高效的沟通介质。迅投官方文档里有句话说得挺实在:出了问题,技术同事最快的检查方式就是通过日志。你带着日志去提问,和只描述「策略不跑了」去提问,得到的响应速度完全不是一个量级。

二、先分清楚:大 QMT 和 miniQMT 是两套日志

很多人以为「大 QMT」和「miniQMT(极简模式)」是两个独立的软件。实际上它们是同一套客户端、两种启动模式——但它俩的日志分开存放

模式 日志目录
完整终端模式(大 QMT) {安装目录}\userdata\log
极简模式(miniQMT) {安装目录}\userdata_mini\log

所以如果你同时跑两套(比如大 QMT 当交易网关、miniQMT 跑策略引擎),排查前先确认「出问题的是哪个模式」,否则会在错误的目录里翻很久。

顺带说一句:userdatauserdata_mini 是并列关系,不是包含关系,这个是很多人第一次找日志时会踩的坑。

三、日志到底存在哪里

规则很简单:日志在安装目录下的 log 文件夹里,和程序不在同一层。

这里的「安装目录」指的是 bin.x64上一级文件夹。完整结构长这样:

1
2
3
4
5
6
7
{安装目录}/
├── bin.x64/ ← 主程序 + Python 库(快捷方式指向这里)
├── datadir/ ← 下载的行情数据
├── userdata/
│ └── log/ ← 大 QMT(终端模式)日志在这里
└── userdata_mini/
└── log/ ← miniQMT(极简模式)日志在这里

打开日志文件夹的 5 个步骤

  1. 右键桌面上的 QMT 客户端快捷方式 → 选择【打开文件所在位置】(此时会定位到 bin.x64
  2. 点向上箭头,退一级目录
  3. 找到 userdata 文件夹,进入
  4. 双击进入 log 文件夹
  5. 按日期找到对应的 .log 文件

日志文件带日期后缀(如 _20210922),按天切分。排查哪天的问题,就打开对应日期的那份。

四、每个日志文件分别记什么

大 QMT / 投研:userdata\log

文件 记录内容
XtClient_日期.log 客户端常规日志:启动、登录、连接、断线等
XtClient_datasource_日期.log 行情数据日志(投研版收录)
XtClient_Formula_日期.log 策略运行日志:策略报错与异常
XtClient_FormulaOutput.log 策略输出日志print() 打出来的内容落这里
XtClient_PerformanceFile_日期.log 客户端流程节点日志
XtClient_debug_日期.log 客户端 debug 日志

miniQMT(极简模式):userdata_mini\log

文件 记录内容
XtMiniQmt_日期.log 客户端常规日志
XtMiniQuote_日期.log 行情策略模块日志
XtMiniQmt_perform_日期.log 客户端流程节点日志

记住两条就够用了:策略自身的问题看 Formula,你主动打印的内容看 FormulaOutput,客户端和行情链路的问题看 XtClient

五、哪些情况应该去查日志

下面这张表是我自己在排查时用得最多的对照清单,按「症状 → 先看哪个文件」来组织:

你遇到的现象 优先查看 想从里面找什么
策略点运行没反应、提示 run script failed! XtClient_Formula_*.log + 编辑器日志输出面板 Traceback 栈、报错行号、缺失的模块名
策略启动就报 pandas / 第三方库导入失败 XtClient_Formula_*.log 是否为库白名单未开通
回测跑完,结果和预期不符 回测结果分析的【日志输出】+ FormulaOutput 每根 K 线的判断变量、下单条件是否触发
行情不更新、K 线 OHLC 一模一样、订阅不上 XtClient_*.log(投研版再看 datasource 连接状态、订阅数量是否超限
取到的行情/财务数据是空的 XtClient_*.log 配合 datadir 目录 数据是否真的下载到了本地
下单失败、产生废单、没有回报 XtClient_*.log + 策略输出 先自查:价格是否超 2% 价格笼子、数量是否超可用、opType 是否匹配品种
客户端启动异常、盘中掉线 XtClient_*.log 登录与行情/交易通道的断连记录
准备提工单找券商技术支持 上面三个一起打包

一个经验:看日志不要从第一行开始读。用编辑器的搜索功能,直接搜 ERRORTraceback、策略名、股票代码,或者出问题的时间点,效率会高得多。

六、实操:用日志定位问题的四步法

第 1 步:用时间锚点缩小范围

出问题的时间点决定了你该打开哪个文件(按天切分),也决定了你在文件里该搜什么。先在日志里搜时间戳,把上下文圈出来,再往前后各看几十行。

第 2 步:判断错误发生在哪一层

这一步决定了你接下来该改代码还是改配置:

  • 错误在 XtClient_*.log:客户端、连接、行情链路的问题,改代码没用,要查账号权限、订阅数量、网络。
  • 错误在 Formula / FormulaOutput:策略代码的问题,这才是你该动手的地方。

第 3 步:主动打点,而不是猜

日志里信息不够时,不要靠脑补,直接在策略里加输出。推荐的输出格式是「时间 + 策略名 + 关键变量」,方便后续检索:

1
2
3
4
5
# coding:gbk

def handlebar(ContextInfo):
bar_time = ContextInfo.get_bar_timetag(ContextInfo.barpos)
print("myStrategy | check | bar=%s | pos=%s" % (bar_time, ContextInfo.barpos))

这里有个细节值得单独强调:QMT 内置 Python 环境使用 GBK 编码,脚本第一行必须写 # coding:gbk,否则中文字符会乱码或者直接报错。如果你在 print 里带了中文,而日志里全是乱码,先检查这一行。

第 4 步:回测里先验证,再上实盘

同一个策略,回测模式下也能看日志。回测跑完在结果分析里切到【日志输出】标签,就能看到逐根 K 线的执行过程——判断条件为什么没触发、参数算出来是多少,都在这里。先在回测的日志里把逻辑跑通,再考虑实盘,这是成本最低的验证方式。

七、把日志发给别人之前,注意两件事

1. 日志文件是被占用的

QMT 还在运行时,.log 文件被进程占用,直接压缩或传输可能失败,或者拿到的是不完整的内容。两个办法:

  • 把日志文件创建副本,粘贴到别的文件夹,再压缩/传输;
  • 或者干脆先关闭客户端,再处理。

2. 日志会泄露你的账户信息

这一条容易被忽视。日志会原封不动记录你在策略里打印的内容——如果你在调试时图省事,直接把交易查询的返回对象打了出来,那么账号 ID、持仓数量、成本价、可用资金、委托号都会落盘,并且随着你发的工单、截图、聊天记录一起外传。

正确姿势是:需要打印时先做掩码,只保留定位问题所需的字段。

1
2
3
4
5
6
7
8
# coding:gbk

def handlebar(ContextInfo):
account = "test" # 占位,实际运行时由界面配置替换
positions = ContextInfo.get_trade_detail_data(account, "stock", "position")
for pos in positions:
print("pos | code=%s | volume=%s" % (pos.m_strInstrumentID, pos.m_nVolume))
# 不要直接 print(pos):对象里含账号、成本、市值等敏感字段

一句话原则:日志文件对外发送前,先当成一份含敏感数据的文件来对待。

八、速查小结

问题 答案
大 QMT 日志在哪 {安装目录}\userdata\log
miniQMT 日志在哪 {安装目录}\userdata_mini\log
「安装目录」指哪一级 bin.x64 的上一级
策略报错看哪个文件 XtClient_Formula_*.log
自己 print 的内容去哪了 XtClient_FormulaOutput.log 或编辑器日志输出面板
界面里能看到日志吗 能。策略点【运行】后的日志输出面板,以及回测结果分析的【日志输出】标签页
发给技术支持前要做什么 复制副本再压缩(或先关客户端);确认无敏感信息

日志这件事,说到底是一笔投入产出比很高的学习:花十分钟记住路径和几个文件名,之后每一次策略报错、每一次行情异常,你都能比大多数人更快地找到真正的原因,而不是在猜测里绕圈子。

本文内容基于迅投 QMT 官方文档整理,仅供参考。QMT、迅投 为迅投公司或其关联公司的商标;文中路径以实际安装目录为准,不同券商版本的文件清单可能略有差异。


赞赏作者

赞赏码

本页面赞赏完全自愿,属于读者无偿鼓励,不提供任何商品、服务、答疑、内容解锁等对价。您可随意选择是否赞赏以及赞赏金额。

Share