3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!出现这种价格差异的核心原因在于股票的复权(Price Adjustment)机制。
具体原因如下:
在您的代码中,get_price 函数使用了 fq='pre' 参数,这代表前复权。前复权会以当前(或最新)的价格为基准,将历史价格按照历次的分红、送股、配股等情况进行折算。如果该股票在 2020 年 4 月之后发生过分红派息(例如每股派发几分钱的现金红利),那么它在 2020 年的前复权价格就会被重新计算,从而与当时的实际交易价格产生几分钱的偏差(如 14.17 与 14.13 的差异)。
您在同花顺或东方财富等软件上查看到的历史价格,如果没有特意开启“前复权”或“后复权”选项,默认显示的通常是不复权(实际交易价格)。此外,不同软件在处理复权时的基准日或算法细节(如是否包含某些特殊分红)偶尔也会有微小差异。
如果您希望通过聚宽 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)。因为如果不复权,股票在除权除息日会出现价格的“断崖式”下跌,这会导致您的策略计算出错误的收益率或触发错误的买卖信号。