3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
你好!你遇到的 get_ticks 与 get_price 数据不一致的问题,根本原因在于数据的“复权”处理机制不同,这并不是 tick 级数据的通病,而是量化数据获取时的常见现象。
get_price 默认返回“前复权”数据
在 JoinQuant 的 API 中,get_price 函数有一个参数 fq(复权选项)。它的默认值是 'pre',即前复权。如果该股票在你查询的日期之后发生了分红派息(除权除息),系统会根据复权因子对历史价格进行向下调整,以保证价格曲线的连续性。你提到 get_price 的数据与 Wind 一致,是因为 Wind 默认展示的通常也是前复权价格。
get_ticks 始终返回“真实(不复权)”数据
Tick 数据记录的是交易所当时真实的撮合快照,它反映的是当时盘面上真实的交易价格,没有任何复权处理。因此,get_ticks 返回的价格(如 53.28)是当天真实的收盘价,而 get_price 返回的价格(如 51.78)是经过分红除权调整后的前复权价格。
如果你希望 get_price 查询出的数据与 get_ticks 完全一致,只需要在调用 get_price 时,将复权参数 fq 设置为 None(即不复权,返回真实价格)即可。
修改后的代码如下:
# 将 fq 设置为 None,获取不复权的真实历史价格
stocks = get_price('601318.XSHG', start_date='2025-05-30', end_date='2025-06-01', fields=['open','close','high','low'], fq=None)
print(stocks)
执行上述代码后,你会发现 stocks 返回的 open、close、high、low 将与 get_ticks 最后一条记录的 open、current、high、low 完全吻合(即 53.37, 53.28, 53.69, 52.85)。
get_price 默认设置),这样可以避免因为除权除息导致的价格跳空,从而引起均线、MACD 等技术指标的失真。initialize 函数中开启真实价格模式:set_option('use_real_price', True),这样引擎会使用真实价格进行撮合,同时根据复权因子自动处理账户的现金分红和送股。