夜雨聆风学习资料网

ARTICLE · 1166099

通达信"双高回落"指标源码解读:区间放量新高后缩量回踩的低吸信号编程逻辑

通达信"双高回落"指标源码解读:区间放量新高后缩量回踩的低吸信号编程逻辑

风帆量化 · 通达信公式编程教学

温馨点击上方"风帆量化" → 点击右上角 "..." → 选 "设为星标"★

今天拆解一款把区间放量创新高与次日缩量回踩串在一条公式里的通达信低吸指标:「双高回落」。

它的思路分两步。第一步先在一段区间里标出「双高」锚点——当日的成交量是这段区间里的最大量、当日的最高价也是区间最高价,也就是放量创出新高。第二步看次日:如果股价回落(收阴)、均线仍在多头排列、MACD 转弱,就把这个位置当成强势股回踩后的低吸点。

公式还按主板、创业板科创板、北交所自动区分涨跌停规则,全程只用到历史函数,没有未来函数。下面逐层拆解编程逻辑,最后附上完整源码。

一、这个指标在做什么?(整体逻辑速览)

整段代码可以归成 5 层,从市场规则一路推到买点信号:

① 市场与涨跌停层:按代码前缀区分主板 / 双创 / 北交所,取对应涨跌停幅度,判定涨停与炸板

② 幅度与量能层:算出上影、实体、下影与涨幅,并把成交量分成 2 倍、3 倍等档位

③ 均线与 MACD 层:5 / 10 / 20 日均线,以及展开书写的标准 MACD(DIF / DEA / MACD)

④ 区间锚点层:先找 MACD 零轴下方的金叉点圈出区间,再标出「双高」(区间最大量 + 最高价)锚点

⑤ 回落买点层:昨日双高之后今日回踩,叠加多头排列与量能条件,合成最终信号

核心定位:区间放量冲高后、次日缩量回踩的低吸买点,属于强势股回踩型的左侧信号。

二、逐层拆解

第1层:按市场区分涨跌停规则

SH:=CODELIKE('60') OR CODELIKE('00');SZ:=CODELIKE('30') OR CODELIKE('68');SS:=CODELIKE('9');X1:=IF(SH,0.1,IF(SZ,0.2,IF(SS,0.3,100)));ZT:=C=H AND C>=ZTPRICE(REF(C,1),X1);ZB:=C<H AND H>=ZTPRICE(REF(C,1),X1);

SH、SZ、SS 用 CODELIKE 按股票代码前缀判断所属市场:60 / 00 开头是主板,30 / 68 开头是创业板与科创板,9 开头是北交所。X1 据此取对应的涨跌停幅度(主板 0.1、双创 0.2、北交所 0.3,其余给 100 表示不做限制)。ZT 判定涨停:收盘价等于最高价、且收盘价不低于按昨收算出的涨停价;ZB 判定炸板:盘中触及涨停价但收盘没封住。

学习要点:CODELIKE('60') 判断代码是否以某串开头;ZTPRICE(REF(C,1),X1) 是通达信内置的涨停价函数,按昨收和涨跌幅算出当日涨停价。

第2层:K 线幅度指标

SYX:=100*(H-MAX(C,O))/REF(C,1);ST:=100*ABS(C-O)/REF(C,1);XYX:=100*(MIN(C,O)-L)/REF(C,1);JZF:=100*(O/REF(C,1)-1);ZF:=100*(C/REF(C,1)-1);

SYX、ST、XYX 分别算出上影线、实体、下影线占昨收的百分比,用来刻画当天 K 线的形状——上影长说明冲高遇阻,实体小说明多空胶着。JZF、ZF 是今开涨幅与当日涨幅。这些百分数后面会被用作「影线别太长、实体别太大」的过滤条件。

学习要点:MAX(C,O) 与 MIN(C,O) 取实体的上下沿;用「除以 REF(C,1)」把绝对值换成百分比,便于横向比较不同价位的股票。

第3层:量能档位

BL:=V>2*REF(V,1);VJ:=V<REF(V,1);VS:=V>REF(V,1);BL3:=V>3*REF(V,1);

BL、BL3、VS、VJ 把成交量按「相对昨日成交量」分成几档:BL 是 2 倍以上(放量),BL3 是 3 倍以上(巨量),VS 是大于昨日,VJ 是小于昨日(缩量)。后面用这些档位来判断回踩当天到底是缩量还是放量。

学习要点:V 是成交量,REF(V,1) 是昨日成交量;把量能拆成几档变量,比在信号行里直接写一长串比较更清晰。

