☰
通达信黄金K线指标源码拆解:均线、动量与资金确认的选股逻辑
2026/10/21 17:04:16 网站建设 项目流程

简介:适合股票投资者与通达信软件用户学习的黄金K线主图指标公式源码,以doc文档形式完整呈现。指标融合移动平均线、相对强弱、布林带等多类技术算法,通过加权平均和指数平滑组合计算,辅助判断股价走向、捕捉黄金K线信号,并为买入卖出与选股提供参考。文档共1个doc文件,压缩包整体约205KB,内含可直接查阅的源码及简要说明,便于对照通达信软件安装、调试和二次优化。目前已有1174人学习浏览,适合具备一定技术分析基础、希望提升主图观察效率的投资者。通过学习源码,可理解多周期均价线、动态量比、资金流向及突破条件等核心逻辑,掌握指标计算思路与参数调整方法,为后续自定义和改进符合自身风格的技术指标打下基础。

1. 通达信公式指标源码里的黄金K线主图指标公式:它到底算了什么

这份通达信公式指标源码,名字叫黄金K线主图指标公式,实际拆下来看并不是把K线涂成金色那么简单。我第一次把整段公式贴进公式管理器时,发现它至少包含四层独立逻辑:四价重心平滑、黄金分割加权、RSI式的动量能量、以及两套完全不同的资金口径。更意外的是,里面有四个变量定义完就再没被引用过,属于典型的从其他指标里摘录拼接留下的“幽灵代码”。对正在做复盘选股的投资者来说,它真正有用的地方不是黄色柱本身,而是这套“突破+资金确认”的选股思路。想直接拿来当买卖信号的人可能会失望,愿意把它当教程拆开看的人反而能收获一套可改造的模板。

2. 拆开核心公式:四价重心、黄金分割加权与多周期压力带

2.1 A值:把四根价格压成一条重心线

指标的第一步是定义“当前价格到底取多少”。很多主图公式习惯直接用收盘价,但遇到涨停、长上下影线时,单根收盘价容易被极端走势带偏。常见做法是用 HCLC 加权:(2*C+H+L+O)/5,也就是收盘价权重 2,其余各 1。这份源码把收盘价权重提到了 3,公式写为:

import pandas as pd df = pd.DataFrame({ "O": [10.2, 10.1, 10.5], "H": [10.6, 10.7, 10.9], "L": [10.0, 9.9, 10.3], "C": [10.5, 10.4, 10.8] }) # 原公式:A=(3*C+H+L+O)/6 df["A"] = (3 * df["C"] + df["H"] + df["L"] + df["O"]) / 6 print(df)

这里用三根模拟 K 线验证公式行为:权重合计 3+1+1+1=6,收盘价贡献 50%,最高、最低、开盘各占约 16.7%。A 值的走势会明显贴着收盘价,但又被高低开往回拉一点,比裸看收盘价更稳。如果你想调整敏感度,把系数 3 改成 4,A 会更贴近收盘价,信号更灵敏但毛刺也更多;改成 2 则更平滑,适合观察中期趋势。

2.2 XJ:一组黄金分割权重的前值加权

XJ 是整份指标命名来源,也是思路最有特点的一段。原始公式是:

XJ:=(A+0.618*REF(A,1)+0.382*REF(A,2)+0.236*REF(A,3)+0.146*REF(A,4))/2.382;

它的含义是取最近 5 个交易日的 A 值做加权平均,权重从近到远分别是 1、0.618、0.382、0.236、0.146,分母 2.382 正好是这些权重之和。也就是说,XJ 是一个完整的加权平均,而不是随意凑的比率。0.618 和 0.382 是黄金分割主比例,0.236 约等于 0.618 的三次方,0.146 约等于 0.382 的平方,整套系数都是从黄金分割比例衍生出来的。

w = [1.0, 0.618, 0.382, 0.236, 0.146] # 模拟最近5日A值,索引0为当日 A_list = [10.8, 10.5, 10.4, 10.6, 10.2] xj = sum(w[i] * A_list[i] for i in range(5)) / sum(w) print(xj)

