3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在使用 miniQMT (xtquant) 获取历史行情时,遇到 1m、5m、1d 正常,但 30m、1h 获取不到(即使 callback 显示成功)是一个非常典型的现象。这通常与 QMT 底层的数据存储和本地 K 线合成机制有关。
tick、1m、1d)。对于 5m、15m、30m、1h 等更大周期的分钟线,QMT 客户端通常是通过底层的 1m 数据在本地实时合成的。当你调用 download_history_data 下载 30m 数据时,底层实际上需要依赖对应时间段的 1m 数据来进行聚合。1m 数据,即使下载 30m 的请求发送成功且回调返回成功,本地也无法正确合成出 30m 的 K 线。因此,随后的 get_market_data 就会返回空数据。'30m'、'1h',注意小写)。要稳定获取 30m 或 1h 的数据,最核心的解决办法是:先确保本地有充足的 1m 基础数据。
在请求 30m 或 1h 数据之前,先显式地下载同一时间段的 1m 数据。这样 QMT 底层引擎就能利用这些 1m 数据成功合成大周期 K 线。
from xtquant import xtdata
import time
stock_code = '000001.SZ'
start_time = '20230101'
end_time = '20231001'
# 1. 先下载基础的 1m 数据,确保本地有合成大周期的原材料
print("开始下载 1m 基础数据...")
xtdata.download_history_data(stock_code, period='1m', start_time=start_time, end_time=end_time)
# 2. (可选) 下载 30m 数据触发本地合成
print("开始下载 30m 数据...")
xtdata.download_history_data(stock_code, period='30m', start_time=start_time, end_time=end_time)
# 等待底层合成与落盘
time.sleep(2)
# 3. 获取 30m 数据
data_30m = xtdata.get_market_data(
field_list=['open', 'high', 'low', 'close', 'volume'],
stock_list=[stock_code],
period='30m',
start_time=start_time,
end_time=end_time,
count=-1
)
print("获取到的 30m 数据:")
print(data_30m)
get_market_data_ex 替代 get_market_dataget_market_data_ex 返回的数据结构(Dict 嵌套 DataFrame)在处理多周期和缺失值时通常比老版本的 get_market_data 更稳定,建议优先使用:
data_1h = xtdata.get_market_data_ex(
field_list=[],
stock_list=[stock_code],
period='1h',
start_time=start_time,
end_time=end_time
)
print(data_1h[stock_code])
1m 数据。