第4层:均线

M5:=MA(C,5);M10:=MA(C,10);M20:=MA(C,20);

M5、M10、M20 是 5、10、20 日均线。它们本身不产生信号,只是为后面判断「均线多头排列(M5>M10>M20)」和「5 日线向上」提供依据。

学习要点:MA(C,N) 求收盘价的 N 日简单移动平均;多头排列要求短均线在上、长均线在下。

第5层:展开书写的 MACD

DIF:=(EMA(CLOSE,12)-EMA(CLOSE,26));DEA:=EMA(DIF,9);MACD:=(DIF-DEA)*2;

DIF、DEA、MACD 就是标准 MACD:DIF 是 12 日与 26 日指数均线之差,DEA 是 DIF 的 9 日平滑,MACD 是 (DIF-DEA)×2。这里没有直接引用系统 MACD 指标,而是把计算过程展开写出来。

学习要点:EMA(X,N) 是指数移动平均;自己把 MACD 算一遍,好处是公式不依赖系统指标库、任何环境都能跑。

第6层:信号起点与「双高」锚点

T1:=CROSS(DIF,DEA) AND DIF<0;N1:=BARSLAST(T1);T2:=V=HHV(V,N1+1) AND H=HHV(H,N1+1) AND MACD>REF(MACD,1);

T1 找 MACD 在零轴下方的金叉(DIF 上穿 DEA 且 DIF 仍小于 0),N1 记录这个金叉距离今天的周期数,由此圈定一段观察区间。T2 是「双高」锚点:当日成交量等于区间内最大量、当日最高价等于区间内最高价、且 MACD 较昨日走高——也就是在区间里放量创出新高。

学习要点:BARSLAST(T1) 返回 T1 上一次成立到当前的周期数;HHV(V,N1+1) 取最近 N1+1 个周期内成交量的最大值,用来锁定区间极值。

第7层:回落买点合成

T3:=REF(T2,1) AND M5>REF(M5,1) AND DIF>REF(DIF,1) AND M5>M10 AND M10>M20 AND C<REF(C,1) AND CROSS(REF(MACD,1),MACD) AND DEA>0 AND REF(EVERY(BL3=0 AND ST<8 AND SYX<8,N1),2);XG:T3 AND COUNT(T3,N1)=1 AND COUNT(ZT,N1+1)=0 AND REF(ZB=0,1) AND IF(REF(BL=0,1),VS AND N1>10 AND SYX<ST*2 AND SH AND REF(C/REF(C,N1)>=1.1 AND C/REF(C,N1)<1.35,1) AND C<O,REF(BL,1) AND VJ);

T3 把「昨日双高 + 今日回踩」缝在一起:昨日成立双高锚点、今日 5 日线向上且均线多头、DIF 向上、今日收盘低于昨日(回落)、MACD 死叉、DEA 仍在零轴上方,并且区间内没有出现巨量、实体与上影都小于 8%。XG 是最终信号:要求区间内只出现过一次 T3、区间内没有涨停、昨日没有炸板,再按「昨日是否放量」分成两种情形补上各自的附加条件。

学习要点:COUNT(X,N) 数区间内 X 成立的次数,常用来做「首次出现」过滤;把多个条件先各自命名、再合并成输出行,是复杂公式保持可读的关键。

三、实战图例:信号在图上长什么样?

下图是信号在副图上标注后的效果示意:低吸信号出现在「放量冲高、次日回踩」的位置。

看图重点:公式只输出 XG 一个信号,加载到副图后可用画线函数把出现位置画出来观察;图中信号仅展示公式输出形态,不构成投资建议。

四、选股 / 副图一体化说明

本文这段源码是选股与副图一体化版:它只输出 XG 一个信号,因此既能直接放进「条件选股公式」盘后海选,也能加载到副图观察信号出现的时点。两种用法对照如下:

用途
怎么用
说明
条件选股
整段复制进「条件选股公式」,运行即选出信号股
只输出 XG,适合盘后一键海选
副图观察
复制进「技术指标公式」加载到副图
可在公式末尾加画线语句把信号画出来
未来函数
全程只用 REF / BARSLAST / HHV 等历史函数
不引用未来数据,信号不漂移
源码改动
两种用法都用同一份源码,无需删行
一体化设计,省去版本转换

五、实战使用注意事项(必看)

① 适用场景:这是强势股放量冲高后的缩量回踩低吸,属左侧买入,逆势抢反弹风险较大,必须配合严格纪律使用。

