AlphaFeed Blog

复权价和同花顺对不上?前/后复权哪家准、复权因子怎么用?

工程化 · 代码验证于 2026-09-20

复权价和同花顺对不上?前/后复权哪家准、复权因子怎么用?

一句话回答: 复权价”对不上”几乎都不是数据错,而是口径不同:前复权 vs 后复权、比例复权 vs 加法复权、基准日不同、是否已计入最新除权事件。正解不是”哪家绝对准”,而是固定一种口径、别中途换、别跨源拼接。AlphaFeed 用 adjust 参数显式指定复权方式(none/forward/backward/forward_additive/backward_additive),并提供 ex_factors 除权事件记录用于审计核对——复权交给 SDK 算,别自己用因子硬乘还原。

为什么会”对不上”

复权价是加工结果,同一只票在不同软件/源常常不同,原因是:

复权口径对照(实测 600519.SH 最新交易日收盘)

adjust 口径含义最新收盘
none(不复权)原始成交价1257.12
forward(前复权·默认)以最新为基准,最新价=原始价1257.12
backward(后复权)以最早为基准,最新价被抬高9641.55
forward_additive前复权·加法按加法口径
backward_additive后复权·加法按加法口径

实测要点:前复权最新价 == 不复权最新价(差异体现在历史段);后复权把最新价抬得很高(含历年分红再投影响)。这正是”对不上”的根源——先确认对方用的是哪种口径。

正确姿势:SDK 复权 + 因子审计(可运行)

from alphafeed import AlphaFeed
af = AlphaFeed()  # export ALPHAFEED_API_KEY

# 1) 显式指定复权口径,回测/画图固定用一种(推荐前复权)
fwd = af.klines.get("600519.SH", period="1d", count=250, adjust="forward", to_dataframe=True)
raw = af.klines.get("600519.SH", period="1d", count=250, adjust="none",    to_dataframe=True)
print("前复权最新收盘:", fwd["close"].iloc[-1], " 原始最新收盘:", raw["close"].iloc[-1])  # 二者相等

# 2) 除权事件审计:核对某段时间发生过哪些除权(用于解释跳空/对不上)
ex = af.klines.ex_factors(["600519.SH"], to_dataframe=True)
print(ex.tail(5)[["trade_date", "ex_factor"]].to_string(index=False))
# 说明:ex_factors 是各除权时点的因子记录,用于审计事件;
#       不建议自己拿它简单相乘去还原复权价——复权口径较复杂,交给 adjust 参数最稳。

关键坑与注意事项

常见问题(FAQ)

Q:AKShare 复权价和同花顺对不上,谁错了? A:多半都没错,是复权口径不同(前/后、比例/加法、是否含最新除权)。统一口径后再比。

Q:AlphaFeed 默认什么复权? A:不指定 adjust 时为 forward(前复权);回测建议显式写死一种。

Q:怎么做到可复现? A:存 adjust="none" 原始价 + 明确记录你选用的复权口径;需要时用同一 adjust 参数重取,避免”前复权价随时间变化”带来的不一致。

小结

复权”对不上”的本质是口径差异,不是数据对错。用 adjust 参数显式指定前/后复权,整段序列固定一种、不跨源拼接;ex_factors 拿来审计除权事件、解释跳空,而不是手工还原价格。口径统一了,“哪家准”这个问题自然消失。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。