用涨跌分布判断市场温度
市场广度(涨跌家数)是判断"今天市场是普涨还是分化"最直接的指标——它比单个指数更能反映全市场的真实情绪。本文用免费端点拿数据,讲清怎么读温度、怎么连续看几天、怎么发现拐点。
一、为什么看涨跌分布(30 秒)
指数(如上证)会被少数权重股带着走,涨跌分布则反映全市场:
- 普涨:上涨家数远多下跌 → 市场情绪偏暖(赚钱效应好)
- 普跌:下跌家数远多上涨 → 偏冷(亏钱效应)
- 分化:涨跌相近 → 结构性行情(选对板块比选对市场更重要)
- 涨停数:极端情绪指标 —— 涨停很多 = 题材活跃/资金亢奋
二、拿数据(免费端点)
`/v1/changedist` 是免费端点(无需 Key)。返回两段:涨跌总览 + 涨跌幅区间分布,且带 `structured` 供程序化用。
import requests
r = requests.get("https://api.ashareapi.com/v1/changedist", timeout=30)
j = r.json()
s = j.get("structured") # 程序化用这个
print(s) # [{"上涨": "3006", "上涨占比": "53%", "下跌": "2303", ...}]
# data 是 Markdown(给人看);structured 是二维数组(给代码用)
tables = j.get("tables") # [总览行, 区间分布行...]
for t in tables:
print(t)- 免费端点:无需 Key,直接调
- `structured` 是条件字段 —— 只有 data 是 Markdown 时才附(changedist 满足此条件)
- 程序化处理用 `structured` / `tables`,别解析 Markdown
三、字段怎么读
| 字段 | 含义 | 怎么用 |
|---|---|---|
| 上涨/下跌 | 涨/跌家数 | 快速看普涨普跌 |
| 上涨占比 | 上涨家数 / 总家数 | > 60% 偏暖 / < 40% 偏冷 |
| 涨停/跌停 | 极端情绪 | 涨停多 = 题材活跃(注意过热) |
| 停牌/平盘 | 非涨跌 | 占比小,忽略 |
| 两市成交额 | 资金活跃度 | 放量上涨 = 健康 / 缩量下跌 = 弱势 |
区间分布(>7% / 7~5% / 5~2% / 2~0% 等)能看出涨跌的强度——同样是"上涨 3000 家","涨 5% 以上很多"和"只涨 1% 左右"的含金量完全不同。
四、怎么读"市场温度"
- 不能只看一天 —— 市场情绪有惯性,要连续看几天才能判断拐点
- 过热信号:上涨占比高 + 涨停很多 + 成交额放大 → 可能情绪顶点(次日容易回落)
- 冰点信号:上涨占比极低 + 跌停多 → 往往对应情绪底部(超跌反弹概率增加,但需结合其它)
| 上涨占比 | 涨停数 | 判断 |
|---|---|---|
| > 60% | 多(>=40) | 偏暖 / 亢奋(注意过热) |
| 50~60% | 中等 | 中性偏暖 |
| 40~50% | 少 | 中性偏冷 |
| < 40% | 极少 | 偏冷 / 弱势 |
| < 30% | 接近 0 | 冰点(极端,警惕) |
五、真实数据(2026-09-29 实跑)
| 指标 | 值 | 解读 |
|---|---|---|
| 上涨 / 下跌 | 3006 / 2303 | 普涨(上涨家数明显更多) |
| 上涨占比 | 53% | 中性偏暖 |
| 涨停 / 跌停 | 42 / 9 | 涨停 40+,题材有一定活跃度 |
| 两市成交额 | 约 6180 亿 | (这一档数据来自历史某个时点,实际以当日为准) |
读法:53% 上涨占比 + 42 家涨停 = "中性偏暖、题材有热度" —— 不是冰点也不是过热。这类"温吞"状态最需要结合连续几天趋势(见下节)。
六、怎么连续看 + 判断拐点
import requests, time
def breadth():
j = requests.get("https://api.ashareapi.com/v1/changedist", timeout=30).json()
s = j["structured"][0]
return int(s.get("上涨", 0)), int(s.get("下跌", 0)), int(s.get("涨停", 0))
# 模拟连续记录(实战中落在任务里,每天存一次)
history = []
for day in range(5): # 这里演示,实际用当日 + 历史快照
up, down, zt = breadth()
history.append((up, down, zt))
time.sleep(1)
# 判断:最近 3 天上涨占比趋势
for i, (up, down, zt) in enumerate(history):
ratio = up / (up + down) if (up + down) else 0
print("day%d 上涨占比 %.0f%% 涨停 %d" % (i + 1, ratio * 100, zt))- 趋势:若上涨占比连续走高 → 情绪回暖;连续走低 → 转冷
- 突变:某天占比突然跳到 70% 以上(且涨停很多)→ 警惕过热;突然跌到 30% 以下 → 警惕冰点
- 纪律:市场广度是温度计(描述状态),不是预测器(不保证次日反转/延续)。用它当"环境判断",再决定策略偏好(而非直接买卖)
七、常见误判(重要)
- ① 数据口径:`/v1/changedist` 是当期口径。要历史某天的广度,另找指标(本文只讲当期判断)
- ② 只看指数不看广度:指数可能因权重股涨而"看着不错",但实际普跌(分化)—— 广度能戳穿这个假象
- ③ 涨停多 ≠ 一定亢奋:要看涨停的持续性和题材集中度(到处乱涨 vs 一个板块抱团,含义不同)
常见问题
不是。changedist 是 5 个免费端点之一(quote / kline / hot / market-overview / changedist),无需 Key。
structured 是条件字段——只有 data 是 Markdown 时才附。changedist 满足,所以用 j.get("structured") 拿结构化数组,或 j.get("tables") 拿全部表(总览 + 区间分布),别解析 Markdown。
当前 changedist 返回当期。历史某天的广度需要其他指标/端点,本文只聚焦"当天怎么读"。
没有绝对阈值。一般 >70% 且涨停很多 + 成交额放大,可视为偏亢奋(次日回落概率增加);<30% 且跌停多,偏冰点。但这是"环境描述",不构成买卖结论。
最后更新: 2026-09-29
数据取自 ashareapi /v1/changedist 线上真实返回(2026-09-29 实测:上涨 3006 / 下跌 2303 / 涨停 42 / 跌停 9 / 上涨占比 53%);字段与 structured/tables 结构为线上实测。