3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!您计算前复权系数的思路大体是正确的,但使用的数据基准价格出现了偏差。导致您手动计算结果与 get_price() API 返回结果不一致的核心原因在于:复权系数的计算基准应该是“股权登记日的收盘价”(即除权除息日的前一交易日收盘价),而不是除权除息日当天的收盘价。
在仅有现金分红(派息)的情况下,前复权因子的计算公式为:
前复权因子 = (股权登记日收盘价 - 每股派息) / 股权登记日收盘价
在您的计算中:
4.8,这很可能是除权除息日当天的收盘价,或者是除息后的某个价格。0.997921 和每股派息 0.011 元,我们可以反推股权登记日(即派息前一个交易日)的收盘价:股权登记日收盘价 = 0.011 / (1 - 0.997921) ≈ 5.29 元也就是说,000607.XSHE 在 2019年7月19日(除权除息日)的前一个交易日(股权登记日),其收盘价应该是 5.29 元左右。使用 5.29 元代入公式:
(5.29 - 0.011) / 5.29 ≈ 0.9979206,四舍五入后正好是 API 返回的 0.997921。
您可以使用 JoinQuant 的 API 获取前一交易日的收盘价(pre_close)来进行验证。示例代码如下:
import jqdata
# 获取除权除息日当天的行情数据,包含前收盘价(即股权登记日收盘价)
df = get_price('000607.XSHE', start_date='2019-07-19', end_date='2019-07-19', fields=['pre_close', 'factor'], fq='pre')
pre_close = df['pre_close'][0] # 获取前收盘价
factor_api = df['factor'][0] # 获取API提供的复权因子
# 每股派息
dividend_per_share = 0.011
# 手动计算复权因子
factor_manual = (pre_close - dividend_per_share) / pre_close
print("股权登记日收盘价 (pre_close):", pre_close)
print("API 返回的复权因子:", factor_api)
print("手动计算的复权因子:", factor_manual)
总结: 计算复权因子时,请务必使用**除权除息日的前一交易日收盘价(pre_close)**作为分母和被减数,这样就能与系统提供的复权因子完全对上了。