🚀 AI 一键生成 qmt 策略代码

QMT量化平台如何限制handlebar函数的历史K线计算范围?

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

问题描述

期货handlebar 函数运行时,起始时间是否可以自己设定

期货 handlebar 函数运行时,起始时间是否可以自己设定实测第一笔数据从 2025 年 1 月开始的,我使用的周期时 1 分钟,从点击开始运行到获取到最新行情需要很长时间(10 分钟以上),我已经使用了非最后一根 K 直接返回。

def handlebar(C):
if not C.is_last_bar() and not C.do_back_test :
return True

请问是否有什么参数可以设置:如设置开始时间为 2025 年 6 月份,不用每次都从 1 月份把每分钟的 K 线全部运行一次

解决方案

在 QMT 平台中,实盘或模拟运行时(非回测模式),handlebar 函数默认会从当前主图或默认品种加载的第一根 K 线开始逐根运行。对于 1 分钟等小周期,如果本地历史数据较多,确实会导致启动时耗时极长。

虽然代码中的 ContextInfo.startContextInfo.end 只能用于回测模式,但你可以通过 QMT 策略编辑器自带的**“快速计算”**参数来完美解决实盘运行时的起始时间/计算范围问题。

解决方法:设置“快速计算”参数

你可以通过限制策略启动时加载的 K 线数量,来间接设定起始时间。具体操作步骤如下:

  1. 打开 QMT 的**【策略编辑器】**。
  2. 在右侧或下方的面板中找到**【基本信息】**选项卡。
  3. 找到**【快速计算】**参数(默认值为 0)。
    • 默认值 0:表示模型运行会从当前品种的第一根 K 线(即你本地下载的最早数据,如 1 月份)开始计算。
    • 设置为 n(如 1000:表示模型启动时,只从当前最新 K 线往前推 n 根 K 线开始计算

举个例子:
如果你只需要策略在启动时加载最近几天的 1 分钟 K 线来初始化指标(比如计算 60 均线只需要 60 根),你可以将【快速计算】设置为 500。这样策略点击运行后,只会瞬间遍历最近的 500 根 K 线,然后立刻进入最新行情的 tick 驱动状态,耗时不到 1 秒。

补充说明

  1. 关于你代码中的跳过逻辑

    def handlebar(C):
        if not C.is_last_bar() and not C.do_back_test:
            return
    

    这段代码确实能跳过历史 K 线的交易逻辑,但 QMT 底层仍然在逐根遍历并调用 handlebar,所以当 K 线数量达到几万根时,依然会产生显著的耗时。使用“快速计算”是从底层直接截断了输入的数据量,是最高效的做法。

  2. 主图运行时的限制
    如果你是在“行情”界面的主图上直接右键运行策略,策略的计算范围也会受到当前主图 K 线显示数量的影响。你可以通过缩小主图的 K 线显示范围(如按 键缩小),然后再运行策略,也能起到一定的加速作用。但最规范的做法依然是在策略基本信息中设置“快速计算”。