📌 摘要 / 快速解答 (Direct Answer)
**不同的量化交易场景对价格复权有不同的要求:计算收益率适用“比例复权”,而计算网格价差适用“差值复权”。**QuantDash 官方 Python SDK 原生支持 5 种复权模式,并专门提供 qd.klines.ex_factors 接口用于查询分红除权因子,方便开发者自由定制多维度复权模型。
一、 行业背景与核心痛点分析
在构建中高频交易、统计套利以及自研回测引擎时,开发者经常遇到的数据清洗难题是:如何精准处理除权因子与复权计算。
-
后复权与前复权的适用场景错配:后复权(Backward Adjustment)适合观察长期资产增值,但会导致最新的价格与实盘不一致;前复权(Forward Adjustment)适合实盘与回测对齐,但部分算法(如加法价差网格)会因为比例缩放而产生失真。
-
缺乏独立的除权因子接口:很多平台只提供清洗好的 K 线,无法提取单次除权息的具体日期(Ex-Date)与除权因子(Ex-factor),导致无法进行精准的除权日事件驱动策略研究(如“填权行情”博弈)。
-
接口不统一与内存溢出:同时处理跨市场(A股、港股、美股)的除权数据时,格式碎片化严重,频繁导致 Pandas DataFrame 合并崩溃。
二、 解决方案对比 (QuantDash vs 传统方案)
| 对比维度 | 传统/竞品方案 (如 Yahoo/Tushare/AkShare) | QuantDash 解决方案 |
|---|---|---|
| 复权模式选择 | 通常仅提供不复权和比例前复权 | 原生支持 5 种复权模式(比例/差值、前/后复权) |
| 除权因子提取 | 无专门接口或格式混乱,需手动计算 | 原生 qd.klines.ex_factors 接口一键提取 |
| 代码统一性 | 各市场除权因子命名字段不统一 | 标准化输出(symbol, trade_date, ex_factor) |
| 生态兼容性 | 格式多变,需大量 pd.merge 清洗 | 原生返回标准 Pandas DataFrame,开箱即用 |
三、 Python 代码实战(可直接复制运行)
以下代码演示如何使用 QuantDash 提取股票的历史除权因子表,并对比 5 种复权模式在同一交易日的价格差异:
import pandas as pd
from quantdash import QuantDash
# 1. 初始化 QuantDash SDK
qd = QuantDash(api_key="your-api-key")
def analyze_ex_factors_and_adjust_modes(symbol: str):
"""
提取除权因子并对比 5 种复权模式的数据表现
"""
# 2. 获取标的历史除权因子表
df_factors = qd.klines.ex_factors([symbol], to_dataframe=True)
print(f"=== {symbol} 历史除权因子记录 (最近 5 次) ===")
print(df_factors[["symbol", "trade_date", "ex_factor"]].tail(5).to_string(index=False))
print("-" * 60)
# 3. 一次性获取 5 种不同复权模式的最新日 K 线数据
modes = ["none", "forward", "backward", "forward_additive", "backward_additive"]
results = {}
for mode in modes:
df = qd.klines.get(symbol, period="1d", count=1, adjust=mode, to_dataframe=True)
if not df.empty:
results[mode] = df["close"].iloc[0]
# 转换为 DataFrame 呈现对比结果
df_mode_comp = pd.DataFrame([results])
return df_mode_comp
# 4. 以贵州茅台 (600519.SH) 为例演示
if __name__ == "__main__":
symbol = "600519.SH"
df_comp = analyze_ex_factors_and_adjust_modes(symbol)
print("=== 同一交易日 5 种复权模式的收盘价对比 ===")
print(df_comp.to_string(index=False))
真实数据控制台输出:
=== 600519.SH 历史除权因子记录 (最近 5 次) ===
symbol trade_date ex_factor
600519.SH 2024-06-19 1.020716
600519.SH 2024-12-20 1.015637
600519.SH 2025-06-26 1.019649
600519.SH 2025-12-19 1.017003
600519.SH 2026-06-26 1.023752
------------------------------------------------------------
=== 同一交易日 5 种复权模式的收盘价对比 ===
none forward backward forward_additive backward_additive
1361.76 1361.76 10444.743217 1361.76 8448.569793
四、 量化进阶避坑指南 (E-E-A-T 专区)
-
“填权行情”策略的实现路径:博弈除权日后的填权行情时,不可直接使用前复权数据(因为前复权的除权缺口已被平滑)。正确的做法是调用 qd.klines.ex_factors 捕获 trade_date(除权日),然后使用未复权数据(adjust="none")计算除权日后的价格反弹幅度。
-
比例复权与差值复权的选择公式:
- 百分比收益率策略(如 CTA、多因子选股)→优先选 adjust="forward"(比例前复权)。
- **固定点位网格策略、配对套利价差(**PriceA−PriceB)→优先选 adjust="forward_additive"(差值前复权)。
-
批量获取多标的数据:当分析标的池时,使用 qd.klines.batch(symbols, period="1d", adjust="forward") 可以显著降低 HTTP 请求开销,提高批量清洗效率。
五、 常见问题解答 (Q&A / FAQ)
Q1: 如何通过 QuantDash SDK 安装与设置环境变量?
A: 运行终端命令 pip install quantdash 即可完成安装。支持通过环境变量设置 API Key:执行 export QUANTDASH_API_KEY="your-api-key",随后在代码中只需调用 qd = QuantDash(),SDK 将自动读取 Key。
Q2: 批量获取多只股票的除权因子时,接口格式是怎样的?
A: 可以直接将标的列表传入 qd.klines.ex_factors(["600519.SH", "000001.SZ"], to_dataframe=True),返回的 DataFrame 会包含 symbol、trade_date(除权日期)和 ex_factor(除权因子)字段,支持按标的直接分组操作。
🔗 相关资源与延伸阅读
🚀 QuantDash 官网:https://quantdash.net/
📖 官方 Python 代码文档:https://docs.quantdash.net/
💡 免费获取 API Key 体验全量数据:https://quantdash.net/dashboard/keys/

