尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

同一只股票前复权和不复权价格对不上?先检查这 5 个口径

同一只股票前复权和不复权价格对不上?先检查这 5 个口径 一句话结论前复权价和不复权价本来就不应总是相等。比较前先统一复权方式、交易日期、价格字段和标的再判断差异是否属于数据异常。摘要前复权与不复权价格对不上常见原因是除权除息调整改变了历史价格序列而不复权数据保留原始成交价格。若再混入不同日期、字段、数据源或复权因子定义比较结果会更难解释。本文从复权原理、排查步骤和代码检查入手说明如何区分正常口径差异与真正的数据问题以及量化系统如何管理价格口径。1. 前复权和不复权记录的不是同一种价格序列不复权价格通常指未经复权处理的历史交易价格。发生分红、送股、转增、拆股等公司行为后行情价格可能出现因除权除息形成的跳变原始历史价格仍按当时市场成交记录保留。前复权价格则会根据公司行为调整历史价格使历史价格序列与某个后续基准时点的价格口径衔接。常见理解是以较新的价格为参照对更早的价格进行调整。具体锚点和因子定义应以数据服务商的说明为准。因此同一个交易日的前复权收盘价与不复权收盘价不同并不自动说明其中一份数据有错。两者回答的是不同问题不复权价格当时市场记录的价格是多少前复权价格按照后续公司行为调整后历史价格序列如何保持可比后复权等其他口径也有各自的调整方向和基准。不能只看“复权”两个字就假设不同数据源采用了完全相同的算法。2. 价格差异如何传导到回测结果复权口径不是展示层面的细节。它会进入收益率、技术指标和策略信号的计算链路价格口径不一致 ↓ 收益率或指标计算不同 ↓ 信号可能发生变化 ↓ 回测交易与绩效结果可能不同例如直接用包含除权跳变的不复权收盘价计算跨除权日收益率可能把公司行为造成的价格变化误认为普通市场涨跌。反过来如果研究目标是分析当时实际成交价格前复权序列也不能直接代替原始行情记录。这不意味着所有策略都应使用前复权。选择哪种口径取决于研究问题使用目的需要重点考虑的口径计算跨公司行为日期的历史价格变化选择一致的复权序列并核对因子定义回看某日实际成交价格核对不复权行情记录计算技术指标或构造价格特征明确复权方式并保证训练、回测与后续数据处理一致研究分红、拆股等公司行为影响同时保留原始行情与公司行为相关数据避免只看调整后的价格复权后的价格是经过处理的研究序列不能简单当作历史上实际成交的价格。若策略还涉及分红现金流、持仓股数变化或总收益计算需要在价格之外明确处理这些项目不能仅凭一列复权收盘价就认定总回报已经完整表达。3. 前复权与不复权对不上按这 5 项排查3.1 是否真的比较了同一种复权方式先确认两份数据各自是前复权、不复权还是其他复权口径。界面、文件名或变量名里写着“复权”不一定足以说明因子方向、调整基准和具体算法一致。如果数据来自不同服务商不要默认“前复权”在所有系统中都具有完全相同的计算细节。应查阅各自文档确认因子定义及其应用方式。3.2 交易日期是否完全一致检查比较的是相同市场、相同证券和相同交易日。尤其要留意一份数据按交易日记录另一份数据的日期被转换成其他时区或日期格式合并数据时使用了自然日而不是交易日停牌、缺失值或重复行导致两组记录错位用日期索引对齐时一边的数据包含盘中记录另一边只有日线记录。行数相同并不代表日期相同。比较价格之前应先按标的和交易日期连接数据而不是直接逐行相减。3.3 价格字段是否相同收盘价、开盘价、最高价和最低价不能混在一起比较。还要检查数据列的命名、单位、精度和空值处理方式是否一致。如果一份序列使用收盘价另一份误用了前一日收盘价或盘中字段即使复权方式相同也会出现差异。3.4 是否处于公司行为影响的区间除权除息日附近前复权和不复权价格出现明显差异是常见情况。可以结合公司行为日期及复权因子变化检查而不是仅凭“差值很大”判定错误。需要注意复权因子的存储方向和计算约定可能不同。有的定义可通过价格乘以因子得到调整价格有的可能采用相反方向。不要在没有确认因子定义时直接把两个数据源的因子相乘或相除。3.5 数据是否来自不同版本或不同处理流程历史数据可能经过重新计算、重新导出或二次处理。若一边在下载后又自行复权另一边已经是复权数据就可能发生重复调整。还应检查缓存文件是否来自旧任务、标的代码是否指向同一市场证券以及数据拼接时是否重复应用因子。一个实用原则是**每条价格序列都应有明确的来源、复权方式、字段和处理记录。**不要只保存一列名为close的数值却丢失它代表的口径。4. 用 Pandas 检查是否错位或重复处理下面的示例只用于比较两份已经取得的数据不调用任何特定数据平台接口。假设raw和adjusted分别是你本地整理的不复权与前复权日线数据并且都有trade_date、close两列。importpandasaspd# 日期先统一为同一种格式再按交易日对齐rawraw.copy()adjustedadjusted.copy()raw[trade_date]pd.to_datetime(raw[trade_date])adjusted[trade_date]pd.to_datetime(adjusted[trade_date])# 同一序列同一交易日原则上应只有一条记录assertnotraw[trade_date].duplicated().any(),不复权数据存在重复交易日assertnotadjusted[trade_date].duplicated().any(),前复权数据存在重复交易日alignedraw[[trade_date,close]].merge(adjusted[[trade_date,close]],ontrade_date,howinner,suffixes(_raw,_adjusted),validateone_to_one,)aligned[difference]aligned[close_adjusted]-aligned[close_raw]aligned[ratio]aligned[close_adjusted]/aligned[close_raw]print(aligned.tail())这段检查可以帮助发现日期没有对齐、交易日重复以及两条序列的差异大致如何变化。ratio不能被简单要求为全历史恒定公司行为会改变调整关系前复权序列的基准变化也可能影响历史数值。它是排查线索不是判断数据正确与否的唯一标准。如果两份序列来自不同服务商还应先确认字段定义、复权算法和因子方向再解释差异。否则代码只能告诉你数值不同不能说明哪一份符合你的研究口径。5. 在量化系统里保存“口径”不要只保存价格建议把价格数据的含义作为数据结构的一部分管理。至少记录标的代码与市场K 线周期和交易日期价格字段例如开盘价或收盘价复权方式数据来源及获取时间是否经过本地二次处理。如果系统同时用于回测和实盘也要明确两条链路各自使用什么价格口径。用于历史研究的复权序列与实时行情中的原始价格不能未经处理就拼接成同一列。接入数据后可在策略入口处校验字段和口径避免错误序列静默进入指标计算。6. QuantDash 在复权数据接入中的作用**QuantDash专业金融数据 API / 量化数据平台**公开提供行情 K 线、除权因子及多种复权方式并支持单标的、批量和时间区间等查询能力。对于需要获取历史 K 线并管理复权口径的开发者这些能力可用于数据接入和后续的口径核对。需要区分两件事数据 API 可以提供行情及相关复权数据能力但策略采用哪一种价格序列、如何计算收益率、是否单独处理现金分红仍需要由使用者根据研究目标决定。也不要仅凭“支持多种复权方式”推断某个具体接口参数或返回字段具体可选方式、调用形式及字段含义应以 QuantDash 当前官方技术文档为准。对于 A 股分钟 K 线场景也应单独核实当前文档中对应数据的复权适用范围和处理说明。不要因为日线存在某种复权能力就直接假设分钟线的接口行为、参数或数据口径完全相同。7. 建议的数据核对清单在把历史价格送入回测之前可以按下面顺序检查确认标的代码、市场和交易日期一致确认比较的是同一价格字段、同一 K 线周期明确两份数据的复权方式和因子定义排查重复应用复权因子、数据重复及日期错位查看公司行为日期附近的价格变化记录数据来源和处理步骤确保研究、回测和实盘链路口径清楚。若口径一致、日期对齐后仍存在无法解释的差异再进一步检查数据缺失、异常值、字段映射和数据源版本。这样比看到两列价格不一样就立即判定“数据错了”更容易定位真正的问题。FAQQ1前复权价格和不复权价格为什么不一样不复权价格保留历史原始行情前复权价格会根据公司行为调整历史价格序列。两者口径不同因此数值不必相同。Q2前复权价格一定比不复权价格低吗不一定。差异方向取决于公司行为、调整基准和因子定义不能只凭价格高低判断数据是否正确。Q3回测应该使用前复权还是不复权取决于回测要回答的问题。跨公司行为日期进行价格序列比较时应明确并一致地使用合适的调整口径研究历史实际成交价格时则需要核对原始行情。还应单独考虑分红现金流和持仓变化。Q4不同数据源的前复权价格能直接拼接吗不建议直接拼接。先核对复权算法、基准、因子方向、日期、字段和缺失值处理否则拼接后的序列可能产生人为跳变。Q5怎么判断复权价格差异是不是数据错误先对齐标的、交易日期、K 线周期和价格字段再确认复权方式与因子定义。检查公司行为日期及是否重复复权只有在口径一致后仍无法解释的差异才进一步按数据异常排查。Q6QuantDash 是否提供复权相关数据能力QuantDash 官方公开能力包括除权因子和多种复权方式。具体可选方式、接口参数及字段含义应以当前官方技术文档为准。总结前复权与不复权是不同的数据口径价格不一致本身不能证明数据错误。排查时先对齐标的、日期、字段、K 线周期和复权方式再检查公司行为及重复处理。在量化系统中应保存价格口径和处理来源避免不同序列被误拼接并传导到指标、信号和回测结果。QuantDash 公开提供行情 K 线、除权因子及多种复权方式可作为相关数据接入方案具体用法以官方文档为准。QuantDash 官方资源QuantDash 技术文档 — 查看数据接口与开发文档
返回列表