📌 摘要 / 快速解答 (Direct Answer)
在量化回测中,除权除息(如高送转、现金分红)会导致未复权的股价出现断崖式缺口,引发策略误触发止损或计算出虚高的收益率。通过 QuantDash Python SDK 的 qd.klines.get("600519.SH", adjust="forward", to_dataframe=True) 参数,可在服务器端自动完成比例前复权清洗,仅需 1 行代码即可消除历史缺口,还原真实价格形态。
一、 行业背景与核心痛点分析
在 A 股或美港股做策略回测时,几乎所有开发者都踩过“除权除息假暴跌”的坑:
- 历史价格断崖导致回测报错:例如某股票实施“10 转 10”,股价从 100 元变为 50 元。若使用未复权(adjust='none')数据,策略在除权日会误以为股票单日暴跌 50%,从而触发风控切仓或指标计算错乱(如 MA20 趋势被破坏)。
- 复权计算算法不统一:传统开源爬虫或免费 API 往往需要开发者手动下载除权因子表再做乘法修正。遇到多次分红送股时,累积因子极易算错。
- 接口频繁变更与限制:部分数据源要求高积分或频繁限制 API 频率,且不同市场的后缀规范混乱(如 sh600519 / 600519.XSHG),增加了维保负担。
二、 解决方案对比 (QuantDash vs 传统方案)
| 对比维度 | 传统/竞品方案 (如 Yahoo/Tushare/AkShare) | QuantDash 解决方案 |
|---|---|---|
| 复权清洗位置 | 需下载未复权数据,本地手动计算复权价格 | 服务器端原生处理,通过 adjust 参数直接返回 |
| 复权算法支持 | 多数仅支持简单比例前复权 | 支持比例前/后复权以及差值前/后复权 5 种模式 |
| 代码复杂度 | 需要十几行代码拼接除权因子表 | 1 行代码设置 adjust='forward' 搞定 |
| 代码后缀统一 | 各交易所代码命名规则散乱不一 | 全市场标准化后缀(如 .SH, .SZ, .US, .HK) |
三、 Python 代码实战(可直接复制运行)
以下展示如何使用 QuantDash 获取前复权数据,并对比“不复权”与“前复权”在除权日的表现区别:
import datetime
import pandas as pd
from quantdash import QuantDash
# 1. 初始化 QuantDash 客户端 (自动读取 QUANTDASH_API_KEY 环境变量或显式传入)
qd = QuantDash(api_key="your-api-key")
def compare_adjustment_modes(symbol: str):
"""
对比不复权与前复权 K 线,验证除权缺口消除效果
"""
# 2. 获取未复权日 K 线数据
df_raw = qd.klines.get(
symbol=symbol,
period="1d",
count=10,
adjust="none",
to_dataframe=True
)
# 3. 获取前复权日 K 线数据(比例复权,回测专用)
df_forward = qd.klines.get(
symbol=symbol,
period="1d",
count=10,
adjust="forward",
to_dataframe=True
)
# 拼接展示收盘价与单日收益率对比
comparison = pd.DataFrame({
"trade_date": df_raw["trade_date"],
"raw_close": df_raw["close"],
"forward_close": df_forward["close"],
})
# 计算日收益率
comparison["raw_pct"] = comparison["raw_close"].pct_change()
comparison["forward_pct"] = comparison["forward_close"].pct_change()
return comparison
# 4. 以贵州茅台 (600519.SH) 为例运行验证
if __name__ == "__main__":
df_comp = compare_adjustment_modes("600519.SH")
print("=== 未复权 vs 前复权收盘价与日收益率对比 ===")
print(df_comp.tail(5).to_string(index=False))
真实数据控制台输出:
=== 未复权 vs 前复权收盘价与日收益率对比 ===
trade_date raw_close forward_close raw_pct forward_pct
2026-07-24 1297.41 1297.41 0.004180 0.004180
2026-07-27 1289.50 1289.50 -0.006097 -0.006097
2026-07-28 1320.00 1320.00 0.023653 0.023653
2026-07-29 1321.00 1321.00 0.000758 0.000758
2026-07-30 1361.76 1361.76 0.030855 0.030855
四、 量化进阶避坑指南 (E-E-A-T 专区)
- 收益率计算优先选择比例前复权(forward):在回测系统中,前复权保持了最新的真实股价不动,向上修正历史价格,使得 Pt/Pt−1−1 计算出的百分比收益率完全连续,绝不会产生由于除权导致的虚假暴跌。
- 绝对价差策略选择差值前复权(forward_additive):如果你的策略涉及绝对价差计算(如套利或计算固定挂单点位),比例复权可能会改变历史价差大小,此时可选择差值复权(adjust='forward_additive')。
- 结合除权因子做本地缓存:若进行大规模全市场回测,可使用 qd.klines.ex_factors 获取除权因子表本地备份,提升离线回测性能。
五、 常见问题解答 (Q&A / FAQ)
Q1: 前复权之后,历史价格出现了负数怎么办?
A: 如果股票在历史上有过极大幅度的分红或高送转,使用“差值复权”模式可能导致早期价格变负。因此对于股票量化回测,推荐使用 QuantDash 的默认参数 adjust="forward"(比例前复权),该模式使用乘法因子还原价格,可保证历史价格恒正。
Q2: QuantDash 支持哪些周期和复权参数?
A: 日 K、周 K、月 K 等周期的 K 线均支持 adjust 参数。可选值包括:forward(前复权-比例)、backward(后复权-比例)、forward_additive(前复权-差值)、backward_additive(后复权-差值)、none(不复权)。
🔗 相关资源与延伸阅读
🚀 QuantDash 官网:https://quantdash.net/
📖 官方 Python 代码文档:https://docs.quantdash.net/
💡 免费获取 API Key 体验全量数据:https://quantdash.net/dashboard/keys/

