问题描述
data = xtdata.get_market_data_ex(['open','high','low','close','volume'], stock, period='5m', count=60)
上面的代码执行的过程中,最新的结果也只是前面一天的数据,怎样才能获取当天的数据
解决方案
在 QMT(迅投极速量化)平台中,get_market_data_ex 函数完全可以获取当天的最新行情数据。如果您发现获取到的数据只到前一天,通常是因为本地没有当天的最新数据。
get_market_data_ex 的机制是优先从本地读取数据。为了获取当天的实时数据,您需要确保数据已经被下载或正在被实时订阅。以下是具体的解决方法:
1. 如果您使用的是 xtdata(独立 Python 环境)
在独立环境中使用 xtdata 时,必须显式地订阅行情或下载数据,否则只能读到本地已有的历史数据。
方法 A:实时订阅(推荐用于盘中获取最新数据)
在调用 get_market_data_ex 之前,先使用 subscribe_quote 订阅该品种的对应周期。订阅后,后台会自动接收并更新当天的实时数据。
from xtquant import xtdata
import time
stock = '000001.SZ'
period = '5m'
# 1. 订阅行情,确保后台持续接收当天最新数据
xtdata.subscribe_quote(stock, period=period)
# 等待一小段时间让数据接收完成(仅首次订阅时需要)
time.sleep(1)
# 2. 获取数据,此时就能包含当天的最新 K 线了
data = xtdata.get_market_data_ex(
['open', 'high', 'low', 'close', 'volume'],
[stock],
period=period,
count=60
)
print(data[stock])
方法 B:手动下载数据(推荐用于盘后复盘)
如果您不需要实时更新,只是想拉取一下包含当天的最新数据,可以先调用 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])
2. 如果您是在 QMT 客户端内置的策略编辑器中运行
在 QMT 客户端内部编写策略时,使用的是 ContextInfo.get_market_data_ex。该函数有一个参数 subscribe,默认值为 True。
def handlebar(ContextInfo):
stock = '000001.SZ'
# subscribe=True 会自动订阅并获取最新数据
data = ContextInfo.get_market_data_ex(
['open', 'high', 'low', 'close', 'volume'],
[stock],
period='5m',
count=60,
subscribe=True # 确保此参数为 True(默认即为 True)
)
print(data[stock])
注意:
- 如果在客户端内回测,确保在“数据管理”中已经补充了当天的最新数据。
- 如果是实盘/模拟运行模式,只要客户端连接正常,
subscribe=True就会自动获取当天的实时 K 线。