把KDJ和MACD来个二合一 发生奇特功效幅图TDX00500

指标源码

{---KDJ(9.3.3)----}
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:SMA(RSV,3,1),COLORFF9900;
D:SMA(K,3,1),COLOR00FF00,LINETHICK2;
J:3*K-2*D,COLOR00FFFF,LINETHICK1;
DRAWBAND(J,RGB(60,0,60),D,RGB(60,80,60));
3*K-2*D,COLOR00FFFF,LINETHICK1;
SMA(K,3,1),COLOR00FF00,LINETHICK2;
IF(D>REF(D,1),D,DRAWNULL),COLOR0000FF,LINETHICK2;
{----MACD(26.12.9)----EMA---}
{DIFF:=(EMA(CLOSE,12) - EMA(CLOSE,26));
DEA:=EMA(DIFF,9);
MACD:2*(DIFF-DEA),LINETHICK0;}
{----MACD(26.12.9)----WMA----}
DIFF:=WMA(CLOSE,12)-WMA(CLOSE,26);
DEA:=WMA(DIFF,9);
MACD:2*(DIFF-DEA),LINETHICK0;
Q:=100;
SZ:=MACD>REF(MACD,1);
STICKLINE(SZ,REFDATE(HHV(J,0),DATE),REFDATE(-50,DATE),6,0),COLORDD0000; {-------波段背景------};
STICKLINE(SZ,0,MACD*1*Q,1.0.05,0),COLOR0000CC;
STICKLINE(SZ,0,MACD*0.8*Q,1,0),COLOR0011FF;
STICKLINE(SZ,0,MACD*0.6*Q,1.3,0),COLOR0055FF;
STICKLINE(SZ,0,MACD*0.4*Q,1.6,0),COLOR0099FF;
STICKLINE(SZ,0,MACD*0.2*Q,2,0),COLOR00DDFF;
XD:=MACD<REF(MACD,1);
STICKLINE(XD,0,MACD*1*Q,1.0.05,0),COLORFF0000;
STICKLINE(XD,0,MACD*0.8*Q,1,0),COLORFF3311;
STICKLINE(XD,0,MACD*0.6*Q,1.3,0),COLORFF7733;
STICKLINE(XD,0,MACD*0.4*Q,1.6,0),COLOR999933;
STICKLINE(XD,0,MACD*0.2*Q,2,0),COLOR88DD00;
SMA(K,3,1),COLOR00FF00,LINETHICK2;
3*K-2*D,COLOR00FFFF,LINETHICK1;
DRAWBAND(J,RGB(60,0,60),D,RGB(60,80,60));
3*K-2*D,COLOR00FFFF,LINETHICK1;
SMA(K,3,1),COLOR00FF00,LINETHICK2;
IF(D>REF(D,1),D,DRAWNULL),COLOR0000FF,LINETHICK2;
0,DOTLINE;80,DOTLINE;
{高抛低吸}
SJ:=WMA(((2*C+H+L)/4-LLV(L,5))/(HHV(H,5)-LLV(L,5))*100,2); 
ZJ:=WMA(0.618*REF(SJ,1)+0.382*SJ,2); 
MR:=CROSS(SJ,ZJ) AND SJ<30;
MC:=CROSS(ZJ,SJ) AND SJ>70;
AA8:=100*EMA(EMA(C-REF(C,1),8),5)/EMA(EMA(ABS(C-REF(C,1)),8),5);
买:=LLV(AA8,2)=LLV(AA8,8) AND COUNT(AA8<0,2) AND CROSS(AA8,WMA(AA8,2));
DRAWTEXT(MR ,J,'↖加仓1,'),COLOR00FFFF;
DRAWTEXT(FILTER(买,5),J,'↖加仓 2.'),COLOR00FFFF;
卖:=HHV(AA8,2)=HHV(AA8,8) AND COUNT(AA8>0,2) AND CROSS(WMA(AA8,2),AA8);
DRAWTEXT(MC,J,'↙减仓1,'),COLOR00FF00;
DRAWTEXT(FILTER(卖,5),J,'↙减仓 2'),COLOR00FF00;

