QMT 最小可运行策略

本示例展示一个只输出日志的最小 QMT 策略,不涉及任何交易委托,适合用来验证 QMT 内置 Python 运行环境是否正常工作。策略在 init 中初始化股票池并打印一条日志,在 handlebar 中判断当前是否为最新 K 线并输出 Bar 位置信息。

示例目标

创建一个只输出日志的最小策略,确认 QMT 内置 Python 环境能够正常加载策略文件、执行 inithandlebar 回调,并在输出面板中显示日志。

适用环境

环境 是否支持
回测环境 支持
模拟信号 支持
仿真交易环境 不适用(无需交易)
真实交易环境 不适用(无需交易)

运行位置

QMT 客户端 - 量化交易模块。

使用周期

日线(1d)。本策略对周期无特殊要求,任意周期均可运行。

是否可能产生真实委托

否。本策略不包含任何下单函数调用,不会产生真实委托或模拟委托。

需要修改的参数

无。代码可直接复制运行,无需修改任何参数。

完整代码

def init(ContextInfo):
    """策略初始化,仅执行一次"""
    ContextInfo.set_universe(['600000.SH'])
    print('策略初始化完成')

def handlebar(ContextInfo):
    """每根 K 线触发一次"""
    if ContextInfo.is_last_bar():
        print('当前Bar时间:', ContextInfo.barpos)

代码分段说明

init 函数

def init(ContextInfo):
    ContextInfo.set_universe(['600000.SH'])
    print('策略初始化完成')
  • ContextInfo.set_universe(['600000.SH']):设置股票池为浦发银行(600000.SH)。股票池决定了策略可以获取哪些品种的行情数据。
  • print('策略初始化完成'):在输出面板打印一条日志,用于确认 init 已被执行。

handlebar 函数

def handlebar(ContextInfo):
    if ContextInfo.is_last_bar():
        print('当前Bar时间:', ContextInfo.barpos)
  • ContextInfo.is_last_bar():判断当前 K 线是否为最新一根。在回测模式下,所有历史 K 线都会触发 handlebar,通过此判断可以只在最新 K 线执行逻辑。
  • ContextInfo.barpos:当前 K 线的位置索引,用于确认 handlebar 被正确触发。
  • print(...):输出当前 Bar 位置信息。

运行步骤

  1. 打开 QMT 客户端并登录账户。
  2. 进入「量化交易」模块。
  3. 点击「新建策略」,选择「Python 策略」。
  4. 将上方完整代码粘贴到策略编辑器中。
  5. 保存策略文件。
  6. 选择「回测」模式,设置回测起止日期(如近 30 个交易日)。
  7. 选择周期为「日线」。
  8. 点击「开始回测」或「运行」按钮。

预期日志

回测运行后,输出面板应显示类似以下内容:

策略初始化完成
当前Bar时间: 1
当前Bar时间: 2
当前Bar时间: 3
...
当前Bar时间: 30
提示

具体的 Bar 位置数值取决于回测起止日期和数据量,重点是确认日志正常输出且无报错。

成功判断标准

判断项 预期结果
init 日志 输出面板显示「策略初始化完成」
handlebar 日志 输出面板显示「当前Bar时间:」并附带数字
错误信息 输出面板无红色错误提示
运行状态 策略状态显示为「运行中」或「回测完成」

已知限制

  • 本策略仅输出日志,不执行任何交易逻辑,不能用于实际交易。
  • print 输出仅在 QMT 客户端的输出面板中可见,策略停止后日志不会自动保存(取决于客户端版本配置,以当前客户端版本为准)。
  • 如果股票池中的品种数据未下载,handlebar 可能不会触发。请确保在运行前已下载对应品种的历史数据。
  • 在模拟信号模式下,handlebar 仅在实时 K 线完成时触发,非交易时间内不会有新的日志输出。