问题描述
data = xtdata.get_market_data_ex(['open','high','low','close','volume'], stock, period='5m', count=60)
上面的代码执行的过程中,最新的结果也只是前面一天的数据,怎样才能获取当天的数据
解决方案
在 QMT(迅投极速交易平台)中,get_market_data_ex 函数是可以获取当天最新行情数据的。如果您发现获取到的数据只到前一天,通常是因为本地没有当天的最新数据。
QMT 的数据获取机制是优先读取本地数据。为了获取当天的实时数据,您需要确保数据已经被下载或正在被实时订阅。
以下是解决该问题的几种方法:
方法一:使用 subscribe_quote 订阅实时行情(推荐用于独立 xtdata 环境)
如果您是在 QMT 外部使用独立的 xtdata 包,get_market_data_ex 默认只会读取本地已有的数据。要获取当天的实时数据,您必须先调用 subscribe_quote 订阅该品种和周期的行情,然后再调用 get_market_data_ex。
from xtquant import xtdata
import time
stock = '000001.SZ'
period = '5m'
# 1. 先订阅实时行情,订阅后后台会自动接收当天的最新数据
xtdata.subscribe_quote(stock, period=period)
# 等待一小段时间让数据接收完成(实际使用中可以根据回调或循环检查)
time.sleep(1)
# 2. 再次获取数据,此时就会包含当天的最新数据
data = xtdata.get_market_data_ex(
['open', 'high', 'low', 'close', 'volume'],
[stock],
period=period,
count=60
)
print(data[stock])
方法二:使用 download_history_data 补充当天数据
如果您只需要在某个时间点获取一次包含当天的数据(例如盘后分析),可以先调用下载函数将数据补充到本地。
from xtquant import xtdata
stock = '000001.SZ'
period = '5m'
# 1. 下载/补充历史数据到本地(包含当天最新数据)
xtdata.download_history_data(stock, period=period)
# 2. 获取数据
data = xtdata.get_market_data_ex(
['open', 'high', 'low', 'close', 'volume'],
[stock],
period=period,
count=60
)
print(data[stock])
方法三:在 QMT 客户端内置策略中使用
如果您是在 QMT 客户端内部的策略编辑器中编写代码,ContextInfo.get_market_data_ex 默认带有一个 subscribe=True 的参数。只要保持默认设置,它会自动订阅并返回包含当天的最新数据。
def handlebar(ContextInfo):
# 确保 subscribe=True(默认即为 True)
data = ContextInfo.get_market_data_ex(
['open', 'high', 'low', 'close', 'volume'],
['000001.SZ'],
period='5m',
count=60,
subscribe=True
)
print(data['000001.SZ'])
总结
- 独立环境 (
xtdata):必须先subscribe_quote或download_history_data,然后再get_market_data_ex。 - QMT 客户端内:直接使用
ContextInfo.get_market_data_ex即可,平台会自动处理订阅。