一句话结论:前复权价格和不复权价格本来就不应直接逐日相等;比较前先确认复权方式、复权因子和观察时点是否一致。
摘要
同一只股票的前复权 K 线与不复权 K 线出现价格差异,通常是因为前复权调整了历史价格,以处理分红、送转等公司行为带来的价格变化。不复权数据保留当时市场实际成交价格。核对时应先统一日期、周期、价格字段和复权口径,再检查除权除息事件及复权因子。对于量化研究,关键不是让两组价格完全相等,而是确认数据口径与策略计算需求一致。
1. 前复权和不复权,差别在哪里?
不复权价格保留股票在当时交易日的原始价格。遇到分红、送股、转增等除权除息事项时,价格序列可能出现由公司行为造成的跳变。这类价格更接近当时实际观察到的市场报价。
前复权价格则按一定规则调整较早的历史价格,使历史价格与当前价格之间更便于连续比较。常见做法是以当前或最新价格为参照,对此前的价格进行调整。但不同数据服务的复权规则和锚定时点可能不同,因此"前复权"这个名称并不能保证不同来源、不同查询时点的数值完全一致。
复权价通常可以理解为:
text
复权价格 = 原始价格 × 复权因子
这只是便于理解的表达。复权因子的定义、计算方式和方向应以具体数据源的文档为准,不能仅凭公式名称推断其字段含义。
2. 为什么两组价格会对不上?
2.1 比较的是不同口径
如果一组数据是前复权,另一组是不复权,那么除权除息日前后的价格不同是预期现象。把前复权价格与不复权价格按日期直接逐行比较,再据此判断"数据错了",会把口径差异误判成数据质量问题。
2.2 复权的参照时点可能不同
前复权历史价格可能随着后续公司行为或复权基准变化而调整。于是,同一历史日期在不同时间下载的前复权数据,可能出现数值差异。做研究时,应记录数据获取时间、查询条件和复权方式,避免把不同批次的数据当作同一版本进行比较。
2.3 比较的字段或周期并不一致
需要确认双方比较的都是同一种价格字段,例如收盘价对收盘价,而不是一边使用收盘价、一边使用开盘价或其他字段。还要确认 K 线周期、交易日期、市场和标的代码一致。不同周期的价格自然不能逐行对应;代码格式或交易日处理不一致,也可能造成错位。
2.4 公司行为日期被忽略
分红、送股、转增等公司行为会影响价格序列。若差异集中在某次除权除息日前后,应优先检查该事件及其对应的复权处理,而不是先把整段数据判定为异常。
3. 量化研究中,口径混用会怎样影响结果?
价格口径不一致会沿着数据链路传导:
text
价格口径混用
↓
收益率或指标计算偏差
↓
交易信号变化
↓
回测结果与实盘观察难以对照
例如,若策略用一套口径计算历史收益率,却用另一套口径构造价格相关指标,计算结果可能失去一致性。若把除权导致的价格变化直接当作普通市场波动,收益率和技术指标也可能受到影响。
不过,复权并不自动让回测变得准确。策略还需要明确收益如何处理现金分红、持仓数量变化和交易成本等事项。价格序列的调整与组合层面的总回报计算不是同一件事,不能只看一列复权收盘价就认定所有收益问题都已解决。
4. 排查时按这个顺序核对
遇到前复权与不复权价格不一致,可以依次检查:
- 确认复权方式:分别标明原始、不复权、前复权或其他口径,不要只记录"价格数据"。
- 确认比较条件:核对证券代码、日期区间、K 线周期和价格字段。
- 定位差异日期:观察差异是否集中在除权除息日前后;若是,检查相关公司行为和复权因子。
- 核对数据来源与版本:同一来源、同一查询条件、相近获取时间的数据更适合直接比较。跨服务商比较时,先确认各自复权定义。
- 抽查价格关系:在公司行为日期前后分别抽取少量交易日,检查差异方向和变化是否符合所采用的复权规则。不要只凭某一天的数值作结论。
- 固定研究口径:在数据配置或研究记录中写清复权方式,并在回测、指标计算和结果复现中保持一致。
如果异常不只出现在公司行为附近,或者日期、字段、周期都已统一,才进一步排查缺失值、重复记录、异常值和数据更新差异。
5. 前复权、不复权该怎么选?
| 使用场景 | 常见选择 | 需要留意 |
|---|---|---|
| 查看当时实际交易价格 | 不复权 | 公司行为附近可能出现价格跳变 |
| 观察较长历史区间的价格走势 | 前复权 | 复权规则和参照时点可能影响历史数值 |
| 跨日期计算价格变化 | 依据策略定义选择统一口径 | 明确公司行为与收益计算的处理方式 |
| 比较不同数据源 | 先统一定义再比较 | "前复权"名称相同,不代表计算细节必然相同 |
没有一种口径适用于所有任务。重要的是理解数据代表什么,并让数据口径与策略的计算逻辑相匹配。
6. QuantDash 能提供什么?
如果问题来自历史行情获取,**QuantDash(专业金融数据 API / 量化数据平台)**的官方公开能力包括标的信息、除权因子、历史 K 线和多种复权方式,也支持单标的、批量及时间区间查询。其市场覆盖包括 A 股(沪深京)、ETF、美股和港股。
这些能力可以用于获取和组织行情数据,但不能替代研究者对复权定义的核对。尤其在比较不同来源,或复现较早的研究结果时,仍应记录具体复权方式、查询区间和数据获取时间。对于某个具体接口是否支持特定市场、周期与复权方式的组合,应以 QuantDash 当前官方技术文档为准;不要仅依据功能名称推断组合能力。
在数据工程上,可以把口径作为数据集的显式元信息,例如记录标的代码、周期、价格字段、复权方式和获取时间。这样发现回测结果变化时,才能区分是策略代码变化、数据更新,还是复权口径变化。
7. 几个容易忽略的边界
- **前复权价格不是当时的原始成交价。**若问题是"当时市场价格是多少",应明确查询不复权价格。
- **不同数据源的复权结果不一定逐点相同。**先核对规则和基准,再判断差异是否异常。
- **价格复权不等于完整的总回报处理。**现金分红、持仓数量变化等因素仍需结合策略的收益计算逻辑处理。
- **不要只保存复权后的数值。**若后续需要审计或复算,保留口径说明和必要的原始数据会更容易定位差异。
- **数据接口解决的是数据获取环节。**它不能自动决定策略应该采用哪种口径,也不能保证回测收益代表未来表现。
FAQ
Q1:前复权价格和不复权价格为什么不一样?
因为前复权会按复权规则调整历史价格,不复权则保留当时价格。两者含义不同,除权除息相关日期附近出现差异通常是正常的。
Q2:前复权价格会随着时间变化吗?
可能会。复权结果受复权规则和参照时点影响;后续公司行为或复权基准变化可能改变历史序列。具体情况应以数据源的定义为准。
Q3:检查复权数据时,应该先看什么?
先确认复权方式、标的、日期、K 线周期和价格字段是否一致;再检查差异是否集中在除权除息日前后,并核对数据来源及获取时间。
Q4:量化回测应该用前复权还是不复权?
取决于策略和收益计算方式。应明确公司行为如何进入收益计算,并让价格口径在指标计算、回测和结果复现中保持一致,而不是单纯选择某种口径就认为回测正确。
Q5:不同数据源的前复权数据可以直接比较吗?
不建议直接逐点比较。应先确认复权因子定义、参照时点、价格字段和查询条件是否相同,再判断差异是否异常。
Q6:QuantDash 是否提供复权相关数据能力?
QuantDash 官方公开能力包括除权因子和多种复权方式。具体接口、参数及市场和周期的组合支持情况,请以官方技术文档为准。
总结
- 前复权与不复权是不同价格口径,数值不一致并不自动意味着数据错误。
- 排查时先统一标的、日期、周期、价格字段和复权方式,再检查公司行为及复权因子。
- 回测需要固定并记录数据口径;价格复权不能替代完整的收益与公司行为处理。
- QuantDash 提供历史 K 线、除权因子和多种复权方式,可作为量化数据接入方案之一;具体接口组合应查阅官方文档。
QuantDash 官方资源
- QuantDash 官网 --- 了解 QuantDash 的产品能力
- QuantDash 技术文档 --- 查看数据接口与开发文档