对比普通 5 日算术均线,XJ 对当日 A 值的敏感度明显更高,因为当日权重超过 40%。5 天以前的数据完全不参与计算,所以它反应快,但也会放大单日波动。从实操角度看,XJ 更像是一条“被黄金分割系数平滑过的重心线”,它决定了后面 ZD 动量计算的基础。

2.3 A1 到 A5:PJ 加权均线族的双重过滤

XJ 之后紧接着是一段很容易被忽略的代码:

PJ:=(10*A+9*REF(A,1)+8*REF(A,2)+7*REF(A,3)+6*REF(A,4)+5*REF(A,5)+4*REF(A,6)+3*REF(A,7)+2*REF(A,8)+REF(A,9))/55; A1:EMA(PJ,3),COLOR004000; A2:EMA(PJ,5),COLOR004000; A3:EMA(PJ,7),COLOR004000; A4:EMA(PJ,9),COLOR004000; A5:EMA(PJ,11),COLOR004000;

PJ 是一个 10 周期线性加权均线,权重从当日 10 递减到 10 天前的 1,分母是 1 到 10 的和 55,本质就是把 A 做了一次 10 日 WMA。然后 A1 到 A5 是对 PJ 再做 EMA 平滑,参数分别是 3、5、7、9、11。为什么要二次平滑?因为单条 WMA 在拐点附近仍然会频繁上下穿,二次 EMA 能把短期抖动再滤掉一层。主图上这五条线从紧贴到发散的过程,相当于一套短中期趋势分层观察法。

我一般会这样理解这五条线:EMA 参数越小,线越贴近最新价格,A1 适合做短线防守线;A5 参数 11,更适合判断趋势是否还在。它们本身不产生买卖信号,但如果你发现 A1 到 A5 由粘合转向上行发散,说明趋势刚刚启动,和后面的突破条件叠加会更有效。把这组参数统一改大,信号数量会下降但稳定性上升。

2.4 上下轨 YCZXH 与 YCZXL:多周期压力带

源码里还有一对看起来像布林带的变量:

YCZXH:=(MA(HHV(A,2),5)+MA(HHV(A,2),13)+MA(HHV(A,2),21)+MA(HHV(A,2),32))/4; YCZXL:=(MA(LLV(A,2),5)+MA(LLV(A,2),13)+MA(LLV(A,2),21)+MA(LLV(A,2),32))/4;

先取 A 值两根 K 线内的最高值 HHV(A,2),然后分别用 5、13、21、32 日移动平均算出四条轨迹,最后再取平均。下轨 YCZXL 对称处理最低值 LLV(A,2)。它的含义是一条“多周期共振压力带”和“多周期共振支撑带”,比单纯的高低点连线更圆滑。

不过要注意一个细节:在这份源码里,YCZXH 和 YCZXL 只负责主图视觉参考,后面所有选股条件都没有引用它们。也就是说,它们属于“画了但不参与决策”的部分。如果你把它当作通道突破指标去用,会发现价格突破上轨后并不一定会触发黄金 K 线信号,因为资金确认条件还没满足。这个特点在后文选股逻辑里会更加明显。

3. 动量与KX信号:ZD的RSI式算法和一段没被用上的死代码

3.1 ZD:把XJ的涨跌映射成百分动量

源码进入第二部分后,出现了这样一段:

LX:=REF(XJ,1); ZD:=(SMA(MAX(XJ-LX,0),5,1)/SMA(ABS(XJ-LX),5,1))*100;

LX 是昨日的 XJ,MAX(XJ-LX,0) 表示当日 XJ 上涨的幅度,小于等于 0 时取 0;ABS(XJ-LX) 是 XJ 的绝对波动幅度。两者分别做 SMA 平滑后相除再乘 100,得到 ZD。通达信的 SMA(X,N,M) 是一条递归均线,当 M=1 时等价于平滑系数为 1/N 的指数平滑。这里 N=5,意味着 ZD 有约 5 日记忆。

从效果上看,ZD 就是“XJ 的 5 日 RSI”。它衡量的是过去一段时间内,XJ 上涨动量占总波动的比例。ZD 越高,说明 XJ 处于强势上攻状态;ZD 越低,说明下跌动量占主导。这个值天然被限制在 0 到 100 之间,所以在主图上做阈值判断非常方便。与直接比较 XJ 和 REF(XJ,1) 相比,ZD 能过滤掉单日跳空造成的假突破。

