🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

聚宽 get_price 数据与股票软件价格不一致的原因及解决方法

joinquant | 发布时间: 2026/6/2
以下内容由 EasyQuant 生成。

问题描述

get_price得到的数据为什么和股票软件得到的不同?

用get_price('600697.XSHG', start_date='2020-04-22', end_date='2020-04-23', frequency='daily', fields=None, skip_paused=False, fq='pre', count=None, fill_paused=True)得出两天的数据。

2020年4月22日收盘价在聚宽用get_price得到的是:14.17
而用同花顺和东方财富软件看到收盘价是:14.13

2020年4月23日收盘价在聚宽用get_price得到的是:14.14
而用同花顺和东方财富软件看到收盘价是:14.10

怎么差这么多???

解决方案

您好!出现这种价格差异的核心原因在于股票的复权(Price Adjustment)机制

具体原因如下:

1. 复权参数(fq)的设置

在您的代码中,get_price 函数使用了 fq='pre' 参数,这代表前复权。前复权会以当前(或最新)的价格为基准,将历史价格按照历次的分红、送股、配股等情况进行折算。如果该股票在 2020 年 4 月之后发生过分红派息(例如每股派发几分钱的现金红利),那么它在 2020 年的前复权价格就会被重新计算,从而与当时的实际交易价格产生几分钱的偏差(如 14.17 与 14.13 的差异)。

2. 炒股软件的默认显示

您在同花顺或东方财富等软件上查看到的历史价格,如果没有特意开启“前复权”或“后复权”选项,默认显示的通常是不复权(实际交易价格)。此外,不同软件在处理复权时的基准日或算法细节(如是否包含某些特殊分红)偶尔也会有微小差异。

解决方法

如果您希望通过聚宽 API 获取到与当时市场上完全一致的实际交易价格(不复权价格),您只需要将 get_price 函数中的 fq 参数设置为 None 即可。

修改后的代码如下:

# 将 fq='pre' 修改为 fq=None,获取不复权的实际历史价格
df = get_price('600697.XSHG', 
               start_date='2020-04-22', 
               end_date='2020-04-23', 
               frequency='daily', 
               fields=None, 
               skip_paused=False, 
               fq=None,  # 关键修改点
               count=None, 
               fill_paused=True)
print(df)

量化回测中的建议

虽然不复权价格能让您看到当时的真实报价,但在进行量化回测时,强烈建议使用复权数据(前复权或后复权),或者在策略初始化时开启真实价格模式 set_option('use_real_price', True)。因为如果不复权,股票在除权除息日会出现价格的“断崖式”下跌,这会导致您的策略计算出错误的收益率或触发错误的买卖信号。