夜雨聆风学习资料网

ARTICLE · 1226189

通达信「山河星池」指标源码解读:三连阳缩量蓄势后的接力确认逻辑

通达信「山河星池」指标源码解读:三连阳缩量蓄势后的接力确认逻辑

通达信公式源码解读 · 

这个公式我第一眼看完以为是个突破战法,实测下来完全不是。它在等的是另一种形态:先有一根放量阳线打底,中间三天连着收阳、量整体缩下去,涨幅不超过 10%,再往后两天走一个阴阳回踩,最后等昨天收盘重新越回四天前的收盘价。信号出来的那天,价格往往已经贴着 20 日均线,而不是冲在半空中。

我把它放到全市场跑了两年:4549 只沪主板、深主板、创业板个股,235.6 万根日线,一共只出了 61 次信号,折算下来全市场每年约 30 次。极低频,属于等出来的机会,不是天天有的菜。

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

副图版按分号切是 14 条语句,归成 6 层,从「筛位置」一路推到「出信号」:

① 位置层:算出当前价距 100 日最高的涨幅,以及距 200 日高的倍数,要求「涨幅不到 100%」且(上市满 250 天后)「距前高不到 2 倍」

② 力度层:用 50 倍放大的下影线幅度与实体幅度,判断单日 K 线的「用力程度」

③ 起涨层:昨日阴线、今日阳线且放量、收盘高于昨收、下影极短、实体盖过下影

④ 蓄势层:三连阳、收盘逐日抬高、三天都没跌破三天前的收盘、三天的量全都小于三天前那天的量、三日涨幅不足 10%

⑤ 接力层:把「起涨」往前推 3 天、把「蓄势」往前推 5 天,再要求中间低开一次、回踩一根阴线、然后收盘重新抬起并越过四天前

⑥ 资格层:只认 60/00/30 开头,且股价低于 80 元

核心定位:缩量三连阳之后的回踩确认,属于「涨了一小段、缩量歇了几天、再确认一次还站得住」的接力信号,不是突破信号,也不是抄底信号。

二、逐层拆解

下面我按语句顺序拆开讲。每处贴出来的代码,都是原文里的整行(连续几行就是连着几行),我只做了分段,没有增删任何一个字符、也没有改动行序(唯一的排版处理见 5.3 第 8 条);完整原文在第七节。

第1层:位置层,先算出「离前高多远」

N1:=HHVBARS(C,100);X1:=(REF(C,N1)/REF(LLV(C,100),N1)-1)*100;N2:=HHVBARS(C,200);X2:=IF(N1=N2,X1,(REF(H,N2)/REF(LLV(C,200),N2-1))*100);NN:=BARSCOUNT(C);

HHVBARS(C,100) 返回的是「100 日内最高收盘价出现在几天前」,今天就是最高时返回 0。拿这个天数去 REF 里回看,就定位到了那根最高的收盘。REF(C,N1)/REF(LLV(C,100),N1)-1 再乘 100,得到的就是从当时的 100 日最低到前高,涨了多少个百分点,记作 X1。

X2 是 200 日版本,写法上有个细节值得说:它算的是 (REF(H,N2)/REF(LLV(C,200),N2-1))*100,也就是「倍数 × 100」,没有减 1。所以 X2<200 对应的正是「前高不到 200 日低点的 2 倍」,和 X1<100 是同一个意思,只是 X2 的分子用的是那天的最高价 H,X1 用的是收盘价 C,所以 X2 会比 X1 略大一点。

IF(N1=N2,X1,...) 这一手是为了省算力:如果 100 日和 200 日的最高点是同一天,两个口径就等价,直接复用 X1。

NN:=BARSCOUNT(C) 是「到目前为止有多少根有效 K 线」,也就是上市了多少个交易日。它在 T1 里当开关用:上市不满 250 天就直接放行,因为 200 日高点还没形成,没法判断。

学习要点:HHVBARS(X,N) 返回的是周期数不是价格,常和 REF 搭配使用,这是通达信里「动态回看某个极值」的标准写法。注意并列最高时它取最近的那一天。