下面把这段 通达信(TDX) “KDJ+MACD 二合一” 幅图源码逐段拆解,说明每个模块的算法初衷、绘图方式以及在实际使用时需要注意的细节,最后给出 复制/粘贴使用方法常见问题与改进建议,帮助您快速上手并根据自身需求进行微调。


1. 代码整体结构概览

区块 位置(行号) 主要功能
KDJ 计算 第 3‑7 行 计算 9‑周期 RSV → K、D → J 曲线
MACD 计算 第 10‑13 行 WMA(加权移动平均)代替 EMA,得到 DIFF、DEA、MACD
绘图‑KDJ 第 8 行、14‑15 行、22‑23 行 DRAWBAND、SMA、DOTLINE 等绘制 K、D、J 曲线
绘图‑MACD 背景 第 15‑27 行 当 MACD 上涨(SZ)时画红色系柱子;下跌(XD)时画绿色系柱子
高抛低吸信号 第 30‑41 行 计算 “SJ、ZJ、MR、MC、买、卖” 条件并用 DRAWTEXT 在图上标注 “↖加仓1/2”“↙减仓1/2”
辅助线 第 28‑29 行 0、80 虚线(KDJ 超买/超卖参考)

注意:代码里出现两次 DRAWBANDSMAK、D、J 的绘制语句,属于冗余但不影响运行。下面会逐行解释。


2. 各模块详细分析

2.1 KDJ(9,3,3)

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:SMA(RSV,3,1),COLORFF9900;
D:SMA(K,3,1),COLOR00FF00,LINETHICK2;
J:3*K-2*D,COLOR00FFFF,LINETHICK1;
DRAWBAND(J,RGB(60,0,60),D,RGB(60,80,60));
  • RSV:9 日内收盘价相对最低/最高价的相对位置(%)。
  • K、D:RSV 的 3‑日平滑(SMA),分别取 3,1(即简单移动平均)。
  • J:3K‑2D,常用公式,波动最大。
  • DRAWBAND:把 J(紫色)和 D(绿色)用半透明带状填充,视觉上帮助判断 J 与 D 的交叉。

调参提示:如果想把 KDJ 改成 9‑3‑3(默认)或其它周期,只需把 9 改成你想要的 N(如 14),3 改成 M(如 3)即可。

2.2 MACD(26,12,9)—使用 WMA 而非 EMA

DIFF:=WMA(CLOSE,12)-WMA(CLOSE,26);
DEA:=WMA(DIFF,9);
MACD:2*(DIFF-DEA),LINETHICK0;
  • 这里采用 加权移动平均(WMA),比 EMA 更“灵敏”。如果想恢复经典的 EMA 版,只需把 WMA 替换成 EMA(注释里已给出 EMA 版本的旧代码)。
  • MACD = 2*(DIFF‑DEA) 与常规的 MACD = DIFF‑DEA 等价,只是把柱状幅度放大两倍,便于观察。

调参提示:若想改成 12,26,9(默认)或 5,35,5 等,可直接修改 12、26、9 这三个数字。

2.3 MACD 背景(柱状)——涨/跌颜色区分

Q:=100;
SZ:=MACD>REF(MACD,1);
STICKLINE(SZ,REFDATE(HHV(J,0),DATE),REFDATE(-50,DATE),6,0),COLORDD0000; // 波段背景
STICKLINE(SZ,0,MACD*1*Q,1,0.05,0),COLOR0000CC;
STICKLINE(SZ,0,MACD*0.8*Q,1,0),COLOR0011FF;
...
XD:=MACD<REF(MACD,1);
STICKLINE(XD,0,MACD*1*Q,1,0.05,0),COLORFF0000;
...
  • SZ(涨)= 当期 MACD 大于前一期;XD(跌)= 当期 MACD 小于前一期。
  • STICKLINE 用来在副图上绘制“柱子”。Q=100 把 MACD 放大 100 倍,以便在 0‑100 的坐标系中显示(因为 MACD 本身往往在 -2~+2 之间)。
  • 颜色:上涨显示 蓝‑青(COLORDD0000、COLOR0000CC …),下跌显示 红‑黄(COLORFF0000 …),形成明显的多空背景。

