教程

用涨跌分布判断市场温度

市场广度(涨跌家数)是判断"今天市场是普涨还是分化"最直接的指标——它比单个指数更能反映全市场的真实情绪。本文用免费端点拿数据,讲清怎么读温度、怎么连续看几天、怎么发现拐点。

一、为什么看涨跌分布(30 秒)

指数(如上证)会被少数权重股带着走,涨跌分布则反映全市场:

  • 普涨:上涨家数远多下跌 → 市场情绪偏暖(赚钱效应好)
  • 普跌:下跌家数远多上涨 → 偏冷(亏钱效应)
  • 分化:涨跌相近 → 结构性行情(选对板块比选对市场更重要)
  • 涨停数:极端情绪指标 —— 涨停很多 = 题材活跃/资金亢奋

二、拿数据(免费端点)

`/v1/changedist` 是免费端点(无需 Key)。返回两段:涨跌总览 + 涨跌幅区间分布,且带 `structured` 供程序化用。

Python:拿市场广度(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 家涨停 = "中性偏暖、题材有热度" —— 不是冰点也不是过热。这类"温吞"状态最需要结合连续几天趋势(见下节)。

六、怎么连续看 + 判断拐点

Python:连续记录几天,找情绪拐点
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 怎么用?

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 结构为线上实测。