第2层:力度层,把影线和实体放大 50 倍

A1:=50*(MIN(C,O)-L)/REF(C,1);A2:=50*ABS(C-O)/REF(C,1);

这两条是整个公式里最容易被看漏的地方。A1:=50*(MIN(C,O)-L)/REF(C,1),取开盘价和收盘价里较低的那个,减去最低价,得到下影线的长度,再除以昨收、乘 50,就是「下影线占昨收的百分比再乘 50」。

为什么要乘 50?因为要卡的门槛是 A1<1。乘 50 之后,A1 小于 1 等价于下影线不到昨收的 2%。写成整数门槛,读起来更直观,也避免了 0.02 这种小数比较时的精度问题。

A2:=50*ABS(C-O)/REF(C,1) 同理,量的是实体。A2>A1 的意思就是「实体比下影长」,一根阳线要够扎实,不能是一根长长的下影小实体。

学习要点:实测在 T2 成立的 18.3 万个时点里,A1 的中位数只有 0.21(约 0.4% 的下影),95 分位 0.76(约 1.5%),最大值刚好卡在 1.00。也就是说这条门槛虽然写在公式里,但真正被它卡住的并不多,它是「排除长下影」的保险,不是主要矛盾。

第3层:起涨层,一根「有量有实体」的阳线

T1:=X1<100 AND IF(NN<250,1,X2<200);

T1 是位置门槛的组合:X1<100,再叠加「上市不满 250 天放行、否则要 X2<200」。一句话:离前高还没翻倍。

T2:=C>O AND REF(C<O,1) AND C>REF(C,1) AND V>REF(V,1) AND A1<1 AND A2>A1 AND V<3*REF(V,1);

T2 这一行里有 7 个条件,是全公式最密的一句,我拆成三组看:

形态组:C>O(今天阳线)、REF(C<O,1)(昨天阴线)、C>REF(C,1)(今天收得比昨天高)

量能组:V>REF(V,1)(放量)、V<3*REF(V,1)(但不超过昨天的 3 倍)

力度组:A1<1(下影不到 2%)、A2>A1(实体比下影长)

「放量但不超过 3 倍」这个上限是很多公式会漏的。只写放量,会把一字板、消息刺激的异常巨量也放进来;加了三倍上限,等于要求这是温和放量,量能是 1 到 3 倍之间。

第4层:蓄势层,缩量三连阳(全公式最狠的一层)

T3:=LLV(C,3)>REF(C,3) AND HHV(V,3)<REF(V,3) AND EVERY(C>O,3) AND UPNDAY(C,2) AND C/REF(C,3)<1.1;

这一行也是 5 个条件,我逐个说:

LLV(C,3)>REF(C,3):最近三天的最低收盘,高于三天前那天的收盘,即三天都没跌回去。

HHV(V,3)<REF(V,3):最近三天的最大成交量,小于三天前那天的量。这是全公式最苛刻的一条,下面有实测数字。

EVERY(C>O,3):三天连续收阳。

UPNDAY(C,2):收盘连续 2 个周期走高,配合上一条就是「三连阳且收盘递增」。

C/REF(C,3)<1.1:三天累计涨幅不到 10%,把「三连阳」限制在小步慢涨,不是连拉三个大阳。

这一层是「缩量」和「连阳」同时要求,方向上就产生了矛盾:连阳通常伴随放量,这里却要求三天里最大的量还小于三天前那一天。换句话说,三天前那天必须是一根「放量阳线」,而后面这三天的量,连其中最大的那根都不能超过它——是整体缩下去,不是一天比一天少。这就是为什么信号这么少。

第5层:接力层,把前两层往前挪

T4:=T1 AND T3 AND REF(T2,3);

T4 只做了一件事:T1 AND T3 AND REF(T2,3)。把「起涨那根放量阳线」要求成 3 天前发生的。所以 T4 成立的那一天,形态是:3 天前放量阳线起涨,紧接着这 3 天缩量三连阳。