3.2 KX1 到 KX4:四类K线分组,公式里却没有引用

接下来是整份指标里最蹊跷的一段:

KX1:=(CLOSE=OPEN) AND ZD=50; KX2:=(CLOSE>OPEN) AND ZD=50; KX3:=(CLOSE=OPEN) AND ZD>50; KX4:=(CLOSE>OPEN) AND ZD>50;

按字面意思,KX1 是收平盘且 ZD 恰好等于 50,KX2 是阳线且 ZD 等于 50,KX3 是平盘且 ZD 大于 50,KX4 是阳线且 ZD 大于 50。看名字像要把 K 线按动量强度分成四类,但往下翻完整份源码,KX1 到 KX4 从未出现在任何画线或选股条件里。

这其实暴露了这类摘录拼接型指标的通病:作者从其他指标里复制了变量定义,却没有把后续逻辑一起接上。另一层隐患是ZD=50的写法。由于 ZD 是 SMA 平滑后乘 100 的结果,浮点计算下几乎不可能精确等于 50,所以 KX1 和 KX2 在实战中基本不会被触发。如果你期望看到 KX 分组信号,可以主动把它补全成“ZD 上穿 50”或“ZD 大于 50”,但这不是原作者的本意。

3.3 抄作业:在主图里加载这个公式的完整操作

要把这套指标跑起来,先打开通达信,按 Ctrl+F 打开公式管理器,选择“新建”,公式类型选“主图叠加”,公式名称可以填“黄金K线测试”。然后把下列这段前半部分源码粘贴进去:

A:=(3*C+H+L+O)/6; XJ:=(A+0.618*REF(A,1)+0.382*REF(A,2)+0.236*REF(A,3)+0.146*REF(A,4))/2.382; PJ:=(10*A+9*REF(A,1)+8*REF(A,2)+7*REF(A,3)+6*REF(A,4)+5*REF(A,5)+4*REF(A,6)+3*REF(A,7)+2*REF(A,8)+REF(A,9))/55; A1:EMA(PJ,3),COLOR004000; A2:EMA(PJ,5),COLOR004000; A3:EMA(PJ,7),COLOR004000; A4:EMA(PJ,9),COLOR004000; A5:EMA(PJ,11),COLOR004000;

粘贴完成后点击“测试公式”,编译通过后点确定。此时主图顶部会出现五条深绿色的平滑均线,A1 离价格最近,A5 离价格最远。如果编译报“未定义变量”,通常是复制时把 REF 函数括号后半段弄丢了,检查一下REF(A,1)这类括号是否完整。

提示:这段代码只是前半段,只画均线不画黄金柱。要看到完整的黄色 K 线柱,需要把后文资金选股部分一起加进去,但那一部分要先处理几个容易翻车的坑。

4. 资金确认与选股条件:净流入、二日比与均价线连续抬升

4.1 净流入的计算与折减技巧:AAA2 减 AAA3 再减 0.5 倍 AAA4

源码后段出现了三行最容易被忽略但也最重要的资金计算:

AAA2:=SUM(IF(CLOSE>REF(CLOSE,1),VOL*C,0),0); AAA3:=SUM(IF(CLOSE<REF(CLOSE,1),VOL*C,0),0); AAA4:=SUM(IF(CLOSE=REF(CLOSE,1),VOL*C,0),0); 净流入万元:=(AAA2-AAA3-0.5*AAA4);

AAA2 统计的是“收盘价高于昨收的交易日”的成交金额,AAA3 统计下跌日的成交金额,AAA4 统计平盘日的成交金额。作者用“上涨日金额 - 下跌日金额 - 0.5 倍平盘日金额”来估算主力净流入。平盘日扣 0.5 倍,是因为平盘日多空力量接近,折半处理更中性。这个口径本身不复杂,但SUM(...,0)是致命的坑。

SUM(X,0)在通达信里表示从上市第一天开始累计到当前这根 K 线。也就是说,AAA2 不是一个“当日值”,而是“历史所有上涨日成交额的总和”。用这个算出来的净流入万元会越滚越大,到后期变成天文数字,完全失去当日资金流向的参考意义。常见做法是改成单期判断,只取当天的上涨额、下跌额和平盘额:

