写通达信KDJ金叉公式之前要纠正一个印象:金叉不是 KDJ 本身的一部分,而是在 K 与 D 两条输出之上再定义的一层条件。KDJ 算出来的是三条数值序列,交叉与否需要另写一句条件去判断。这一层分清楚了,参数改动影响哪一段、条件写错了怎么看出来,都能各自定位。

下面按「三个输出怎么算、金叉的两种写法、参数与周期的影响、钝化、验证、边界」的顺序讲。全文只讲计算口径与条件写法,不涉及任何品种判断,也不把交叉当作用来处理的信息。文中默认参数与函数名以通达信金融终端为参照。

一、KDJ 的三个输出怎么算

KDJ 的计算分两步。第一步把收盘价在最近 N 根区间里的位置换算成一个百分数,这一步得到的是一个中间变量;第二步对这个中间变量做两次带权重的平滑,得到 K 与 D,再由 K 与 D 推出 J。

{ 通达信KDJ金叉公式的三个输出 }
中间变量 = (收盘价 - N 根最低价的最小值) ÷ (N 根最高价的最大值 - N 根最低价的最小值) × 100
K = 对中间变量做 M1 期加权平滑
D = 对 K 做 M2 期加权平滑
J = 3 倍 K 减去 2 倍 D
{ 通达信内置 KDJ 的默认参数是 9、3、3,可在参数表里看到并修改 }

三步里第一步最关键,它决定了三条输出的大致形态。收盘价靠近区间高点时,中间变量接近 100;靠近低点时接近 0。K 与 D 是对这条中间变量做的平滑,因此它们的取值区间也在 0 到 100 之间,而 J 由 K 与 D 线性组合得到,取值范围会超出这个区间。

中间变量的分母存在取不到值的位置。当 N 根内的最高价与最低价相等时,分母为 0,这一步算不出结果。这类位置在公式里的表现是输出为空或输出异常,处理办法是在分母上加一个极小的常数,或先用条件把这类位置排除。相关写法可以对照 公式报错与卡顿排查 一栏里关于空值处理的说明。

二、金叉的两种写法

判断金叉有两种写法,含义并不相同。一种判断的是「交叉这一根」,另一种判断的是「当前处于交叉之后的状态」。混用会让输出的根数差出许多。

写法 含义 命中的根数
交叉判定 上一根 K 在 D 下方,本根 K 在 D 上方 每个交叉位置一根
状态判定 本根 K 高于 D 交叉之后连续的多根

交叉判定的写法在表达上更准确,但它只标记交叉发生的那一根。把这个条件用于图上标注,看到的是一根根独立的标记;用于条件选股,得到的是发生交叉的位置列表。状态判定把条件放宽成持续成立,用于观察「处于什么状态」更合适。

{ 两种写法的判别办法 }
把条件输出到副图,看命中位置的分布
命中位置互相分离,间隔若干根 → 交叉判定
命中位置连成一段,中间无间隔 → 状态判定
{ 分布形态本身就是答案,不必回头读源码 }

还有一处需要提前定下来的是取值区间的方向。把三条输出按固定边界做一次反向换算,相当于把位置换成反向位置,此时交叉判断的方向也随之反转。公式里如果同时存在正向与反向两种写法,输出会互相矛盾。做法是在注释里写明所采用的区间方向,或者统一成一种方向。

三、参数与周期的影响

三个参数里,N 决定取样窗口,M1 与 M2 决定平滑程度。改动任何一个都会同时改变三条输出的形态,而交叉条件建立在输出之上,因此参数改动对交叉位置的影响是成片的,不是局部的。

{ 参数改动的方向 }
N 变小 → 区间取样更短,中间变量的波动变大,交叉更频繁
N 变大 → 中间变量更平滑,交叉位置减少且整体后移
M1、M2 变大 → K 与 D 更平滑,两条线的距离收窄,交叉位置减少
{ 参数改动之后,原有的交叉位置需要全部重新核对 }

周期的影响类似。同一组参数在日线与三十分钟线上的取样长度不同,覆盖的时间跨度相差若干倍。把公式从一个周期搬到另一个周期时,参数需要重新确定,而不是沿用原值。

调参时一次只改一个参数,改完把三条输出画在副图上与改之前对照。三个参数同时改,交叉位置的变化无法归因到具体某一项,只能靠猜。

四、钝化:在极值附近停留

K 与 D 落在区间两端附近并持续停留,是这类公式写起来最需要提前说明的情形。此时两条线的距离很小,交叉判断会连续命中,输出的位置密集地排在连续若干根上。

判断是否处在停留状态,看中间变量的取值即可:它接近 100 或接近 0,说明这段时间价格一直在区间的一端。此时交叉发生的频率上升,而两次交叉之间并没有对应的形态变化,输出的位置在图上连成一片。

{ 停留在极值附近时的三种处理思路 }
思路一:只保留第一次交叉,后面的用连续函数压掉
思路二:加一个区间条件,把条件限制在中间区域
思路三:不做处理,在公式说明里注明这一点
{ 三种都能用,差别在于输出要不要保留完整信息 }
不处理停留期,输出会在极值附近连成一片;处理过头,会把同一段里的其他交叉一并压掉。取舍的标准是先想清楚输出是用来统计位置还是用来数次数,两者的取舍方向相反。

判断是否进入停留状态可以用中间变量来做:把它接近区间两端的根数统计出来,与总根数比较,就能看出停留占了多长一段。这个比值本身也是一项可以记录的口径,参数改动之后重新统计一次,能看出改动对停留长度的影响。

五、把中间变量输出出来核对

核对通达信KDJ金叉公式的做法是把中间变量与 K、D 一并输出到副图,与内置 KDJ 指标逐根对照。三条线都重合,说明计算口径一致;只有 J 不重合,说明 J 的组合方式与内置不同;中间变量不重合而 K、D 重合,说明平滑部分的写法与内置一致,但取样窗口定义的细节有差别。

  1. 新建副图公式,参数取与内置指标相同的值。
  2. 输出中间变量、K、D 三条线,与内置 KDJ 挂到同一副图。
  3. 逐根对照三条线的数值,确认重合范围。
  4. 把交叉条件单独输出一次,确认命中位置的分布符合预期。

对照的意义在于把差异定位到具体的计算环节。三条线都重合而交叉位置不符合预期,说明问题在条件写法上,与计算无关;三条线不重合,改条件不会让它们对上,需要先把计算口径统一。

核对之后把结果记下来:内置指标的参数取值、自编公式的参数取值、以及三条线重合的范围。这份记录在换周期、换品种之后仍然有效,只需要在新的图表上重做一次对照,不必重新推一遍计算过程。

六、边界

需要说明的是,KDJ 的三条输出与交叉位置都只是公式算出来的结果。参数不同、周期不同,同一段行情上的交叉位置就不同,输出的位置本身不携带可比较的基准。把参数与周期一并记录下来,输出才有参照。用法上可以对照 量价形态与信号拆解 一栏里其他条件的拆解方式。

写到这里可以收一句:通达信KDJ金叉公式里可以核对的只有两件事——三条输出是否与内置一致,以及交叉条件命中的位置是否符合预期。前者改口径,后者改条件,两条路不交叉。

文中计算公式、默认参数与函数用法以通达信金融终端为参照;不同版本与券商定制版对默认参数取值、平滑函数的加权方式以及 J 值的定义可能存在差异,请以你所用版本指标参数表与公式编辑器内函数说明的记载为准。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。