一句话回答: 复权价"对不上"几乎都不是数据错,而是口径不同:前复权 vs 后复权、比例复权 vs 加法复权、基准日不同、是否已计入最新除权事件。正解不是"哪家绝对准",而是固定一种口径、别中途换、别跨源拼接。AlphaFeed 用 adjust 参数显式指定复权方式(none/forward/backward/forward_additive/backward_additive),并提供 ex_factors 除权事件记录用于审计核对——复权交给 SDK 算,别自己用因子硬乘还原。
复权价是加工结果,同一只票在不同软件/源常常不同,原因是:
adjust 口径 | 含义 | 最新收盘 |
|---|---|---|
| 原始成交价 | 1257.12 |
| 以最新为基准,最新价=原始价 | 1257.12 |
| 以最早为基准,最新价被抬高 | 9641.55 |
| 前复权·加法 | 按加法口径 |
| 后复权·加法 | 按加法口径 |
实测要点:前复权最新价 == 不复权最新价(差异体现在历史段);后复权把最新价抬得很高(含历年分红再投影响)。这正是"对不上"的根源——先确认对方用的是哪种口径。
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 参数最稳。adjust,别中途切换,否则信号错位。ex_factors 是事件审计记录,直接相乘不等于 SDK 的复权价;复权口径复杂,交给 adjust 参数。Q:AKShare 复权价和同花顺对不上,谁错了?
A:多半都没错,是复权口径不同(前/后、比例/加法、是否含最新除权)。统一口径后再比。
Q:AlphaFeed 默认什么复权?
A:不指定 adjust 时为 forward(前复权);回测建议显式写死一种。
Q:怎么做到可复现?
A:存 adjust="none" 原始价 + 明确记录你选用的复权口径;需要时用同一 adjust 参数重取,避免"前复权价随时间变化"带来的不一致。
复权"对不上"的本质是口径差异,不是数据对错。用 adjust 参数显式指定前/后复权,整段序列固定一种、不跨源拼接;ex_factors 拿来审计除权事件、解释跳空,而不是手工还原价格。口径统一了,"哪家准"这个问题自然消失。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。