第6层:确认层,再接一个 5 天冷却和一次回踩

T5:=REF(T4,5) AND REF(O,4)<REF(C,5) AND REF(C<O,2) AND REF(C,1)>REF(C,2) AND CROSS(REF(C,1),REF(C,4));

T5 是整条链的最后一环,四个条件:

REF(T4,5):上面那个「放量起涨 + 缩量三连阳」的形态,发生在 5 天前。

REF(O,4)<REF(C,5):4 天前那根低开,开盘价低于 5 天前的收盘价。

REF(C<O,2):2 天前是一根阴线(回踩)。

REF(C,1)>REF(C,2) 与 CROSS(REF(C,1),REF(C,4)):昨天收盘高于前天收盘(止跌抬起来),并且昨天收盘上穿四天前的收盘。

第7层:资格层

ZZX:=CODELIKE('60')||CODELIKE('00')||CODELIKE('30') AND CLOSE<80;XG:=T5 AND ZZX;

CODELIKE('60') 这类函数判断代码前缀,合起来就是「沪主板 60 开头、深主板 00 开头、创业板 30 开头」三类,再要求 CLOSE<80,把高价股排除在外。注意 || 是或运算,整句的优先级是「三类之一」并且「股价低于 80」。

原文 AND 前面是两个空格,通达信会忽略多余空白、不影响计算。本篇排版折成一个空格,是为了避免读者从公众号复制时带上 NBSP、粘进通达信变成 ?。

三、把时间轴摊开:信号到底在等哪 9 天

这个公式的层层 REF 容易绕晕,我把日子编号摊开,设信号日为第 0 天:

第 -8 天:那根「起涨」的放量阳线(T2 成立):昨日阴线、今日放量 1~3 倍的阳线、下影极短、实体盖过下影

第 -7 ~ -5 天:缩量三连阳(T3 成立):三天连收阳、收盘递增、三天最大量小于第 -8 天的量、三日涨幅不足 10%

第 -5 天:T4 在这一天成立(T1 + T3 + 3 天前的 T2)

第 -4 天:低开,开盘价低于第 -5 天的收盘价

第 -3 天:公式对它没有额外约束

第 -2 天:一根阴线(回踩)

第 -1 天:收阳且收盘高于第 -2 天,并且收盘越过第 -4 天的收盘

第 0 天(信号日):以上条件在今天被判定成立,主图画图标、副图画「★山河星池」

这里有个实战必须知道的事:信号比交叉晚一天。最后那条写的是 CROSS(REF(C,1),REF(C,4)),判断的是「昨天收盘」相对「四天前收盘」,交叉其实在第 -1 天就发生了,但公式在第 0 天才给出信号。等于是第二天才确认。信号日的开盘价,通常已经高于交叉当天的价格。

与之等价的写法是 CROSS(C,REF(C,3)) 再整体后移一根。为什么绕这么写,我从代码里看不出意图,但这个「晚一天」的效果是确定的。想要当天就出信号,把 CROSS(REF(C,1),REF(C,4)) 换成 CROSS(C,REF(C,3)) 即可,其余不动。

四、实践图鉴:61 次真实信号长什么样

4549 只票、235.6 万根日线逐根跑完,一共得到 61 次信号。下面 5 张图全部原样取自这 61 次,涨的和跌的都在,没有只挑好看的。

图 1|61 次信号的时间分布

先看一件比形态更要紧的事。61 次信号不是均匀撒开的:2026-07-13 这一天,全市场 22 只票同时出信号;2026 年 7 月一个月占 26 次,是全部的 43%。剩下 18 个月加起来才 35 次,大多数日子是零。

这个分布说明:它抓的更多是大盘级别的同步共振,而不是每只票各自走完了同一条路。哪天你打开软件看到满屏山河星池,先别急着高兴——那天多半是普涨日。

下面 4 张图,每张只讲一件事。看图时留意三个标注:① 引线指向起涨那根阳线,② 虚线框住三连阳那三天,③ 三角标记落在出信号那天。

