前几天看到群里有人分享了一个不错的指标,于是试着自己用Python实现了。今天分享给大家。
在股市中,我们常常会盯着指数涨跌,比如上证指数、创业板指数。但实际操作时,很多人会发现一个尴尬的情况:指数涨得挺好,但自己手里的股票却跌得稀里哗啦 😂。这就是因为指数往往由权重股主导,而 市场真实的赚钱效应 其实要靠 市场宽度(Market Breadth) 来观察。
什么是市场宽度?
市场宽度就是 上涨股票数量在市场总数量中的比例。
- 如果 80% 以上的股票都在上涨 → 行情火热,普涨阶段;
- 如果不到 20% 的股票上涨 → 行情低迷,普跌阶段。
市场宽度趋势图 就是把这种赚钱效应可视化。 它能直观展示市场整体的强弱,还能结合阈值和极值点,帮助我们捕捉行情的 顶部反转 和 底部反转。
为什么普通宽度曲线"忽上忽下"?
如果只看 每天的涨跌家数,宽度曲线会非常「跳跃」:今天多股票涨 → 宽度高;明天多数下跌 → 宽度低。 这种噪音很大,不适合直接用来指导交易。
解决办法 → 趋势提炼
- 平滑处理 :对市场宽度做 5日或10日均线,去掉短期杂波。
- 极值点识别 :在平滑后的曲线上,找到「局部高点 / 局部低点」,标记为 顶部反转 / 底部反转。
这样得到的趋势图,就像风向标一样,能更好地揭示市场节奏。
它能帮我们做什么?
-
识别顶部风险
- 当宽度处在高位(>80%)并出现顶部反转 → 市场过热,适合减仓。
-
捕捉底部机会
- 当宽度处在低位(<20%)并出现底部反转 → 市场极度悲观,往往孕育反弹。
-
避免被指数迷惑
- 指数涨 ≠ 大多数股票赚钱。
- 通过宽度,可以快速判断「是普涨还是结构性行情」。
实际操作思路
- 低吸策略:当市场宽度 <20% 且出现底部反转 → 分批布局。
- 止盈策略:当市场宽度 >80% 且出现顶部反转 → 减仓或调仓。
- 辅助判断:结合指数趋势、成交量、情绪指标一起使用,信号更稳。
这里展示一下截止到2025年9月4日中午市场宽度指标,方便大家更好的理解。
全A市场宽度趋势图

申万一级行业房地产市场宽度趋势图

申万二级行业白色家电市场宽度趋势图

智能家居 概念 市场宽度趋势图

Python实现
行情获取使用的是xtquant+miniQMT,当然也可以改成你自己的行情数据源,代码每个功能以函数的形式来撰写,方便大家后期加入到自己的项目或者二次开发。
行情只需要提供包含"date", "code", "close", "preClose"
字段的日线行情即可,我这里写的是读取pandas的feather格式当然你也可以很容易的改成读数据库或者读csv文件等。
关于获取xtquant行情数据部分的代码我统一放到了hq_data_download.py
文件里,用的时候直接import hq_data_download as hq
即可。
接下来主要讲下市场宽度.py
这个主函数。
想获取全A市场、申万一级行业、二级行业或者概念的市场宽度直接运行市场宽度.py
即可,下面是它的主函数。
python
if __name__ == "__main__":
init_data() # 初始化数据,下载并保存到本地 feather 文件夹
plot_all() # 绘制全A的市场宽度趋势图
plot_sw1('房地产') # 示例:绘制房地产行业的市场宽度趋势图
plot_sw2('白色家电') # 示例:绘制白色家电行业的市场宽度趋势图
plot_gainian('智能家居') # 示例:绘制智能家居概念的市场宽度趋势图
init_data
:会把行情数据和行业、概念数据下载到本地,收盘以后运行一次即可plot_all
:统计全A市场宽度并绘制趋势图plot_sw1
:绘制申万某个一级行业对应的市场宽度趋势图,对应的行业名称从init_data
生成的沪深A股申万一级行业.csv
获取plot_sw2
:绘制申万某个二级行业对应的市场宽度趋势图,对应的行业名称从init_data
生成的沪深A股申万二级行业.csv
获取plot_gainian
:绘制某个概念对应的市场宽度趋势图,对应的行业名称从init_data
生成的沪深A股所属概念.csv
获取
当然,如果你的Python能力比较强,可以在这个基础上进行二次开发。例如,你可以编写策略来寻找某个概念或行业近期处于底部的标的,从而做抄底操作;或者每天筛选出处于顶部的标的,实现风险预警。