当日涨额:=IF(CLOSE>REF(CLOSE,1),VOL*C,0); 当日跌额:=IF(CLOSE<REF(CLOSE,1),VOL*C,0); 当日平额:=IF(CLOSE=REF(CLOSE,1),VOL*C,0); 净额单日:=当日涨额-当日跌额-0.5*当日平额;

改完之后,净额会在 0 轴附近上下波动,正数代表当日资金净流入,负数代表净流出。后面接MA(净额单日,1)时才有实际意义。如果你坚持用原版累计值,选股结果会明显偏向上市时间久、累计成交额大的老股票,次新股基本没有机会。这是整份指标里我最建议动手改的第一处。

4.2 B1万元与“密码”:盘口资金量的二次平滑

再往下有一段命名非常有迷惑性的代码:

B1万元:=DVOL*CLOSE/100; B1差:=B1万元-REF(B1万元,1); B2万元:=DVOL*CLOSE/100; B2比:=B2万元/REF(B2万元,1); 密码:=EMA(MA(B1万元,2),2)/100000,COLORYELLOW,NODRAW; 二日比:=密码/REF(密码,1);

DVOL 是通达信里的分时成交量,单位是手。B1万元等于分时成交量乘以收盘价再除以 100,目的是把“手”这个单位折算成万元量级。然后又对 B1万元做了一次 2 日 MA,再做一次 2 日 EMA,最后除以 100000 得到“密码”。其实看穿之后它就是一条盘口资金量的二次平滑曲线,“密码”这个名字起得玄乎,本质并不神秘。

二日比则是今日密码与昨日密码的比值,大于 1 说明盘口资金量还在环比放大。如果你把“密码”输出到副图,会看到一条黄色曲线,但它标记了 NODRAW,所以默认不显示。想验证这条线,可以把NODRAW去掉,或者单独建一个副图公式引用它。

4.3 选股条件串起来:PMB、二日比与均价线2的三日抬升

选股信号由两部分拼成,先看资金部分:

PM:=MA(净流入万元,1); PMA:=PM>REF(PM,1)*1; PMB:=REF(PMA,1)=1 AND PMA; 选股:=PMB AND 密码>REF(密码,1) AND 二日比>1;

PM 是净流入的一日平均,PMA 判断今日净流入是否大于昨日,PMB 要求“昨日也满足、今日也满足”,也就是资金净流入连续两个周期放大。叠加“密码上行”和“二日比大于 1”两个条件后,选股条件实际上是一个严格的资金共振确认。再从价格端看突破:

均价线:=AMOUNT/V/100; 均价线2:=MA(均价线,3); 突破:=C>均价线2 AND 均价线2>REF(均价线2,1) AND REF(均价线2,1)>REF(均价线2,2) AND REF(均价线2,2)>REF(均价线2,3) AND 选股;

均价线是当日成交额除以成交量再除以 100,得到每股均价;均价线2 是它的 3 日均线。突破条件要求当前收盘价站上均价线2,且均价线2 已经连续抬升三天。换句话说,这只股票不仅价格站上短期成本线,而且短期市场成本在持续抬高,同时资金还在连续流入。最后用 STICKLINE 在满足条件的 K 线上画黄色实体柱和上下影线,并在最低价下方标注“黄金 K 线”。

4.4 把这套逻辑改造成完整可用的主图指标

根据上面的拆解,我把整体源码整理成一个修正版,方便你直接复制到公式管理器。改动点只有一个:把累计净流入换成单日净流入,其余保留原结构。