图 2|东阿阿胶 000423,2024-12-11,收盘 58.62 元

一次完整的四段结构。① 11-29 一根放量阳线(开 56.57、收 57.93,量 682 万股),把前一天的阴线整个包了回去;② 12-02 至 12-04 三连阳,量分别是 456 / 338 / 432 万股;③ 12-11 回踩后站稳,出信号。

留意 ② 那三天的量:456 → 338 → 432,中间那天最少、第三天又回升了。公式要的是「三天里最大的那根量,也要小于起涨日那根」,不是「一天比一天少」。这一点最容易看反。

图 3|一鸣食品 605179,2026-07-13,收盘 12.86 元

出在低位的那一次。信号之前它刚从 17 元跌到 12 元附近、横盘两周。信号后先磨了一周,再启动,20 个交易日里区间最大上冲 +95%,是 61 次里涨得最多的一只。它同时也属于图 1 里那 22 只——那天满市场都在涨。

图 4|光韵达 300227,2026-09-08,收盘 13.95 元

同样的形态,结果相反。08-26 放量反包、三连阳缩量、09-08 回踩确认,四段结构一模一样。区别只有一处:它出在已经涨过一波的相对高位。信号后直接掉头,20 个交易日跌到 9.3 元附近,−33.1%,是 61 次里跌得最多的一只。

两张图并排看,只有一句话:形态成立,不等于会涨。决定成败的是它长在什么位置——这也是后面使用注意里反复强调位置的原因。

图 5|扬农化工 600486,2026-01-29,收盘 79.43 元

80 元这条线卡在哪。公式最后一行是 CLOSE<80,它收在 79.43 元,擦着边过线——再涨 0.57 元(0.7%),这个信号就根本不会出现。所以高价股不出信号,不是软件出了问题。

最后把 61 次的事后表现摊开。以信号日收盘价为基准,往后数第 N 个交易日收盘:

观察窗口
中位涨跌
上涨占比
最差一只
信号后 5 日
+0.73%
55.7%
−24.52%
信号后 10 日
−0.25%
42.6%
−22.29%
信号后 20 日
+2.44%
68.9%
−33.12%

另外两个数字更值得记:

• 20 个交易日内任意时点高于信号日收盘的:61 只 / 61 只(按区间最高点统计,属乐观口径)。

• 20 个交易日内最大回撤:中位 −5.46%,最深 −35.20%。

合起来读:信号之后大概率先挨一段回撤(一半的票 20 日内会跌超 5.46%),第 10 个交易日前后最难受(上涨占比只有 42.6%),20 日后才慢慢走出来。它给的是一个足够宽的观察窗口,而不是一个「见到就该动手」的结论。

五、实测数据与使用注意(必看)

5.1 信号有多稀少

4549 只(沪主板 / 深主板 / 创业板)× 每只最近 520 根日线 = 235.6 万根 K 线,逐根复算结果:

层
命中根数
说明
T1 位置门槛
1,885,559
八成时点都满足,几乎不设障
T2 起涨
182,962
7.8%,不算罕见
T3 缩量三连阳
24,259
1.0%,最狠的一层
T4 三层叠加
1,690
再砍掉 93%
T5 回踩确认
61
再砍掉 96%

折算下来:每股每年 0.01 次,全市场一年约 30 次。但这 30 次不是均匀分布的——2026 年 7 月一个月就占了 26 次,其余月份多数为零,详见第四节图 1。这个频率意味着你打开任意一只票,图上大概率三年都没有一个信号。

5.2 信号出在什么位置

61 个信号的位置统计(样本不大,仅供参考):

距 20 日均线乖离率:中位 2.88%,73.8% 的信号在 5% 以内 —— 这点很符合「回踩均线附近」的直觉

60 日涨幅:中位 -8.32%,只有 11.5% 的信号出现在 60 日涨幅超过 30% 之后(说明它不是追涨型)

相对 250 日最高:中位 76.4%,站上 250 日高 95% 以上的只占 26.2%(多数在半山腰及以下)