② 无未来函数:公式只用到 REF、BARSLAST、HHV、COUNT 等基于历史数据的函数,不包含会引用未来数据的写法,历史信号不会漂移。

③ 专有函数:CODELIKE 与 ZTPRICE 是通达信专有函数,本地 Python 引擎不内置。

④ 量能阈值是硬编码:2 倍、3 倍放量属经验阈值,不同个股、不同市场应自行调整。

⑤ 幅度阈值偏宽松:公式用 8% 作为实体(ST)与上影(SYX)的上限。实测中 SYX<8(上影线小于 8%)在当前样本里几乎恒真——上影极少超过 8%,该条件实际过滤作用很弱、接近形式保留;若要让它真正生效,需把阈值调小。

⑥ 区间长度不固定:区间由上一次 MACD 零轴下金叉决定,长短不定,区间过长时极值容易被很久以前的成交放出,建议结合形态人工确认。

⑦ 涨停判定依赖市场规则:北交所、ST 股涨跌幅不同,公式已按代码前缀区分,但特停、次新等特殊情形仍需人工留意。

六、延伸学习

1. BARSLAST(X) + HHV(X,N):先定位一个区间锚点,再在区间内取极值,是「找到一波行情的起点、再回看这段行情」的通用写法;

2. COUNT(X,N):统计区间内条件成立次数,用来实现「首次出现」「只出现过一次」这类过滤;

3. CODELIKE + ZTPRICE:按代码前缀区分市场、再套用对应涨跌停规则,是处理不同板块涨跌幅上限的标准做法。

七、完整源码(复制前请先对照上方逐层解读)

选股 / 副图一体化完整源码(直接复制,无未来函数):

SH:=CODELIKE('60') OR CODELIKE('00');SZ:=CODELIKE('30') OR CODELIKE('68');SS:=CODELIKE('9');X1:=IF(SH,0.1,IF(SZ,0.2,IF(SS,0.3,100)));ZT:=C=H AND C>=ZTPRICE(REF(C,1),X1);ZB:=C<H AND H>=ZTPRICE(REF(C,1),X1);SYX:=100*(H-MAX(C,O))/REF(C,1);ST:=100*ABS(C-O)/REF(C,1);XYX:=100*(MIN(C,O)-L)/REF(C,1);JZF:=100*(O/REF(C,1)-1);ZF:=100*(C/REF(C,1)-1);BL:=V>2*REF(V,1);VJ:=V<REF(V,1);VS:=V>REF(V,1);BL3:=V>3*REF(V,1);M5:=MA(C,5);M10:=MA(C,10);M20:=MA(C,20);DIF:=(EMA(CLOSE,12)-EMA(CLOSE,26));DEA:=EMA(DIF,9);MACD:=(DIF-DEA)*2;T1:=CROSS(DIF,DEA) AND DIF<0;N1:=BARSLAST(T1);T2:=V=HHV(V,N1+1) AND H=HHV(H,N1+1) AND MACD>REF(MACD,1);T3:=REF(T2,1) AND M5>REF(M5,1) AND DIF>REF(DIF,1) AND M5>M10 AND M10>M20 AND C<REF(C,1) AND CROSS(REF(MACD,1),MACD) AND DEA>0 AND REF(EVERY(BL3=0 AND ST<8 AND SYX<8,N1),2);XG:T3 AND COUNT(T3,N1)=1 AND COUNT(ZT,N1+1)=0 AND REF(ZB=0,1) AND IF(REF(BL=0,1),VS AND N1>10 AND SYX<ST*2 AND SH AND REF(C/REF(C,N1)>=1.1 AND C/REF(C,N1)<1.35,1) AND C<O,REF(BL,1) AND VJ);

⚠️ 互动问答:

使用指标时遇到任何问题(如安装、信号解读等),欢迎在留言区提问,我会第一时间解答!

也可以分享你的使用心得:这个指标帮你抓住过哪些机会。

👥 制作不易,麻烦点亮右下角的 "👍" + "❤" 支持一下!

📢 转发给身边朋友,一起交流进步~

👉 喜欢我的分享?记得关注我,持续更新干货!

⚠️ 免责声明

本文所有源码及解读内容仅为通达信公式编程教学,目的在于帮助读者理解指标编写逻辑和函数用法。文中提到的任何指标名称、信号条件、参数设置均不构成任何投资建议。

指标是辅助分析工具,其信号仅反映特定数学条件是否满足,不代表对未来走势的预测。实际使用时请务必结合自身判断和其他分析方法,理性决策。投资有风险,入市需谨慎。

相关学习资料