问题描述
我是一天 24 小时随便什么时间都可以获取,吗还是在特定的时间范围内
解决方案
在 QMT 量化平台中,获取历史 Tick 数据和订单流(Level2 数据)需要结合客户端的数据下载功能和 Python API 来实现。以下是详细的解答:
1. 如何获取 1 年前的历史 Tick 数据?
要获取 1 年前的历史 Tick 数据,您需要分为两步操作:
第一步:在客户端补充数据(关键)
QMT 的历史数据主要依赖本地存储。您必须先在 QMT 客户端的**【数据管理】 -> 【补充数据】**中,选择您需要的市场、品种,勾选“分笔(Tick)”周期,并将时间范围设置为 1 年前,点击下载补充到本地。
第二步:使用 Python API 读取数据
数据下载到本地后,您可以在策略中使用 ContextInfo.get_market_data_ex 或 ContextInfo.get_history_data 函数来获取。
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 使用 get_market_data_ex 获取历史 tick 数据
# 注意:start_time 和 end_time 设置为您需要的1年前的时间范围
tick_data = ContextInfo.get_market_data_ex(
fields=[],
stock_code=['000001.SZ'],
period='tick',
start_time='20221001',
end_time='20221031',
count=-1
)
print(tick_data)
2. 如何获取 7 天订单流数据?
在 QMT 中,“订单流”通常对应的是 Level2 逐笔成交统计或行情快照指标(注意:获取 Level2 数据需要您的账号开通了 Level2 增强版权限)。
同样,您需要先在【数据管理】中下载对应的 Level2 历史数据。然后在代码中使用 get_market_data_ex,将 period 参数设置为 l2transactioncount(Level2 大单统计)或 l2quoteaux(Level2 行情快照指标)。
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取过去7天的 Level2 大单统计数据(订单流替代)
l2_data = ContextInfo.get_market_data_ex(
fields=[],
stock_code=['000001.SZ'],
period='l2transactioncount', # 或 'l2quoteaux'
start_time='20231018', # 7天前的日期
end_time='20231025', # 当前日期
count=-1
)
print(l2_data)
3. 获取数据的时间限制(24小时随时获取吗?)
关于获取数据的时间限制,主要取决于您是读取本地数据还是向服务器请求下载数据:
- 读取本地数据(24小时随时可用):只要您已经通过客户端的【数据管理】将历史 Tick 或 Level2 数据下载到了本地硬盘,您的 Python 策略在一天 24 小时任何时间运行,都可以通过 API 瞬间读取到这些数据,没有任何时间限制。
- 向服务器请求下载数据(建议非交易时段):如果您发现本地没有数据,需要打开【数据管理】向国信/券商服务器请求下载 1 年前的 Tick 数据。虽然理论上服务器全天开放下载,但在盘中交易时间(9:30-15:00),为了保证交易通道的稳定,服务器可能会限制大批量历史数据的下载速度或拒绝大范围请求。因此,强烈建议在盘后(如 16:00 之后)或周末进行大批量历史数据的补充下载。
- 实时行情订阅:如果您是订阅当天的实时 Tick 或订单流(使用
subscribe_quote),则只能在交易时间段内随着交易所的行情推送而获取。
总结:提前在盘后或周末把 1 年前的 Tick 和 7 天的 Level2 数据下载到本地,之后您就可以 24 小时随时在代码中调用分析了。