三条放在一起看:这个信号的典型位置是「跌了一段之后,第一次缩量整理完、在均线附近站稳」,而不是高位突破。

5.3 使用注意

1. 没有未来函数。公式里的 REF(LLV(C,200),N2-1) 看起来像往前推,实际是往后回看:只有 N2 等于 N1 时才走那个分支,而 N2=0(今天就是 200 日最高)时必然 N1=0,走的是 X1 分支。所以那个分支里 N2 至少是 1,N2-1 不会是负数,不会引用到未来数据。

2. 信号晚一天,见第三节。要当天出信号就换 CROSS(C,REF(C,3))。

3. 主图那条 2.8% 染色与信号无关,别当成信号看。

4. 副图没有价格坐标,只能看有没有信号;要看位置请用主图版。

5. 上市不满 250 天的票不判断位置(T1 直接放行),新股次新股的信号要更谨慎。

6. 主图 / 副图 / 选股三个版本选哪个?三版的计算部分逐行相同(只是主图把 T1/T2 改名成了 T11/T22 避开保留字),信号必然一致。要贴在图上看价格位置用主图版,要单独放一个窗口看「有没有」信号用副图版,做条件选股用选股版。

7. 股价 80 元以下是硬门槛,高价股不会出信号,这是原始设定,我未改动。

8. 原文两个空格的去处:ZZX 那行里 「'30')」和「AND」之间,原文是两个空格,通达信忽略多余空白、语义完全不变。本篇排版折成一个空格,是因为从公众号复制时浏览器会把连续空格写成 NBSP,粘进 GBK 的通达信会显示 ? 并报「某个操作数没有相应的操作符匹配」。副图 DRAWTEXT 里的 ★ 不用管,GBK 能正常显示。

六、可复用的写法

这套公式里有四个写法值得单独记住,以后自己写指标能直接用:

1. HHVBARS + REF 定位历史极值:先算「几天前」,再回看那一天的价格,比用 HHV 直接取值多了「知道在哪天」的信息;

2. 放大系数代替小数阈值:把 0.02 写成「×50 后小于 1」,门槛是整数,读代码时一眼能看懂;

3. HHV(V,N)<REF(V,N) 表达「缩量」:注意它比的是 N 天前那一天的量,而不是「一天比一天少」,两者不等价;

4. REF(条件, N) 直接对布尔值做时间平移:这是通达信很好用的一点,不用为每个条件单独写 REF。

七、完整源码(三版原样,复制前先对照上方解读)

第一段:主图版,19 行,加载到「技术指标公式 - 主图」,带图标、K 线染色和一条 10 日横线。

N1:=HHVBARS(C,100);X1:=(REF(C,N1)/REF(LLV(C,100),N1)-1)*100;N2:=HHVBARS(C,200);X2:=IF(N1=N2,X1,(REF(H,N2)/REF(LLV(C,200),N2-1))*100);NN:=BARSCOUNT(C);A1:=50*(MIN(C,O)-L)/REF(C,1);A2:=50*ABS(C-O)/REF(C,1);T11:=X1<100 AND IF(NN<250,1,X2<200);T22:=C>O AND REF(C<O,1) AND C>REF(C,1) AND V>REF(V,1) AND A1<1 AND A2>A1 AND V<3*REF(V,1);T3:=LLV(C,3)>REF(C,3) AND HHV(V,3)<REF(V,3) AND EVERY(C>O,3) AND UPNDAY(C,2) AND C/REF(C,3)<1.1;T4:=T11 AND T3 AND REF(T22,3);T5:=REF(T4,5) AND REF(O,4)<REF(C,5) AND REF(C<O,2) AND REF(C,1)>REF(C,2) AND CROSS(REF(C,1),REF(C,4));ZZX:=CODELIKE('60')||CODELIKE('00')||CODELIKE('30') AND CLOSE<80;XG:=T5 AND ZZX;DRAWICON(XG,L,1);STICKLINE(((C-REF(C,1))/REF(C,1)*100)>2.8,C,O,2,0),COLOR0000FF;STICKLINE(XG AND C>REF(C,1) AND C>O,OPEN,CLOSE,2,0),COLOR00FFFF;STICKLINE(XG AND C<REF(C,1) AND C<O,OPEN,CLOSE,2,0),COLOR00FF00;DRAWSL(XG,REF(L,1),0,10,2),COLOR00FF00;

