🚀 AI 一键生成 qmt 策略代码

QMT量化平台分钟级别回测模式下获取当前K线时间的正确方法

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

问题描述

在分钟级别回测模式下 如何获取时间, 日线下的函数老是返回错误的时间

index = ContextInfo.barpos
realtimetag = ContextInfo.get_bar_timetag(index)

返回的都是错误时间, 不是设置的回测时间

解决方案

在 QMT 平台的分钟级别回测模式下,您使用 ContextInfo.get_bar_timetag(index) 获取到的其实并不是“错误时间”,而是一个 13位的毫秒级时间戳(例如 1512748800000)。如果您直接打印或使用这个数值,它看起来并不像标准的时间格式。

要获取正确且可读的当前 K 线时间,您需要结合 QMT 提供的内置时间转换函数 timetag_to_datetime(),将毫秒时间戳转换为标准的日期时间字符串。

正确获取并转换时间的方法

请在您的 handlebar 函数中使用以下代码结构:

#coding:gbk

def init(ContextInfo):
    # 设置回测的股票池和时间等
    ContextInfo.set_universe(['000001.SZ'])

def handlebar(ContextInfo):
    # 1. 获取当前 K 线的索引
    index = ContextInfo.barpos
    
    # 2. 获取当前 K 线对应的毫秒级时间戳
    realtimetag = ContextInfo.get_bar_timetag(index)
    
    # 3. 将毫秒时间戳转换为可读的日期时间格式(例如:YYYY-MM-DD HH:MM:SS)
    current_time = timetag_to_datetime(realtimetag, '%Y-%m-%d %H:%M:%S')
    
    # 打印输出查看正确的时间
    print(f"当前K线索引: {index}, 对应时间: {current_time}")

核心函数解析

  1. ContextInfo.get_bar_timetag(index)

    • 释义:获取当前 K 线对应时间的时间戳。
    • 返回number(毫秒级时间戳)。
  2. timetag_to_datetime(timetag, format)

    • 释义:将毫秒时间转换成日期时间字符串。
    • 参数
      • timetag:毫秒时间戳(即上一步获取的 realtimetag)。
      • format:格式字符串,如 '%Y-%m-%d %H:%M:%S''%Y%m%d %H:%M:%S'
    • 返回str(格式化后的时间字符串)。

注意事项

  • 分钟级别回测时,handlebar 会在每一根分钟 K 线上触发一次,转换后的时间即为该分钟 K 线的具体时间。
  • 如果您需要提取特定的小时或分钟进行逻辑判断(例如判断是否在 14:55 之后),可以将 format 设置为 '%H%M%S',然后转换为整数进行比较:
    int_time = int(timetag_to_datetime(realtimetag, '%H%M%S'))
    if int_time >= 145500:
        print("临近尾盘")