| name | a-share-market-breadth |
| description | A股市场宽度/涨跌家数分析。当用户说"市场宽度"、"涨跌家数"、"上涨家数"、"赚钱效应"、"亏钱效应"、"breadth"、"今天多少家涨"、"二八分化"、"一九行情"、"普涨"、"普跌"、"市场广度"时触发。分析全市场涨跌分布、强弱股比例、新高新低数量、腾落线(AD Line)等市场宽度指标,判断行情的健康度和可持续性。支持研报风格(formal)和快速判断风格(brief)。 |
A股市场宽度分析助手
数据源
SCRIPTS="$SKILLS_ROOT/cn-stock-data/scripts"
python "$SCRIPTS/cn_stock_data.py" quote --code SH000001,SZ399001,SZ399006
python "$SCRIPTS/cn_stock_data.py" kline --code SH000001 --freq daily --start
全市场实时行情(核心数据,用于涨跌家数统计):
import akshare as ak
df = ak.stock_zh_a_spot_em()
补充数据(通过 akshare 或 web 搜索获取):
- 涨停/跌停家数、炸板率
- 创新高/创新低家数(60日/120日/250日)
- 行业板块涨跌排名
- 两市成交额分布
Workflow
Step 1: 全市场涨跌数据采集
调用 ak.stock_zh_a_spot_em() 获取全A实时行情,剔除ST股/北交所(可选),得到有效个股池。同时获取大盘指数行情作为对照基准。
Step 2: 市场宽度指标计算
- 涨跌家数:上涨家数 / 下跌家数 / 平盘家数
- 涨跌比(ADR):上涨家数 / 下跌家数,>1 多头占优,<1 空头占优
- 上涨占比:上涨家数 / 总家数,>50% 赚钱效应好
- 中位数涨幅:全市场个股涨跌幅中位数(比均值更能反映多数人体验)
- 涨停/跌停家数:自然涨停数(排除新股/ST)、跌停数
- 炸板率:曾涨停但未封住 / 曾涨停总数
- 强势股占比:涨幅 >3% 的个股占比
- 弱势股占比:跌幅 >3% 的个股占比
Step 3: 涨跌幅分布分析
- 将全市场涨跌幅按区间分组:<-9%, -9%
-7%, -7%-5%, -5%-3%, -3%-1%, -1%~0%, 0%~1%, 1%~3%, 3%~5%, 5%~7%, 7%~9%, >9%
- 展示分布直方图(文本形式)
- 行业/概念板块涨跌排名 Top5 / Bottom5
- 判断行情结构:普涨/普跌/二八分化/一九分化/结构性行情
Step 4: 历史对比与背离检测
- 当前涨跌比 vs 近20日/60日均值
- 宽度背离检测:指数创新高但上涨家数减少 = 顶部背离信号
- 宽度确认检测:指数上涨且上涨家数同步扩大 = 健康行情
- 当前涨停数在近期的百分位位置
Step 5: 输出市场健康度判断
输出风格
| 维度 | formal(研报风格) | brief(快速判断) |
|---|
| 输出 | 完整市场宽度报告 | 涨跌家数 + 一句话结论 |
| 指标 | 全部宽度指标逐一展示 | 涨跌比 + 中位数涨幅 + 涨停跌停数 |
| 分布 | 涨跌幅分布直方图 + 板块排名 | 涨幅区间占比概要 |
| 历史对比 | 与近期均值/分位数对比 | 简单偏高/偏低判断 |
| 结论 | 客观描述市场宽度状态 | 直接给出"赚钱效应好/差" |
默认使用 brief 风格;用户要求"详细分析"、"出个报告"时用 formal。
关键规则
- 宽度是领先指标:市场宽度往往先于指数见顶或见底,宽度收窄时即使指数还在涨也需警惕
- 指数涨 ≠ 全市场涨:权重股拉指数时可能大多数个股下跌,必须区分权重股行情 vs 普涨行情
- 区分二八与一九:二八分化(20%涨80%跌)是常态,一九分化(10%涨90%跌)是极端分化
- 连续缩窄是风险信号:连续多日上涨家数递减,即使指数平稳也说明行情在衰竭
- 中位数涨幅比均值更真实:少数大涨股会拉高均值,中位数才反映"大多数人"的盈亏体验
- 涨停数量需去噪:统计自然涨停时应排除新股首日和ST股,炸板率是情绪强度的重要补充
- 标注数据时效性:明确说明是盘中实时数据还是上一交易日收盘数据,盘中数据会随行情变化