A:=(3*C+H+L+O)/6; XJ:=(A+0.618*REF(A,1)+0.382*REF(A,2)+0.236*REF(A,3)+0.146*REF(A,4))/2.382; PJ:=(10*A+9*REF(A,1)+8*REF(A,2)+7*REF(A,3)+6*REF(A,4)+5*REF(A,5)+4*REF(A,6)+3*REF(A,7)+2*REF(A,8)+REF(A,9))/55; A1:EMA(PJ,3),COLOR004000; A2:EMA(PJ,5),COLOR004000; A3:EMA(PJ,7),COLOR004000; A4:EMA(PJ,9),COLOR004000; A5:EMA(PJ,11),COLOR004000; LX:=REF(XJ,1); ZD:=SMA(MAX(XJ-LX,0),5,1)/SMA(ABS(XJ-LX),5,1)*100; 当日涨额:=IF(CLOSE>REF(CLOSE,1),VOL*C,0); 当日跌额:=IF(CLOSE<REF(CLOSE,1),VOL*C,0); 当日平额:=IF(CLOSE=REF(CLOSE,1),VOL*C,0); 净额单日:=当日涨额-当日跌额-0.5*当日平额; PM:=MA(净额单日,1); PMA:=PM>REF(PM,1)*1; PMB:=REF(PMA,1)=1 AND PMA; B1万元:=DVOL*CLOSE/100; 密码:=EMA(MA(B1万元,2),2)/100000; 二日比:=密码/REF(密码,1); 选股:=PMB AND 密码>REF(密码,1) AND 二日比>1; 均价线:=AMOUNT/V/100; 均价线2:=MA(均价线,3); 突破:=C>均价线2 AND 均价线2>REF(均价线2,1) AND REF(均价线2,1)>REF(均价线2,2) AND REF(均价线2,2)>REF(均价线2,3) AND 选股; STICKLINE(突破,O,C,3,0),COLORYELLOW; STICKLINE(突破,H,C,0.01,0),COLORYELLOW; STICKLINE(突破,L,O,0.01,0),COLORYELLOW; DRAWTEXT(突破,L*0.98,'黄金K线'),COLORYELLOW;

这个版本在通达信里测试通过后,主图会在满足条件的 K 线位置画出黄色柱和文字。注意 STICKLINE 的第二个参数是开盘价,第三个是收盘价,如果突破当天是阴线,柱体会显示为从开盘到收盘的倒挂柱,视觉上需要你自己习惯一下。

5. 避坑记录:导入报错、信号滞后与SUM累计的五个坑

5.1 坑一:公式编译通过,但主图永远不画黄色柱

现象:把完整源码粘贴进公式管理器,测试公式显示编译通过,但回到主图界面,K 线区域干干净净,没有黄色柱也没有“黄金 K 线”文字。

原因:突破条件串了很长的 AND 链条,其中任何一环取不到有效值,整个条件就恒为假。最常见的是 B1万元里的 DVOL 在某些股票上取不到数据,或者净额单日一直为 0,导致选股条件不成立。

解决:先做二分定位。把突破条件末尾的AND 选股删掉,测试是否出现黄色柱;再逐步把选股条件拆回来看是“密码”还是“PMB”为空。我一般会在公式里临时输出一条测试线,例如测试:MA(净额单日,1);放到副图,看它是不是一条水平直线。

5.2 坑二:净流入万元越滚越大,选股信号像中彩票一样稀少

现象:按原始源码跑,大部分股票永远不出信号,少数老股票反复出信号,而且信号出现后走势已经走完一大半。

原因:SUM(IF(...),0)是从上市第一天开始累计,AAA2 和 AAA3 都是巨量级数值,相减之后净流入万元完全失去资金流向含义。PM 实际上是一根长期向上的惰性曲线,PMA 和 PMB 几乎很难同时满足,选股条件就对历史累计金额极其敏感。

解决:把累计 SUM 改成单日 IF,也就是第四节给出的“当日涨额、当日跌额、当日平额”写法。如果你保留原版,务必知道信号会被老股票占便宜,这个坑不处理,后面的参数调整都白做。

5.3 坑三:黄色柱出现之后股票继续大跌

现象:某只股票在低位横盘后突然出现黄金 K 线柱,次日冲高回落,后续五个交易日累计下跌超过 10%,让人怀疑指标是不是反向信号。

原因:突破条件本质是“价格站上三日均价线 + 均价线连续三日抬升 + 资金连续两日放大”,这已经是上涨中后段的确认信号。原作者自己也承认,出现黄金 K 线时也有下跌厉害的地方,结果只能由将来验证。这个指标没有任何离场或止损逻辑,它只负责告诉你“当前满足了一组共振条件”,不负责预测未来。

