3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化数据分析中,遇到日线极值(最高价/最低价)与分钟线极值不一致的情况,通常是由以下几个核心原因导致的。针对您提到的 000622.XSHE 在 2022-03-07 的数据差异(日线最低 4.20,分钟线最低 4.64),可以通过以下几个维度进行排查和理解:
在 JoinQuant 的 get_price 函数中,参数 fq(复权选项)的默认值是 'pre'(前复权)。
fq=None),获取真实的交易价格进行对比。测试代码:
# 获取不复权的日线数据
temp0b_real = get_price(['000622.XSHE'], end_date=datetime.datetime(2022, 3, 7, 15, 0, 0),
count=1, frequency='daily', panel=False, fields=['open','close','high','low'], fq=None)
# 获取不复权的分钟线数据
temp0c_real = get_price(['000622.XSHE'], end_date=datetime.datetime(2022, 3, 7, 15, 0, 0),
count=240, frequency='minute', panel=False, fields=['open','close','high','low'], fq=None)
print("真实日线最低价:", temp0b_real['low'].min())
print("真实分钟线最低价:", temp0c_real['low'].min())
注:A股一天只有240根分钟线,您的代码中 count=241 会把前一个交易日(3月4日)的最后一分钟也取进来。
A股的日线最高价和最低价是包含全天所有成交的,包括 9:15 - 9:25 的集合竞价。
low 字段中。您可以单独打印 9:31 的数据进行核对。如果该股票在当天处于停牌状态,或者发生了极端行情:
get_price 默认 skip_paused=False,停牌时会用前一交易日的收盘价进行填充。这个 4.20 极大概率是前复权计算后的价格,而分钟线在提取或复权计算时可能由于精度或复权基准日的差异显示为 4.64。
解决建议:
在编写策略或验证数据时,如果需要严格对齐日内极值,请务必显式指定 fq=None 获取真实价格进行逻辑验证。在实际回测中,建议使用 set_option('use_real_price', True) 开启真实价格撮合模式,以避免复权数据带来的“未来函数”或价格失真问题。