QMT 量化实战:用均线簇精准定位支撑位与压力位(上)
本文将基于 miniQMT 量化终端与 xtquant 行情接口,通过 Python 实现均线簇算法,完成股票支撑位与压力位的量化定位,适合量化交易入门者、技术分析爱好者、QMT 平台使用者阅读学习。
一、前置环境与准备工作
本文所有代码均基于miniQMT终端的xtquant行情库开发,同时会用到 Python 数据分析与可视化的常用库,先完成环境配置与基础工具封装。
1.1 依赖库安装
执行以下 pip 命令完成所有依赖库的一键安装,避免运行时出现依赖缺失报错:
pip install pandas numpy matplotlib scipy scikit-learn xtquant
1.2 通用行情数据获取函数
基于 xtquant 封装标准化的股票历史行情获取函数,后续所有均线计算均基于该函数返回的行情 DataFrame 实现,函数兼容日线、周线、月线等多周期,支持多种复权方式,增量下载模式可大幅提升数据获取效率。
import pandas as pd
from xtquant import xtdata
def get_stock_hq(code, start_date='19900101', period='1d', dividend_type="front_ratio", count=-1):
"""
基于xtquant获取股票全量历史行情数据
:param code: 股票代码,格式为【代码.交易所】,例:600000.SH(沪市)、000001.SZ(深市)
:param start_date: 行情起始日期,格式YYYYMMDD
:param period: K线周期,支持1d(日线)/1w(周线)/1mon(月线),分钟线同理
:param dividend_type: 除权方式,可选值:none(不复权)/front(前复权)/back(后复权)/front_ratio(等比前复权)/back_ratio(等比后复权)
:param count: 获取K线数量,-1为获取起始日期以来的全部数据
:return: 包含OHLCV数据的DataFrame,索引为交易日期
"""
# 关闭控制台冗余日志
xtdata.enable_hello = False
# 增量下载历史行情数据,避免重复下载
xtdata.download_history_data(stock_code=code, period=period, incrementally=True)
# 拉取指定字段的行情数据
history_data = xtdata.get_market_data_ex(
field_list=['open', 'high', 'low', 'close', 'volume', 'amount', 'preclose'],
stock_list=[code],
period=period,
start_time=start_date,
count=count,
dividend_type=dividend_type
)
# 数据格式化处理
df = history_data[code]
df.index = pd.to_datetime(df.index)
df['date'] = df.index
return df
二、均线簇的由来与直观理解
在股票技术分析中,支撑位与压力位是核心分析要素,价格的上涨与下跌往往会在关键价位出现停滞、反转,而均线簇正是将这一主观概念进行量化的核心方法。
2.1 均线簇的核心定义
我们将多条不同周期的移动平均线同时绘制在 K 线图中,当这些均线在某一个价格区间高度聚集、差值极小时,就形成了均线簇;而均线簇的密集成交区间,往往就对应着个股的强压力位或强支撑位。
2.2 直观理解
我们可以把每一条均线想象成一根橡皮筋,多条均线聚集的区间,就相当于多根橡皮筋同时捆在价格的上方或下方:
- 当价格向上试图突破这个区间时,上方的均线簇就会形成极强的阻力,也就是压力位;
- 当价格向下试图跌破这个区间时,下方的均线簇就会形成极强的托举力,也就是支撑位。
本质上,均线簇是用不同周期的历史价格平均值,量化出市场的集体心理关口,反映了市场在该价位的多空均衡状态。
三、均线簇的数学定义与核心原理
3.1 基础指标:简单移动平均线 SMA
均线簇的计算基础是简单移动平均线(SMA),其计算公式如下:
![]()
其中:

3.2 均线簇的形成条件
均线簇的核心是「多周期均线高度聚集」,我们可以通过量化指标来精准判定均线簇是否形成,最常用的两个判定维度如下:
- 极差判定法通过计算多周期均线的最大值与最小值的差值,衡量均线的聚集程度,公式如下:


- 标准差判定法

3.3 均线簇的核心原理
- 市场均衡性反映:均线簇的密集区间,代表了短、中、长不同周期的市场持仓成本趋于一致,多空双方在该价格附近的力量达到相对均衡,是趋势酝酿的关键信号。
- 趋势启动的确认:当价格带量突破均线簇密集区间时,代表均衡状态被打破,是趋势启动的典型信号;反之,价格放量跌破均线簇,则是下跌趋势开启的信号。
- 支撑压力的转换:均线簇一旦被有效突破,原本的压力位就会转换为后续回调的强支撑位;反之,原本的支撑位被有效跌破后,会转换为后续反弹的强压力位。
四、均线簇的常用实现算法
4.1 基础版:简单聚合均线算法
这是最易实现、最常用的均线簇判定算法,核心步骤如下:
- 选定 5 条及以上不同周期的均线,常用周期组合:5 日、10 日、20 日、30 日、60 日、120 日;
- 对每个交易日,同步计算所有选定周期的均线值;
- 计算当日所有均线的最大值与最小值的极差 MAspread;
- 设定固定阈值(如当前收盘价的 2%),当 MAspread 小于阈值时,判定该区间形成均线簇;
- 对比均线簇区间与当前股价的位置,判定支撑 / 压力属性。
4.2 进阶版:均线簇密度算法
基础版的固定阈值无法适配不同波动率的个股,进阶版通过动态阈值优化,提升均线簇判定的普适性,核心步骤如下:
- 选定多周期均线组合,同步计算每日所有均线值;
- 计算当日所有均线的标准差 MAstd,用标准差衡量均线的密集程度;
- 设定动态阈值:取过去 20 个交易日 MAstd 均值的 20% 作为阈值,当当日 MAstd 小于该动态阈值时,判定为有效均线簇;
- 可通过调整回溯周期和阈值比例,适配不同风格的个股(大盘股 / 小盘股、高波动 / 低波动标的)。
4.3 支撑位与压力位的最终判定规则
完成均线簇的识别后,通过以下规则完成支撑 / 压力位的最终判定:
- 若均线簇密集区间位于当前股价上方,则该区间为个股的强压力位;
- 若均线簇密集区间位于当前股价下方,则该区间为个股的强支撑位。
更多推荐
所有评论(0)