7709-本地复权系数¶
作用¶
根据 0x000f 返回的标签 1 权息事件,生成每个除权事件日期对应的前复权和后复权仿射系数。将这些系数按日期应用到本地保存的不复权 OHLC,可以得到基于权息资料的本地复权结果。
| 项目 | 内容 |
|---|---|
| 主要调用 | client.corporate.adjustment_factors(code, anchor_date=None, *, start_date=None, batch_size=75) |
| 唯一数据源 | 0x000f |
| 单只返回 | AdjustmentFactorResponse |
| 批量返回 | AdjustmentFactorBatch |
| 返回粒度 | 每个除权事件日期一行,不是每个交易日一行 |
直接查询前复权和后复权 K 线,使用 client.bars.get() 的 adjust="qfq" 或 "hfq"。已有不复权 K 线、需要在本地计算或核对复权结果时,使用本接口。
为什么叫“系数”¶
现金分红和配股会产生加法项,复权不是简单的“原价乘以一个因子”,而是完整的仿射变换:
因此文档称为“本地复权系数”,每种复权方式都同时返回 scale 和 offset。Python 方法名 adjustment_factors() 沿用常见的 adjustment factor 叫法,但返回值不能只取 scale。
获取系数¶
from eltdx import TdxClient
with TdxClient(timeout=3) as client:
factors = client.corporate.adjustment_factors("sz000858")
batch = client.corporate.adjustment_factors(["sz000001", "sh600000", "bj920000"])
接口会:
- 保留有日期的标签
1记录; - 按事件日期排序,同一天多条记录保持服务端原始顺序;
- 将同一日期的多条事件复合成一行;
- 计算该日期对应的前复权和后复权
scale + offset。
参数¶
| 参数 | 含义 |
|---|---|
code |
一个证券代码,或证券代码列表 |
anchor_date |
前复权事件截止日期;默认包含全部标签 1 事件,按自然日期比较 |
start_date |
可选事件起点;早于此日期的记录不参与计算,可传上市首个交易日排除预发行记录 |
batch_size |
列表输入时每个权息查询批次的代码数,默认 75,范围 1..200 |
start_date 和 anchor_date 只用于筛选 0x000f 已返回的权息事件,接口不会额外请求 K 线来推断这两个日期。两者都不传时,使用全部有日期的标签 1 事件。验证或应用一段完整日 K 时,可以从已有 K 线中传入首、末交易日,既排除上市前记录,也避免把晚于该 K 线区间的事件计入前复权:
start_date = raw.bars[0].time.date()
anchor_date = raw.bars[-1].time.date()
factors = client.corporate.adjustment_factors(
code,
anchor_date=anchor_date,
start_date=start_date,
)
默认系数不等于服务端复权结果
start_date=None 表示使用全部有日期的权息事件,不表示“从服务端第一根可用 K 线开始”。部分证券存在早于第一根可用 K 线的权息记录;若把默认返回的后复权系数直接应用到全部不复权 K 线,上市前事件也会进入累计基准并造成显著偏差。重建一段完整 K 线时,必须传入该序列第一根 K 线的日期作为 start_date。
传入代码列表时,接口调用批量 capital_changes():默认每批 75 只,可通过 batch_size 调整为 1..200。超量批次按连接池 Slot 数并发请求,然后为每个返回块在本地计算系数。它不会为列表中的每只股票分别发送请求。批量结果的 responses 按股票块顺序保存 AdjustmentFactorResponse。
单次事件公式¶
标签 1 的字段含义:
D = c1_value 每十股现金分红
P = c2_value 配股价格
S = c3_value 每十股送转数量
R = c4_value 每十股配股数量
m = (10 + S + R) / 10
c = (D - R * P) / 10
单次前复权:
单次后复权:
真实配股事件 000858 / 20010219 的四字段为 0, 25, 0, 2,因此:
系数行的日期含义¶
items 按事件日期升序排列,每个事件日期只有一行。
| 模式 | 为某根 K 线选哪一行 | 没有匹配行 |
|---|---|---|
| 前复权 | 第一条满足 bar_date < factor.date 的行 |
使用 scale=1, offset=0 |
| 后复权 | 最后一条满足 factor.date <= bar_date 的行 |
使用 scale=1, offset=0 |
前复权行已经按日期从早到晚复合该日期至 anchor_date 的事件;后复权行已经按日期从晚到早复合 start_date 至该日期的事件。相同日期始终保持服务端顺序,计算过程中不舍入。
应用到 K 线¶
from datetime import date
def coefficients_for_bar(factors, bar_date: date, mode: str) -> tuple[float, float]:
if mode == "qfq":
row = next((item for item in factors.items if bar_date < item.date), None)
return (1.0, 0.0) if row is None else (row.qfq_scale, row.qfq_offset)
if mode == "hfq":
row = next((item for item in reversed(factors.items) if item.date <= bar_date), None)
return (1.0, 0.0) if row is None else (row.hfq_scale, row.hfq_offset)
raise ValueError("mode must be qfq or hfq")
def adjusted_price(raw: float, scale: float, offset: float) -> float:
return round(raw * scale + offset, 2)
对每根不复权 K 线的 open/high/low/close 使用同一组系数,完成全部事件复合后再保留两位小数。
与服务端复权的区别¶
两种方式的用途如下:
| 调用 | 数据源 | 用途 |
|---|---|---|
client.bars.get(..., adjust="qfq" / "hfq") |
主站计算的复权 K 线 | 直接查询复权价格 |
client.corporate.adjustment_factors() |
权息事件在本地复合 | 对已有不复权 K 线进行本地计算和审计 |
在正确传入 K 线起止日期后,两种结果仍可能因字段精度、累计精度和舍入顺序不同而出现差异,已知样本中约为 0.01~0.02 元。未传 start_date 时,上市前事件也可能计入累计系数,造成更大的偏差;应用到完整 K 线时,应以第一根 K 线日期设置 start_date。
比较本地和服务端结果¶
获取同一证券的不复权、前复权和后复权 K 线,再计算对应日期范围的本地系数:
with TdxClient(timeout=3) as client:
raw = client.bars.get(code, period="day", adjust="none", all_pages=True)
server_qfq = client.bars.get(code, period="day", adjust="qfq", all_pages=True)
server_hfq = client.bars.get(code, period="day", adjust="hfq", all_pages=True)
factors = client.corporate.adjustment_factors(
code,
anchor_date=raw.bars[-1].time.date(),
start_date=raw.bars[0].time.date(),
)
按日期对齐三组 K 线,对不复权 OHLC 应用本地系数,再分别与 server_qfq 和 server_hfq 比较。比较前需统一日期范围和舍入方式。
返回字段¶
AdjustmentFactorResponse |
含义 |
|---|---|
exchange / market_id / code / full_code |
市场和代码 |
anchor_date |
用户指定的前复权事件截止自然日期;未指定时为 None |
start_date |
用户指定的事件起点;None 表示使用全部事件,不会自动推断第一根 K 线日期 |
items / count |
事件日期系数及数量 |
AdjustmentFactor |
含义 |
|---|---|
date / time |
除权事件日期及其 15:00 时间 |
qfq_scale / qfq_offset |
适用于该日期之前区间的累计前复权系数 |
hfq_scale / hfq_offset |
适用于该日期及之后区间的累计后复权系数 |
返回样本¶
真实事件公式节选 · 000858 / 20010219
真实采样事件的单次变换节选;完整接口返回还会按所选日期范围复合该股票的其他标签 1 事件。