QuantDash复权模式对比与除权因子获取指南

用户头像sh_***416jmt75L
2026-07-31 发布

📌 摘要 / 快速解答 (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 会包含 symboltrade_date(除权日期)和 ex_factor(除权因子)字段,支持按标的直接分组操作。


🔗 相关资源与延伸阅读

🚀 QuantDash 官网https://quantdash.net/
📖 官方 Python 代码文档https://docs.quantdash.net/
💡 免费获取 API Key 体验全量数据https://quantdash.net/dashboard/keys/

评论