语法小坑:原始代码里出现 1.0.05(类似 1.0.05),这是 STICKLINE 参数写错了。正确写法是 STICKLINE(COND, LOW, HIGH, WIDTH, OFFSET),即 STICKLINE(SZ,0,MACD*Q,1,0.05,0)(宽度 1,偏移 0.05)。如果你想保持原样也可以直接粘贴,TDX 可能会容忍这种错误,但建议改成标准形式。

2.4 “高抛低吸”信号(买入/卖出)

2.4.1 计算 SJ、ZJ(基于典型价的 5‑日威廉姆斯 %R 变体)

SJ:=WMA(((2*C+H+L)/4-LLV(L,5))/(HHV(H,5)-LLV(L,5))*100,2);
ZJ:=WMA(0.618*REF(SJ,1)+0.382*SJ,2);
  • SJ:先算典型价 (2*C+H+L)/4,再把它转化为类似 威廉姆斯 %R(0‑100)再进行 2‑日 WMA 平滑。
  • ZJ:是 SJ 的加权移动平均(0.618 与 0.382 为斐波那契权重),起到“中期均线”的作用。

2.4.2 交叉信号

MR:=CROSS(SJ,ZJ) AND SJ<30;   // “加仓1” – SJ 上穿 ZJ 且在超卖区
MC:=CROSS(ZJ,SJ) AND SJ>70;   // “减仓1” – SJ 下穿 ZJ 且在超买区
  • MR(买1) – SJ 从下往上突破 ZJ,且 SJ<30(超卖),表明价格可能即将反弹。
  • MC(卖1) – SJ 从上往下突破 ZJ,且 SJ>70(超买),预示回调风险。

2.4.3 低位买入选股(买2)

AA8:=100*EMA(EMA(C-REF(C,1),8),5)/EMA(EMA(ABS(C-REF(C,1)),8),5);
买:=LLV(AA8,2)=LLV(AA8,8) AND COUNT(AA8<0,2) AND CROSS(AA8,WMA(AA8,2));
  • AA8:先算 8 日收盘价变动(C-REF(C,1))的 EMA,再除以 8 日 绝对变动 的 EMA,形成一种 动量比率
  • 信号:AA8 在最近 2 日创 8 日最低,且最近 2 天均为负(AA8<0),随后出现 AA8 上穿其 2‑日 WMA,确认转为正动量。

2.4.4 高位卖出(卖2)

卖:=HHV(AA8,2)=HHV(AA8,8) AND COUNT(AA8>0,2) AND CROSS(WMA(AA8,2),AA8);
  • 与买相反:AA8 在最近 2 日创 8 日最高,且最近 2 天均为正,随后出现 AA8 下穿其 2‑日 WMA,确认动量转负。

2.4.5 文字标注

DRAWTEXT(MR ,J,'↖加仓1,'),COLOR00FFFF;
DRAWTEXT(FILTER(买,5),J,'↖加仓 2.'),COLOR00FFFF;
DRAWTEXT(MC,J,'↙减仓1,'),COLOR00FF00;
DRAWTEXT(FILTER(卖,5),J,'↙减仓 2'),COLOR00FF00;
  • DRAWTEXTJ 曲线(或当前坐标系)上打印文字。FILTER(买,5)FILTER(卖,5) 表示过滤掉连续 5 根 K 线内的重复信号,以免文字堆积。

提示:如果想在 主图(K 线图)上显示信号,只需把 J 换成 C(收盘价)或 L(最低价)即可。


3. 使用方法(一步一步)

