3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 量化平台中,关于行情订阅接口(如 subscribe_quote 或带有订阅功能的 get_market_data_ex)中的 start_time 和 end_time 参数,很多开发者会产生与您相同的疑惑。以下是这两个参数的具体作用及原理解析:
在 QMT 的数据机制中,获取数据通常分为两部分:
start_time 和 end_time 控制)。subscribe 动作和 callback 回调控制)。当您调用订阅接口时,start_time 和 end_time 的作用仅仅是指定在建立订阅关系时,需要同步拉取哪一段历史数据到本地缓存或作为函数的直接返回值。它们不会影响未来实时行情的推送逻辑。
您在测试时发现“不管怎么写,都是返回最新产生的一条数据”,这通常是因为您观察的是**回调函数(Callback)**的输出,或者是直接读取了最新状态。
on_quote)只会在市场上有新的 Tick 或新的 K 线(Bar)产生时才会被触发。因此,回调函数里永远只会推送最新产生的那一条数据,这与您设置的 start_time 和 end_time 无关。start_time 和 end_time,这部分历史数据通常是通过函数的直接返回值返回的(例如 get_market_data_ex 会返回一个 DataFrame),或者被静默下载到了本地数据缓存中,供后续使用 get_local_data 等接口读取。结合 QMT 内置的 ContextInfo.get_market_data_ex 接口(该接口集成了获取数据和订阅功能)来看:
# 用法示例
data = ContextInfo.get_market_data_ex(
['open', 'high', 'low', 'close'],
['000300.SH'],
period='1d',
start_time='20230101', # 指定开始时间
end_time='20231001', # 指定结束时间
subscribe=True # 开启订阅
)
填写 start_time 和 end_time:
data。同时,因为开启了订阅,20231001 之后产生的新行情会自动更新到本地。不写(留空) start_time 和 end_time:
在单股订阅时:
start_time 和 end_time 决定了您“过去”需要多少数据(用于初始化策略状态或计算指标)。如果您只需要实时推送的最新数据,这两个参数完全可以留空;如果您需要先获取一段历史数据作为基础,再接收实时更新,就需要正确填写这两个时间参数,并从函数的返回值中获取历史数据部分。