教程

A 股股东户数怎么看:筹码集中度

股东户数是窥探「筹码在谁手里」最直观的公开指标:户数减少 = 筹码向少数人集中(利好),户数暴增 = 筹码分散(散户涌入)。本文讲清三张表怎么读、字段什么意思,并附一个真实案例。

一、为什么要看股东户数(30 秒)

股价短期由资金推动,中期由筹码结构决定。股东户数就是这个结构里最直接的公开信号:

  • 户数减少 → 筹码从散户手里集中到少数人(大资金/机构)手里 —— 通常被解读为蓄势
  • 户数增加 → 筹码从集中走向分散(更多散户接盘)—— 通常被解读为派发/退潮
  • 户均持股 = 总股本 / 户数,与户数反向,同样反映集中度

注意:这是"通常解读",不是绝对信号 —— 需结合股价位置与买卖双方身份(见第四节)。

二、一行请求拿到三张表

`/v1/shareholder` 是付费端点(需 Key)。只有一个参数 `code`。返回 `data` 是对象,内含 `tables` 数组(三张表)。

Python:拿股东结构(三张表)
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,没有这个键

三、三张表各读什么

`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 倍,筹码剧烈分散

为什么这是好案例:它把"股东户数变化"这个指标的作用讲透了 —— 不是看单点,是看趋势,以及和股价位置的配合。

六、怎么批量扫(找"筹码集中"的)

Python:扫一批股票,找出股东户数近期明显下降的
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 字段标明统计截止日 —— 用它判断"这是哪一期的数据",别当最新。

户数减少就是看多吗?

通常是"筹码集中"的积极信号,但不是绝对。要结合股价位置:低位筹码集中(可能蓄势)与高位筹码集中(可能已拉升结束)含义不同。这只是结构镜子,不构成买卖结论。

为什么不直接看十大股东?

十大股东是单点(当前谁持有),而股东户数是趋势(筹码集中度怎么变化)。两者互补:十大股东看"谁在",户数看"筹码在集中还是分散"。

data 为什么是对象不是数组?

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 三期)。