前提:您已经在通达信(TDX)客户端登录并拥有 公式编辑器(公式管理器)的权限。

  1. 打开公式管理器

    • 菜单:功能 → 公式管理器(或快捷键 Ctrl+F),进入 “指标公式” 页面。
  2. 新建指标

    • 点击 新建,弹出 “指标编辑” 窗口。
    • 在 “公式名称” 中填入 KDJ_MACD_二合一(任意名称)。
    • “指标类型” 选 幅图(副图)
    • “备注” 可自行填写,例如 “KDJ+MACD 组合幅图”。
  3. 粘贴源码

    • 将上面的完整代码粘贴到 源码 框中。
    • 建议:把出现 1.0.05STICKLINE 改成 1,0.05(即 STICKLINE(SZ,0,MACD*Q,1,0.05,0)),避免潜在错误。
  4. 保存

    • 点击 保存 → 确认。
  5. 在行情图上添加

    • 打开任意股票的 日线/分钟线 图表。
    • 在主图(K 线)上右键 → “叠加指标” → “选择指标”。
    • 在弹出的列表中找到刚才创建的 KDJ_MACD_二合一,双击或点 “确定”。
    • 该指标会出现在 副图(底部)区域,显示 KDJ 曲线和 MACD 背景柱子。
  6. 查看信号

    • 当满足 MRMC 条件时,文字 “↖加仓1/2”“↙减仓1/2” 将在副图的 J 曲线附近弹出。
    • 您可以点击 “设置”(指标右边的齿轮)调整 K、D、J 的颜色、线宽,或打开 “显示数值” 查看具体数值。

4. 常见问题 & 小技巧

现象 原因 处理办法
柱子颜色不明显 Q=100 可能导致柱子高度太大或太小;STICKLINEWIDTHOFFSET 参数不匹配 调整 Q(如改为 50)或把 STICKLINEWIDTH 改为 0.8、OFFSET 改为 0.02
文字堆在一起 MR 同时出现,或 FILTER 参数太小 FILTER(买,5) 改成 FILTER(买,10),或把 MR 用不同的 DRAWTEXT 位置(如 J+5)区分
想用 EMA 替代 WMA 目前 MACD 用 WMA,想恢复传统 EMA DIFF:=WMA(CLOSE,12)-WMA(CLOSE,26); 改为 DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA 同理
想让信号显示在主图 只想看买卖点,不想看 KDJ/MACD DRAWTEXT 中的 J 换成 L(最低价)或 C(收盘价),并把 STICKLINEDRAWBAND 之类删除,只保留买卖信号部分
想改 KDJ 参数 默认 9‑3‑3 RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; 中的 9 改为 NSMA(RSV,3,1) 中的 3 改为 MK:=SMA(RSV,3,1);3 同样改为 M;同理改 D 的平滑参数
出现 “变量未定义” 错误 源码里误把 MACD*1*Q 写成 MACD*1*Q(缺少括号) 确认每个 STICKLINE 第三个参数是 MACD*Q(或 MACD*1*Q),最好加上括号 (MACD)*Q

5. 简单的改进示例(可选)

下面提供一份 去冗余、兼容 EMA、修复 STICKLINE 的 “干净版”。您可以直接把它复制到公式编辑器中替换原代码。

// ------------------------------------------------------------
// KDJ+MACD 二合一幅图(兼容 EMA,修复 STICKLINE 语法)
// ------------------------------------------------------------
{----- KDJ (9,3,3) -----}
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:SMA(RSV,3,1),COLORFF9900;
D:SMA(K,3,1),COLOR00FF00,LINETHICK2;
J:3*K-2*D,COLOR00FFFF,LINETHICK1;
DRAWBAND(J,RGB(60,0,60),D,RGB(60,80,60));

{----- MACD (12,26,9) -----}
DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA),LINETHICK0;

{----- MACD 背景柱子 -----}
Q:=100;
SZ:=MACD>REF(MACD,1);
XD:=MACD<REF(MACD,1);
STICKLINE(SZ,0,MACD*Q,1,0.05,0),COLOR0000CC;
STICKLINE(SZ,0,MACD*0.8*Q,1,0),COLOR0011FF;
STICKLINE(SZ,0,MACD*0.6*Q,1,0),COLOR0055FF;
STICKLINE(SZ,0,MACD*0.4*Q,1,0),COLOR0099FF;
STICKLINE(SZ,0,MACD*0.2*Q,1,0),COLOR00DDFF;

