🚀 AI 一键生成 qmt 策略代码

QMT API 实用技巧:timetag_to_datetime 函数详解

qmt | 发布时间: 2025/12/3
以下内容由 EasyQuant 生成。

问题描述

如何将一个毫秒级别的时间戳转换成 'YYYY-MM-DD HH:MM:SS' 格式的字符串?

解决方案

在 QMT (Quantitative Trading) 平台中,可以使用内置的全局函数 timetag_to_datetime 将毫秒级时间戳转换为指定格式的日期字符串。

以下是具体的实现代码和说明:

使用 timetag_to_datetime 函数

该函数专门用于处理 QMT 内部的时间戳转换。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 示例:当前毫秒级时间戳(或者从行情数据中获取的 timetag)
    # 这里以 2023-01-01 08:00:00 为例,时间戳为 1672531200000
    milli_timestamp = 1672531200000
    
    # 使用 timetag_to_datetime 进行转换
    # 参数1: 毫秒时间戳
    # 参数2: 目标格式字符串 '%Y-%m-%d %H:%M:%S'
    time_str = timetag_to_datetime(milli_timestamp, '%Y-%m-%d %H:%M:%S')
    
    # 输出结果
    print("原始时间戳:", milli_timestamp)
    print("转换后时间:", time_str)

def handlebar(ContextInfo):
    # 在盘中运行时,也可以获取当前 K 线的时间戳进行转换
    # 获取当前 K 线索引
    index = ContextInfo.barpos
    # 获取当前 K 线的时间戳
    bar_timetag = ContextInfo.get_bar_timetag(index)
    
    # 转换为字符串
    bar_time_str = timetag_to_datetime(bar_timetag, '%Y-%m-%d %H:%M:%S')
    
    # 打印
    # print(f"当前K线时间: {bar_time_str}")
    pass

函数说明

  • 函数名: timetag_to_datetime(timetag, format)
  • 参数:
    • timetag: (Number) 毫秒级时间戳(例如:1512748800000)。
    • format: (String) 格式化字符串。对应用户需求的格式为 '%Y-%m-%d %H:%M:%S'
  • 返回值: (String) 转换后的日期时间字符串。

常见格式化符号参考

  • %Y: 4位年份 (例如: 2023)
  • %m: 2位月份 (01-12)
  • %d: 2位日期 (01-31)
  • %H: 24小时制小时 (00-23)
  • %M: 分钟 (00-59)
  • %S: 秒 (00-59)

Q&A

Q: 如果我不想使用 QMT 的内置函数,可以用 Python 原生库吗?
A: 可以。你可以使用 Python 标准库 datetime。代码如下:

import datetime
# 注意:需将毫秒除以1000转换为秒
dt_object = datetime.datetime.fromtimestamp(1672531200000 / 1000.0)
time_str = dt_object.strftime('%Y-%m-%d %H:%M:%S')

Q: timetag_to_datetime 函数在回测和实盘中都能使用吗?
A: 是的,该函数是 QMT 平台的通用内置函数,支持回测、模拟交易和实盘交易模式。

Q: 为什么转换出来的时间和预期相差8小时?
A: QMT 的时间戳通常是基于北京时间(UTC+8)处理的,但如果使用 Python 原生 datetime.utcfromtimestamp 可能会得到 UTC 时间。使用 QMT 自带的 timetag_to_datetime 通常会自动处理好时区问题,直接显示本地时间。