第二段:副图版,21 行,加载到「技术指标公式 - 副图」,带三层信号柱和「★山河星池」字样。

N1:=HHVBARS(C,100);X1:=(REF(C,N1)/REF(LLV(C,100),N1)-1)*100;N2:=HHVBARS(C,200);X2:=IF(N1=N2,X1,(REF(H,N2)/REF(LLV(C,200),N2-1))*100);NN:=BARSCOUNT(C);A1:=50*(MIN(C,O)-L)/REF(C,1);A2:=50*ABS(C-O)/REF(C,1);T1:=X1<100 AND IF(NN<250,1,X2<200);T2:=C>O AND REF(C<O,1) AND C>REF(C,1) AND V>REF(V,1) AND A1<1 AND A2>A1 AND V<3*REF(V,1);T3:=LLV(C,3)>REF(C,3) AND HHV(V,3)<REF(V,3) AND EVERY(C>O,3) AND UPNDAY(C,2) AND C/REF(C,3)<1.1;T4:=T1 AND T3 AND REF(T2,3);T5:=REF(T4,5) AND REF(O,4)<REF(C,5) AND REF(C<O,2) AND REF(C,1)>REF(C,2) AND CROSS(REF(C,1),REF(C,4));ZZX:=CODELIKE('60')||CODELIKE('00')||CODELIKE('30') AND CLOSE<80;XG:=T5 AND ZZX;DRAWICON(XG,1.3,38);DRAWICON(XG,1.6,28);DRAWICON(XG,1.9,29);STICKLINE(XG,0,1,9,0),COLORLIMAGENTA;STICKLINE(XG,0,1,6,0),COLORFF00FF;STICKLINE(XG,0,1,1,0),COLOR00FFFF;DRAWTEXT(XG,0.75,' ★山河星池'),COLOR00FFFF;

第三段:选股版,14 行,放进「条件选股公式」,盘后海选。前 13 行与副图版逐行相同。

N1:=HHVBARS(C,100);X1:=(REF(C,N1)/REF(LLV(C,100),N1)-1)*100;N2:=HHVBARS(C,200);X2:=IF(N1=N2,X1,(REF(H,N2)/REF(LLV(C,200),N2-1))*100);NN:=BARSCOUNT(C);A1:=50*(MIN(C,O)-L)/REF(C,1);A2:=50*ABS(C-O)/REF(C,1);T1:=X1<100 AND IF(NN<250,1,X2<200);T2:=C>O AND REF(C<O,1) AND C>REF(C,1) AND V>REF(V,1) AND A1<1 AND A2>A1 AND V<3*REF(V,1);T3:=LLV(C,3)>REF(C,3) AND HHV(V,3)<REF(V,3) AND EVERY(C>O,3) AND UPNDAY(C,2) AND C/REF(C,3)<1.1;T4:=T1 AND T3 AND REF(T2,3);T5:=REF(T4,5) AND REF(O,4)<REF(C,5) AND REF(C<O,2) AND REF(C,1)>REF(C,2) AND CROSS(REF(C,1),REF(C,4));ZZX:=CODELIKE('60')||CODELIKE('00')||CODELIKE('30') AND CLOSE<80;山河星池X:T5 AND ZZX;

三段均为原文原样。唯一的排版处理是 ZZX 那行的连续空格,见 5.3 第 8 条。如果复制进通达信后出现问号或乱码,说明中间被编辑器吃掉了字符,请重新复制。

互动问答:

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

也可以说说:这种极低频的信号,你会配什么出场条件一起用。

制作不易,麻烦点亮右下角的 "赞" + "在看" 支持一下。

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

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

免责声明

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

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

相关学习资料