板块成分股行情¶
输入一个板块代码,查询其成分股行情。板块代码可从板块行情的返回结果中取得。
接口¶
client.helpers.board_member_quotes(
board_code: str,
*,
refresh: bool = False,
) -> BoardMemberQuoteTable
作用¶
传入一个板块代码,读取该板块的原始成分股,与当天 0x044d 有效证券名单核对后,只为有效成分股查询实时行情。
输入参数¶
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
board_code |
str |
是 | 无 | 六位板块代码,例如 "880515";也接受带市场前缀的完整代码,例如 "sh880515"。 |
refresh |
bool |
否 | False |
是否强制重新准备当天的板块资料和证券名单。 |
处理步骤与底层请求¶
- 用
0x06b9准备板块资料。 - 根据板块代码解析原始成分股。
- 用
0x044d当前证券名单核对有效性。 - 对有效成员按每批最多 80 个代码调用
0x054c。
返回值¶
返回 BoardMemberQuoteTable:
| 字段 | 类型 | 说明 |
|---|---|---|
board_code / board_name |
str |
请求板块的代码和名称。 |
raw_members |
tuple[dict, ...] |
文件解析并按市场和代码去重后的原始成员。 |
display_members |
tuple[dict, ...] |
与缓存证券名单匹配的有效成员。 |
excluded_members |
tuple[dict, ...] |
名单中不存在的成员及排除原因。 |
rows |
tuple[BoardQuoteRow, ...] |
有效成员的行情行,顺序与 display_members 一致。 |
count |
int |
属性:len(rows)。 |
prepared_date |
date |
本次资料准备使用的日期。 |
raw_members、display_members 和 excluded_members 的每项至少包含 market、code;排除项额外包含 reason,当前值为 absent_from_current_security_list。
行情行字段¶
rows 中每项都是 BoardQuoteRow:
| 字段 | 类型 | 说明 |
|---|---|---|
board_code |
str |
所属板块的六位代码。 |
board_name |
str |
所属板块名称。 |
full_code |
str |
当前行情行的完整代码,含市场前缀。 |
code |
str |
属性:当前行情行的六位代码,来自 full_code。 |
name |
str |
属性:等于 board_name。成分股行情中仍为板块名,非股票名称。 |
exchange |
str |
当前行情行的市场前缀。 |
market_id |
int |
当前行情行的市场编号。 |
last_price / pre_close_price |
float / None |
最新价 / 昨收价。 |
open_price / high_price / low_price |
float / None |
今开 / 最高 / 最低。 |
change |
float / None |
最新价减昨收价。 |
change_pct |
float / None |
涨跌幅百分数,例如 4.71 表示 4.71%;昨收为零时为 None。 |
amount |
float / None |
成交额。 |
volume_hand |
int / None |
成交量,单位为手。 |
quote |
QuoteSnapshot / None |
原始行情快照。 |
某代码没有返回行情时,仍保留对应行,行情字段和 quote 为 None。count 是行数,不等于成功取得行情的代码数。
示例¶
from eltdx import TdxClient
with TdxClient(timeout=3) as client:
table = client.helpers.board_member_quotes("880515")
print(table.board_name, table.count)
print("原始成员:", len(table.raw_members))
print("有效成员:", len(table.display_members))
print("排除成员:", table.excluded_members)
for row in table.rows:
print(row.full_code, row.last_price, row.change_pct)
输入错误¶
board_code为空或不是字符串:抛出ValueError("board_code is required")。- 找不到对应板块代码:抛出
ValueError("unknown board code: ...")。 - 板块资料不完整或类别不支持:抛出
ValueError或RuntimeError,调用方应记录错误并检查本地资料目录。
缓存与刷新¶
refresh=False 时,同一天后续调用复用资料缓存;refresh=True 时强制重新准备资料。每次调用都会请求 0x054c 行情。
资料准备尝试下载 infoharbor_block.dat、tdxhy.cfg 并读取 0x044d 证券名单。缓存目录由 ELTDX_BOARD_DATA_DIR 指定,默认是当前工作目录下的 downloads;日期记录在 .eltdx_board_cache.json 中。日期优先取握手中的服务端日期,取不到时使用本机日期。
板块定义还会读取本地 tdxzs.cfg、tdxzs3.cfg;缺少定义时会尝试从 infoharbor_block.dat 解析。地域成员依赖本地 base.dbf。这些文件并非都由本接口自动下载。
当前实现中,下载失败可能沿用已有文件,证券名单获取失败可能回退到本地名单。因此 prepared_date 表示资料准备使用的日期,并非所有源文件均已成功更新的证明。
返回示例¶
返回结构示例 · BoardMemberQuoteTable
示例数据,仅说明字段结构;行情行省略部分字段和原始 quote。接口返回 Python 对象,下方 JSON 为展示形式,日期转换为字符串,count 属性单独加入。
{
"board_code": "880515",
"board_name": "示例板块",
"raw_members": [
{
"market": 1,
"code": "600000"
}
],
"display_members": [
{
"market": 1,
"code": "600000"
}
],
"excluded_members": [],
"rows": [
{
"board_code": "880515",
"board_name": "示例板块",
"full_code": "sh600000",
"last_price": 10.5,
"pre_close_price": 10.0,
"change": 0.5,
"change_pct": 5.0
}
],
"prepared_date": "2026-09-13",
"count": 1
}