3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
你的理解基本是正确的!在 JoinQuant(聚宽)平台上,K线数据采用的是后对齐的规则。为了让你更清晰地理解,我们可以从以下几个方面来解析:
根据 JoinQuant API 文档的说明:“我们提供的所有行情K线数据为后对齐,标识K线的时间为数据的结束时间。”
这意味着,标识时间为 11:15:00 的这根1分钟K线,它所包含的实际交易数据时间段是 11:14:00 ~ 11:14:59。
11:14:00 到 11:14:59 这1分钟内的第一笔成交价。11:14:00 到 11:14:59 这1分钟内的最后一笔成交价。在分钟级回测或模拟中,策略(如 handle_data 函数)会在每分钟的第一秒运行。当系统时间走到 11:15:00 时,引擎会触发你的策略。
为了绝对避免未来函数,系统在 11:15:00 这一刻,只能给你提供 11:15:00 之前已经完全确定的数据。因此,此时传入的 data 对象,正是标识为 11:15:00 的这根K线(即 11:14:00 ~ 11:14:59 的数据)。
如果你在 11:15:00 触发的逻辑中读取了 data[security].close,你实际拿到的是 11:14:59 这一刻的最新成交价。这也就是你观察到的“用的是15分钟的收盘价”。
为了加深理解,可以参考文档中关于开盘第一分钟的说明:
在一分钟K线上,没有 09:30 的K线,第一根K线是从 09:31 开始的。标识为 09:31 的一分钟K线,其数据时间为 09:25:00 ~ 09:30:59,这根K线的开盘价就是 09:25 集合竞价产生的价格。
你的理解是对的。因为系统的基础K线粒度是1分钟,且为了防止未来数据泄露,在 11:15:00 这个时间点,系统只能提供刚刚走完的那1分钟(即结束于11:15:00的K线)的统计数据。你看到的“15分钟的收盘价”,实际上代表的是 11:14:59 那个瞬间的市场切片价格。