A 股股东户数怎么看:筹码集中度
股东户数是窥探「筹码在谁手里」最直观的公开指标:户数减少 = 筹码向少数人集中(利好),户数暴增 = 筹码分散(散户涌入)。本文讲清三张表怎么读、字段什么意思,并附一个真实案例。
一、为什么要看股东户数(30 秒)
股价短期由资金推动,中期由筹码结构决定。股东户数就是这个结构里最直接的公开信号:
- 户数减少 → 筹码从散户手里集中到少数人(大资金/机构)手里 —— 通常被解读为蓄势
- 户数增加 → 筹码从集中走向分散(更多散户接盘)—— 通常被解读为派发/退潮
- 户均持股 = 总股本 / 户数,与户数反向,同样反映集中度
注意:这是"通常解读",不是绝对信号 —— 需结合股价位置与买卖双方身份(见第四节)。
二、一行请求拿到三张表
`/v1/shareholder` 是付费端点(需 Key)。只有一个参数 `code`。返回 `data` 是对象,内含 `tables` 数组(三张表)。
import requests
BASE = "https://api.ashareapi.com/v1"
H = {"Authorization": "Bearer ct-你的Key"}
b = requests.get(f"{BASE}/shareholder",
params={"code": "sh600667"}, headers=H, timeout=60).json()
d = b["data"] # 注意:data 是对象,不是数组
for t in d["tables"]: # 三张表,每张有 title/slug/rows
print("== [%s] %s ==" % (t["slug"], t["title"]))
for row in t["rows"][:5]:
print(" ", row)- `data` 是对象(含 `tables` 数组),不是普通数组 —— 用 `data["tables"]` 遍历
- 别用 `body["structured"]` —— shareholder 的 data 是 dict,没有这个键
三、三张表各读什么
| 表(slug) | 内容 | 怎么用 |
|---|---|---|
| `top10_holders` | 十大股东(前 10 大) | 看谁控股/大机构在不在 |
| `top10_float_holders` | 十大流通股东 | 看流通盘里谁在(更贴近交易盘) |
| `holder_count` | 股东户数统计(历史多期) | 筹码集中度核心:户数变化趋势 |
`holder_count` 是最有价值的一张 —— 它按季报披露,能看到户数随时间的变化趋势(不是单点)。
四、字段怎么读
| 字段 | 含义 | 单位 | 说明 |
|---|---|---|---|
| holdShares | 持股数 | 股 | 该股东持有多少 |
| holdPct | 持股占比 | % | 占总股本比例 |
| holdChange | 持股变动 | 股 | 正=增持 / 负=减持 / 0=不变 |
| totalSHNum | 股东总户数 | 户 | 统计期股东数 |
| avgHoldShares | 户均持股 | 股 | 总股本/户数(与户数反向) |
| date | 统计截止日 | - | 季报披露日期(重要:有滞后) |
两户:`totalSHNum`(总户数)与 `aSHNum`(A 股户数)常相等;`avgHoldShares` 与 `aAvgHoldShares` 同理。
五、真实案例:太极实业(600667)户数一年翻 3.5 倍
实测 2026-09-29 返回的 `holder_count` 表:
- 趋势:户数 15.4 万 → 17.8 万 → 54.9 万,一年多翻了 3.5 倍;户均持股从 1.36 万股降到 3,810 股
- 含义:大量新散户涌入接盘,筹码从集中走向极度分散 —— 典型的"高位派发/散户化"特征
- 配合股价看:如果这段时期股价大涨后回落,则"户数暴增 + 股价滞涨"是派发信号;如果股价低位放量、户数暴增,则可能是新一轮轮动的开始(需结合其它信息,本文不构成结论)
| 日期 | 股东户数 | 户均持股 | 解读 |
|---|---|---|---|
| 2025-12-31 | 153,627 户 | 13,614 股 | 基准 |
| 2026-03-31 | 178,193 户 | 11,738 股 | 户数 +16%,筹码开始分散 |
| 2026-06-30 | 548,947 户 | 3,810 股 | 户数暴增 3.5 倍,筹码剧烈分散 |
为什么这是好案例:它把"股东户数变化"这个指标的作用讲透了 —— 不是看单点,是看趋势,以及和股价位置的配合。
六、怎么批量扫(找"筹码集中"的)
CODES = ["sh600667", "sh600519", "sz300750", "sh601318",
"sh600036", "sz000858", "sh600030", "sh601899"]
for code in CODES:
b = requests.get(f"{BASE}/shareholder", params={"code": code},
headers=H, timeout=60).json()
d = b.get("data") or {}
for t in d.get("tables", []):
if t.get("slug") != "holder_count":
continue
rows = t.get("rows", []) # 倒序:最新在前
if len(rows) < 2:
continue
latest = int(rows[0].get("totalSHNum") or 0)
prev = int(rows[1].get("totalSHNum") or 0)
if prev > 0 and latest < prev * 0.9: # 户数较上期降 >10% = 筹码集中
print("%s %s 户数 %d → %d [筹码集中]" % (
code, rows[0].get("date"), prev, latest))- 找集中:`latest < prev * 0.9`(较上一期减少 >10%)—— 选筹码向少数人集中的
- 找分散(反向):`latest > prev * 1.2`(较上期增加 >20%)—— 选散户涌入的(可作回避信号)
- 要结合日期的滞后:户数是季报数据(2026-06-30 的户数在 8 月底才披露)—— 不能当"今日"信号
七、两个常见误判(重要)
- ① 户数数据有滞后 —— 季报披露,不是实时的。要看"最近一期的截止日"(`date` 字段),别当成最新
- ② 户数减少 ≠ 一定涨,增加 ≠ 一定跌 —— 它是筹码结构的一面镜子,要配合:股价位置(高位分散危险 / 低位集中蓄势)、买卖双方身份(十大股东里是机构还是个人)、整体市场环境
常见问题
不是。按季报/定期报告披露(有滞后)。返回里的 date 字段标明统计截止日 —— 用它判断"这是哪一期的数据",别当最新。
通常是"筹码集中"的积极信号,但不是绝对。要结合股价位置:低位筹码集中(可能蓄势)与高位筹码集中(可能已拉升结束)含义不同。这只是结构镜子,不构成买卖结论。
十大股东是单点(当前谁持有),而股东户数是趋势(筹码集中度怎么变化)。两者互补:十大股东看"谁在",户数看"筹码在集中还是分散"。
shareholder 返回多张表(十大股东/流通股东/股东户数),用对象承载(含 tables 数组)更清晰。程序化处理用 data["tables"] 遍历,不要用 body["structured"]。
最后更新: 2026-09-29
字段与结构取自 ashareapi /v1/shareholder 线上返回(2026-09-29 实测:三张表结构、字段含义);案例数据为太极实业(600667)真实 holder_count 序列(2025-12-31 / 2026-03-31 / 2026-06-30 三期)。