问题描述
解决方案
在 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 通常会自动处理好时区问题,直接显示本地时间。