设为首页 收藏本站 切换语言

在MT4上使用KDJ指标

| 发表于 2022-12-24 16:37:06 | 显示全部楼层 |复制链接
KDJ指标就是随机指标,由K线、D线和J线这三条曲线共同构成,通过分析图表,我们可以得出,K、D、J分别用不同的颜色线条来表示,所谓的K线是指快速确认线,D线就是指慢速主干线,而J线则为方向明暗线。K值和D值的浮动范围是0~100,而J值则能够小于0或者大于100,可以波动的范围更广。KDJ是为了判断中短期行情走势而出现的。

KDJ指标的计算公式是:
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))100;
K:SMA(RSV,M1,1);
D:SMA(K,M2,1);
J:3K-2*D;

KDJ指标的一般使用:
1.指标>80时,回档机率大;指标<20时,反弹机率大;
2.K在20左右向上交叉D时,视为买进信号;
3.K在80左右向下交叉D时,视为卖出信号;
4.J>100时,股价易反转下跌;J<0时,股价易反转上涨;
5.KDJ波动于50左右的任何信号,其作用不大。

MT4中KDJ指标源代码
#property copyright "Copyright 2020,fxMeter"
#property link      "https://www.mql5.com/zh/users/fxmeter"
#property version   "2.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot KLine
#property indicator_label1  "KLine"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrWhite
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DLine
#property indicator_label2  "DLine"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrGold
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot JLine
#property indicator_label3  "JLine"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrDarkViolet
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1


#property indicator_levelstyle STYLE_DOT
#property indicator_levelcolor clrSilver
#property indicator_level1  0
#property indicator_level2  20
#property indicator_level3  50
#property indicator_level4  80
#property indicator_level5  100




  1. //---- input parameters
  2. input int N =9;
  3. input int M1=3;
  4. input int M2=3;
  5. //--- indicator buffers
  6. double         KBuffer[];
  7. double         DBuffer[];
  8. double         JBuffer[];
  9. double llv[],hhv[],rsv[];
  10. double p=0,p1=0;
  11. double f=0,f1=0;
  12. //+------------------------------------------------------------------+
  13. //| Custom indicator initialization function                         |
  14. //+------------------------------------------------------------------+
  15. int OnInit()
  16.   {
  17. //--- indicator buffers mapping
  18.    IndicatorBuffers(6);
  19.    SetIndexBuffer(0,KBuffer);
  20.    SetIndexBuffer(1,DBuffer);
  21.    SetIndexBuffer(2,JBuffer);
  22.    SetIndexBuffer(3,llv,INDICATOR_CALCULATIONS);
  23.    SetIndexBuffer(4,hhv,INDICATOR_CALCULATIONS);
  24.    SetIndexBuffer(5,rsv,INDICATOR_CALCULATIONS);
  25.   
  26.    for(int i=0;i<6;i++)
  27.      {      
  28.       SetIndexDrawBegin(i,N+M1+M2);
  29.      }
  30.   
  31.    SetLevelValue(0,0);
  32.    SetLevelValue(1,20);
  33.    SetLevelValue(2,50);
  34.    SetLevelValue(3,80);
  35.    SetLevelValue(4,100);   
  36.   
  37.    string name = "KDJ("+ (string)N+","+(string)M1+","+(string)M2+")";
  38.    IndicatorShortName(name);
  39.   
  40.    IndicatorDigits(2);
  41.    if(N<=0||M1<=0||M2<=0) return(INIT_FAILED);
  42.   
  43.    p = 1.0/M1;   p1 = 1-p;
  44.    f = 1.0/M2;   f1 = 1-f;
  45.   
  46. //---
  47.    return(INIT_SUCCEEDED);
  48.   }
  49. //+------------------------------------------------------------------+
  50. //| Custom indicator iteration function                              |
  51. //+------------------------------------------------------------------+
  52. int OnCalculate(const int rates_total,
  53.                 const int prev_calculated,
  54.                 const datetime &time[],
  55.                 const double &open[],
  56.                 const double &high[],
  57.                 const double &low[],
  58.                 const double &close[],
  59.                 const long &tick_volume[],
  60.                 const long &volume[],
  61.                 const int &spread[])
  62.   {
  63. //---
  64.    int i,limit=0;
  65.    if(rates_total<=0)return(0);
  66.    if(prev_calculated<=0)limit=rates_total-1;
  67.    else limit = rates_total - prev_calculated +1;
  68.    for(i=limit; i>=0; i--)
  69.      {
  70.       llv=0; hhv=0;
  71.       if(i>rates_total-N) continue;
  72.       int shift = iLowest(NULL,0,MODE_LOW,N,i);
  73.       llv =  low[shift];
  74.       shift = iHighest(NULL,0,MODE_HIGH,N,i);
  75.       hhv = high[shift];
  76.      }
  77.    for(i=limit; i>=0; i--)
  78.      {
  79.       rsv = 0;
  80.       if(hhv>0 && llv>0 && (hhv-llv)!=0)
  81.          rsv = (close-llv)/(hhv-llv)*100;
  82.      }
  83.    for(i=limit; i>=0; i--)
  84.      {
  85.       if(i==rates_total-1) KBuffer=0;
  86.       else
  87.         {
  88.          KBuffer = rsv*p + KBuffer[i+1]*p1;
  89.         }
  90.      }
  91.    for(i=limit; i>=0; i--)
  92.      {
  93.       if(i==rates_total-1) DBuffer=0;
  94.       else
  95.         {
  96.          DBuffer = KBuffer*f + DBuffer[i+1]*f1;
  97.         }
  98.      }
  99.    for(i=limit; i>=0; i--)
  100.      {
  101.       JBuffer = 3*KBuffer - 2*DBuffer;
  102.      }
  103. //--- return value of prev_calculated for next call
  104.    return(rates_total);
  105.   }
  106. //+------------------------------------------------------------------+
复制代码
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论5

ken138888
B
| 发表于 2022-12-24 20:34:20 | 显示全部楼层
谢谢分享了
举报

点赞 评论 使用道具

daerwushen
DD
| 发表于 2022-12-24 22:05:29 | 显示全部楼层
使用KDJ指标
举报

点赞 评论 使用道具

xinhua123
DDD
| 发表于 2022-12-25 00:16:08 | 显示全部楼层
大家节日快乐
举报

点赞 评论 使用道具

daerbushen
DD
| 发表于 2022-12-25 22:22:00 | 显示全部楼层
随机指标
举报

点赞 评论 使用道具

dongxu64
DDD
| 发表于 2022-12-26 23:36:13 | 显示全部楼层
经典的KDJ指标
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)