今天我们来说说局部极值法确定压力和支撑位置。
开始前的准备:
我这里用的行情数据源是 xtquant + miniQMT。 后续示例里会用到一些常见的 Python 库:pandas, numpy, matplotlib,进阶部分还会涉及 scipy, sklearn。在实际运行代码之前,记得先把环境配置好:

这样就能避免因为依赖缺失导致的报错啦。以下是一个基于xtquant + miniQMT获取股票行情的方法,后面的行情Dataframe数据都会通过这个方法来获取:

- 由来与直观理解
直观上,局部极值就是价格曲线上的"山顶"(Swing High)和"山谷"(Swing Low)。这些点往往被交易者记住,并在后续成为阻力/支撑,比如价格反复在某个高度回落或反弹。
在技术分析里,很多工具(ZigZag、Fractals)本质上都是在寻找这些极值或近似极值,用来刻画市场结构(高点更高 / 低点更高 → 上升结构,反之则为下降结构)。
- 数学定义与原理
- 局部最大值(order = k)给定序列 ,索引 是局部最大值(order=k)当且仅当:

同理,局部最小值是小于左右 k 个点的点。
-
极值确认(实际交易中常用)为了避免把"噪声尖刺"当做极值,通常要求在极值之后还要看到 confirm 根反方向的柱子(例如峰后连续 confirm 个低点),才把它标记为已确认的极值(避免未来回溯/偷看数据的风险)。
-
峰的显著性(prominence)衡量一个峰相对于周围基线有多"突出"。通俗说就是峰顶到比它高的最近两侧"最低包围线"的高度。数值越大,代表更显著、更值得关注(也越不易被噪声触发)。
-
常用算法
在 Python 里,其实不用我们自己写很多复杂的逻辑,scipy 这个科学计算库已经帮我们准备好了"找高点/低点"的工具。里面常用的有两个方法:
- Argrelextrema:
这个名字有点拗口,但原理很直白:就是和左右的邻居比大小。比如:如果某点比左右各 3 根K线都高,那它就是一个局部高点;比左右都低,就是局部低点。参数 order 就是控制"左右要比多少根"。
- find_peaks:
两个高点之间至少要隔多少根K线(distance);这个高点要多明显才算(prominence);要求高点的高度(height);要求高点的宽度(width)。顾名思义,就是"找山顶"的工具。它可以找到价格曲线里的局部高点,如果把价格取负数,就能反过来找低点。还能加条件筛选。
- 经验:
- argrelextrema 适合入门,逻辑简单直观。
- find_peaks 更强大,可以根据显著性、间隔等条件自动过滤掉很多没意义的小波动。
- 我自己常用 find_peaks + 平滑处理 + 基于 ATR 的显著性阈值,这样提取出来的高低点更稳健,不容易被噪声干扰。