QMT之如何用局部极值找到支撑位和压力位

今天我们来说说局部极值法确定压力和支撑位置。

开始前的准备:

我这里用的行情数据源是 xtquant + miniQMT。 后续示例里会用到一些常见的 Python 库:pandas, numpy, matplotlib,进阶部分还会涉及 scipy, sklearn。在实际运行代码之前,记得先把环境配置好:

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

  1. 由来与直观理解

直观上,局部极值就是价格曲线上的"山顶"(Swing High)和"山谷"(Swing Low)。这些点往往被交易者记住,并在后续成为阻力/支撑,比如价格反复在某个高度回落或反弹。

在技术分析里,很多工具(ZigZag、Fractals)本质上都是在寻找这些极值或近似极值,用来刻画市场结构(高点更高 / 低点更高 → 上升结构,反之则为下降结构)。

  1. 数学定义与原理
  1. 局部最大值(order = k)给定序列 ,索引 是局部最大值(order=k)当且仅当:

同理,局部最小值是小于左右 k 个点的点。

  1. 极值确认(实际交易中常用)为了避免把"噪声尖刺"当做极值,通常要求在极值之后还要看到 confirm 根反方向的柱子(例如峰后连续 confirm 个低点),才把它标记为已确认的极值(避免未来回溯/偷看数据的风险)。

  2. 峰的显著性(prominence)衡量一个峰相对于周围基线有多"突出"。通俗说就是峰顶到比它高的最近两侧"最低包围线"的高度。数值越大,代表更显著、更值得关注(也越不易被噪声触发)。

  3. 常用算法

在 Python 里,其实不用我们自己写很多复杂的逻辑,scipy 这个科学计算库已经帮我们准备好了"找高点/低点"的工具。里面常用的有两个方法:

  1. Argrelextrema:

这个名字有点拗口,但原理很直白:就是和左右的邻居比大小。比如:如果某点比左右各 3 根K线都高,那它就是一个局部高点;比左右都低,就是局部低点。参数 order 就是控制"左右要比多少根"。

  1. find_peaks:

两个高点之间至少要隔多少根K线(distance);这个高点要多明显才算(prominence);要求高点的高度(height);要求高点的宽度(width)。顾名思义,就是"找山顶"的工具。它可以找到价格曲线里的局部高点,如果把价格取负数,就能反过来找低点。还能加条件筛选。

  1. 经验:
  1. argrelextrema 适合入门,逻辑简单直观。
  2. find_peaks 更强大,可以根据显著性、间隔等条件自动过滤掉很多没意义的小波动。
  3. 我自己常用 find_peaks + 平滑处理 + 基于 ATR 的显著性阈值,这样提取出来的高低点更稳健,不容易被噪声干扰。
相关推荐
李可以量化8 天前
用 KMeans 聚类寻找股票支撑位与压力位(上):基于 QMT 量化平台实现
python·量化 qmt ptrade
李可以量化22 天前
【Python 量化入门】AKshare 保姆级使用教程:零成本获取股票 / 基金 / 期货全市场金融数据
开发语言·python·金融·qmt·miniqmt·量化 qmt ptrade
小白量化3 个月前
聚宽策略分享-1年化98国九条后中小板微盘小改
大数据·数据库·人工智能·量化·qmt
小白量化3 个月前
量化研究--上线完成强大的金融数据库3.0系统
数据库·人工智能·python·算法·金融·量化·qmt
wtsolutions1 年前
讯投 QMT 使用小技巧 -如何判断今天是不是交易日
交易日历·qmt·讯投