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

JoinQuant 平台前复权系数(Factor)的计算逻辑与派息复权公式

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

问题描述

在只有派息的情况下前复权系数应该怎样计算?

我的理解是在只有派息的情况下前复权系数的计算公式是:

factor = (收盘价 - 每股派息) / 收盘价
以 000607.XSHE 在 2019年7月19派息为例计算:
收盘价价4.8
每10股派0.11
我自己计算的复权系数应该是:(4.8 - 0.011) / 4.8 = 0.997708

但是get_price() API给出来这一天的复权系数却是 0.997921,这个差别远大于浮点数计算误差了。

我哪里计算错了?

notebook中有完整的代码

解决方案

您好!您计算前复权系数的思路大体是正确的,但使用的数据基准价格出现了偏差。导致您手动计算结果与 get_price() API 返回结果不一致的核心原因在于:复权系数的计算基准应该是“股权登记日的收盘价”(即除权除息日的前一交易日收盘价),而不是除权除息日当天的收盘价。

正确的前复权系数计算公式

在仅有现金分红(派息)的情况下,前复权因子的计算公式为:

前复权因子 = (股权登记日收盘价 - 每股派息) / 股权登记日收盘价

您的计算误差分析

在您的计算中:

  • 您使用的收盘价是 4.8,这很可能是除权除息日当天的收盘价,或者是除息后的某个价格。
  • 实际上,根据 API 返回的复权因子 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 中验证

您可以使用 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)**作为分母和被减数,这样就能与系统提供的复权因子完全对上了。