🚀 AI 一键生成 qmt 策略代码

QMT回测报错 frozen importlib._bootstrap 与 KeyboardInterrupt:策略被手动停止 的完美解决办法

qmt | 发布时间: 2026/5/25
以下内容由 EasyQuant 生成。

问题描述

请问frozen importlib._bootstrap怎么解决

QMT 在回测时,在调试另一个回测程序,所以又点击了回测,就发现回测程序不执行第一个回测日期了。重新覆盖安装或者重新下载 python 库都不行。现在只要启动 QMT,点击回测就报以下错误,请问怎么解决?

【2025-03-08 23:58:44.457】 0E:\programs\e 海方舟-量化交易版\python\短线热点回测_20250307_02.py_SH0003009KeyboardInterrupt:策略被手动停止
【2025-03-08 23:58:44.457】 Traceback (most recent call last):

File "", line 966, in _find_and_load

KeyboardInterrupt: 策略被手动停止

【2025-03-08 23:58:44.458】 0E:\programs\e 海方舟-量化交易版\python\短线热点回测_20250307_02.py_SH0003009KeyboardInterrupt:策略被手动停止【2025-03-08 23:58:45.019】 start back test mode

解决方案

在 QMT(如e海方舟-量化交易版)中遇到 frozen importlib._bootstrap 并在 Traceback 中提示 KeyboardInterrupt:策略被手动停止,通常是因为上一次回测未正常结束,导致底层的 Python 进程成为了“僵尸进程”,或者 Python 的模块加载锁(import lock)被死锁。重新覆盖安装客户端有时无法清理掉这些残留的进程和缓存文件。

以下是彻底解决该问题的步骤:

第一步:彻底结束残留的僵尸进程

当你在回测未结束时再次点击回测,QMT 会尝试发送 KeyboardInterrupt 信号中断原策略,但如果原策略正卡在某个 C 库或模块导入阶段,就会导致进程假死。

  1. 关闭当前的 QMT 客户端。
  2. Ctrl + Shift + Esc 打开 Windows 任务管理器
  3. 切换到“详细信息”或“进程”选项卡。
  4. 寻找所有名为 python.exeqmt.exextquant.exe 或与 e海方舟 相关的进程。
  5. 右键点击它们,选择**“结束任务”**。确保没有任何残留的后台 Python 进程。

第二步:清理 Python 编译缓存(pycache

Python 在导入模块时会生成 .pyc 缓存文件。如果进程在导入时被强杀,缓存文件可能会损坏,导致后续启动时一直卡在 _find_and_loadimportlib._bootstrap

  1. 打开你的策略所在目录,根据你的报错信息,路径为:E:\programs\e海方舟-量化交易版\python\
  2. 在该目录下,寻找名为 __pycache__ 的文件夹,将其整个删除
  3. 如果你的策略引用了其他自定义的 .py 文件,也请一并检查并删除它们同级目录下的 __pycache__ 文件夹。

第三步:清理 QMT 临时数据(可选)

如果上述两步仍未解决,可以尝试清理 QMT 的运行缓存:

  1. 进入 QMT 安装目录(E:\programs\e海方舟-量化交易版\)。
  2. 找到 userdatadatadir 文件夹(具体名称视券商版本而定)。
  3. 备份后,删除其中的 templog 文件夹中的临时文件。

第四步:排查策略代码中的死循环

如果每次运行该特定策略(短线热点回测_20250307_02.py)都会复现此问题,请检查代码:

  1. 死循环:检查 inithandlebar 中是否有 while True: 等可能导致死循环的代码,且没有适当的 breaksleep
  2. 海量数据加载:检查是否在 init 中一次性请求了过大的历史数据(如 ContextInfo.get_market_data_ex 请求了全市场 tick 数据),导致内存溢出或长时间阻塞。
  3. 第三方库冲突:如果在策略中 import 了某些需要长时间初始化的第三方库(如某些机器学习库),尽量将其放在文件顶部,避免在 handlebar 中重复导入。

预防建议

  • 不要频繁连点回测:在 QMT 中,如果一个回测正在进行,请先点击“停止”按钮,等待日志输出“策略已停止”后,再启动新的回测。
  • 使用日志调试:在代码的关键节点加上 print,观察策略到底卡在哪一行代码,从而针对性优化。