解决:把黄金 K 线当作观察点而不是买点。我通常会把突破日的 K 线最低价作为一个防守位,跌破就放弃跟踪。至少等信号出现后第二根 K 线不破前低,再考虑是否进场。

5.4 坑四:KX1 到 KX4 是幽灵代码,别按 KDJ 思路去理解

现象:细心的人会发现源码里定义了 KX1、KX2、KX3、KX4 四类 K 线分组,但无论怎么调整参数,主图上都没有与它们相关的输出。

原因:这四行变量在定义之后从未被任何后续代码引用,属于从其他指标摘录时留下的残余。加上ZD=50在浮点计算下极难精确成立,即便你想手动引用它们,信号也会少得可怜。

解决:放弃基于 KX 的固定分组思路。如果确实需要动量分组,可以把条件改为ZD>50 AND C>O这种更宽松的写法,或者用CROSS(ZD,50)捕捉动量上穿。

5.5 坑五:把均价线2参数从 3 改成 5,信号数量暴减

现象:为了让信号更稳定,把MA(均价线,3)改成MA(均价线,5),结果几乎找不到黄金 K 线了。

原因:突破条件里已经叠加了“均价线2 连续三日抬升”和“选股”两个强约束,再拉长均线周期等于把条件从短突破改成中突破,历史样本会成倍减少。短均线在小级别反弹中经常出现三日连升,长均线则需要更持久的趋势。

解决:改参数时一定要看全链条。想减少信号,优先收紧资金条件,比如把净额单日的门槛从大于 0 改成大于某一分位值;想增加信号,优先放宽二日比条件,而不是动均线周期。参数没有绝对好坏,只有信号频率和盈亏比的权衡。

6. 从黄金K线到可验证的选股流程:改参、预警与信号回溯

如果你已经让黄色柱在主图正常显示,下一步不是急着找股票,而是先把它变成一套能重复验证的流程。我把这套流程拆成三步,每一步都不依赖盘感。

第一步是建一个独立的选股指标。把修正版里的画线部分全部去掉,保留 A、XJ、ZD、净额单日、密码、二日比、均价线2 和突破条件,最后单独输出突破。在通达信的公式管理器里新建一个“条件选股公式”,把突破作为输出项,然后在“条件选股”面板里选择它,就能一键筛出当天满足全部条件的股票。筛选结果建议加入自定义板块,命名为“黄金K线观察池”。

第二步是设定信号频率上限。黄金 K 线的本质是资金与价格的共振确认,在强趋势市里可能每天都有几十只,在震荡市里可能一周都不到一只。我的做法是统计最近 100 个交易日的信号数量:如果超过 50 次,说明条件太松,把净额单日条件改成净额单日>MA(净额单日,20),让资金流入跑赢近期均值;如果少于 5 次,把二日比>1放宽成二日比>0.95,多给一点缓冲。调整幅度每次不要超过一个参数,否则你无法判断是哪个改动起作用。

第三步是做信号回溯,这是整份资源最有价值的部分。把观察池里每次信号出现的日期记录下来,统计信号出现后 5 日、10 日、20 日的最大涨幅和最大回撤。对比同时间段内随机日期的平均收益,才能判断这套指标到底有没有正向贡献。我习惯用 python 快速完成这个统计:

import pandas as pd # signals: 信号日期列表,prices: 对应股票日线数据 def roll_returns(signals, prices, horizons=[5, 10, 20]): result = {} for h in horizons: returns = [] for day in signals: if day in prices.index and day + h in prices.index: r = prices.loc[day + h, "C"] / prices.loc[day, "C"] - 1 returns.append(r) result[h] = sum(returns) / len(returns) if returns else 0 return result

这段代码统计每个信号日后固定周期的平均收益,数字是正是负一眼就能看出来。不要只看最近几次信号的成功率,样本至少要有 30 次以上。某朋友当年就是吃了这个亏,看到最近三次信号都涨,重仓跟进后连续两次亏损,后面才知道是样本太小。从那以后我每次拆到类似指标,都会先做两步:一是搜索“定义后未被引用的变量”,二是做历史信号统计,两步走完才敢谈参数优化。这套思路不保证找到圣杯,但至少能让你知道正在用的东西有没有笼子、笼子在哪。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询