STICKLINE(XD,0,MACD*Q,1,0.05,0),COLORFF0000;
STICKLINE(XD,0,MACD*0.8*Q,1,0),COLORFF3311;
STICKLINE(XD,0,MACD*0.6*Q,1,0),COLORFF7733;
STICKLINE(XD,0,MACD*0.4*Q,1,0),COLOR999933;
STICKLINE(XD,0,MACD*0.2*Q,1,0),COLOR88DD00;

{----- KDJ 参考线 -----}
0,DOTLINE;
80,DOTLINE;

{----- 高抛低吸信号 -----}
SJ:=WMA(((2*C+H+L)/4-LLV(L,5))/(HHV(H,5)-LLV(L,5))*100,2);
ZJ:=WMA(0.618*REF(SJ,1)+0.382*SJ,2);

MR:=CROSS(SJ,ZJ) AND SJ<30;
MC:=CROSS(ZJ,SJ) AND SJ>70;

AA8:=100*EMA(EMA(C-REF(C,1),8),5)/EMA(EMA(ABS(C-REF(C,1)),8),5);
买:=LLV(AA8,2)=LLV(AA8,8) AND COUNT(AA8<0,2) AND CROSS(AA8,WMA(AA8,2));
卖:=HHV(AA8,2)=HHV(AA8,8) AND COUNT(AA8>0,2) AND CROSS(WMA(AA8,2),AA8);

DRAWTEXT(MR ,J,'↖加仓1'),COLOR00FFFF;
DRAWTEXT(FILTER(买,5),J,'↖加仓2'),COLOR00FFFF;
DRAWTEXT(MC,J,'↙减仓1'),COLOR00FF00;
DRAWTEXT(FILTER(卖,5),J,'↙减仓2'),COLOR00FF00;

说明

  • MACD 改成了 EMA(更常用),柱子颜色保持原样,只是把 STICKLINE 参数统一为 WIDTH, OFFSET
  • 去掉了一些重复的 DRAWBANDSMAJ 绘图语句,使代码更简洁。
  • 如仍想使用 WMA,只需把 EMA 换回 WMA 即可。

6. 交易思路提示(仅作参考)

信号 解释 可能的操作
↖加仓1(MR) KDJ 的 J 低于 30,且 SJ 上穿 ZJ,表明价格进入超卖区后出现转强信号 可以视为 逢低买入加仓
↖加仓2(买) 基于 8‑日动量 AA8 由负转正,且形成底部抬高 买入确认,建议配合成交量或形态
↙减仓1(MC) KDJ 的 J 高于 80,且 SJ 下穿 ZJ,表明价格进入超买区后出现转弱信号 考虑 减仓止盈
↙减仓2(卖) 基于 8‑日动量 AA8 由正转负,且形成顶部下降 卖出信号,建议配合其他指标确认

注意:所有指标都有 滞后性,尤其 MACD 与 KDJ 都是 趋势/动量 指标,单一信号不应作为唯一买卖依据。建议结合 成交量、均线、布林带、形态 等进行二次确认。


7. 小结

  • 代码结构:KDJ → MACD → 背景柱子 → 高抛低吸信号 → 辅助线。
  • 使用方法:新建幅图指标 → 粘贴代码 → 保存 → 在行情图 “叠加指标” 中选择 → 查看图形与文字信号。
  • 调参:KDJ 周期(默认 9),MACD 周期(12、26、9),以及柱子放大因子 Q
  • 常见错误:STICKLINE 参数写错(1.0.05)→ 改为 1,0.05;重复绘图语句可保留但不影响运行。
  • 改进:可以把 MACD 换成 EMA,修正 STICKLINE,或把信号搬到主图。