KDJ(3Lines)

Author: Copyright 2020,fxMeter
0 Views
0 Downloads
0 Favorites
KDJ(3Lines)
ÿþ//+------------------------------------------------------------------+

//|                                                  KDJ(3Lines).mq5 |

//|                                           Copyright 2020,fxMeter |

//|                            https://www.mql5.com/zh/users/fxmeter |

//+------------------------------------------------------------------+

//2020-2-15 

//MT4 Hr,g https://www.mql5.com/zh/code/27946

//MT5 Hr,g https://www.mql5.com/zh/code/27947

/* ¾áOlQ_9e

RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;

K:SMA(RSV,M1,1);

D:SMA(K,M2,1);

J:3*K-2*D;

1.ch>80öeÿÞVch:g‡s'Yÿch<20öeÿÍS9_:g‡s'Yÿ

2.K(W20æ]óST
N¤NÉSDöeÿƉ:NpNۏáO÷Sÿ

3.K(W80æ]óSTN¤NÉSDöeÿƉ:NVSúQáO÷Sÿ

4.J>100öeÿ¡€÷NfÍSlN̍ÿJ<0öeÿ¡€÷NfÍSl
N¨mÿ

5.KDJâl¨RŽN50æ]óS„vûNUOáO÷SÿvQ\O(u
N'Y0

*/

#property copyright "Copyright 2020,fxMeter"

#property link      "https://www.mql5.com/zh/users/fxmeter"

#property version   "1.00"

#property indicator_separate_window

#property indicator_buffers 6

#property indicator_plots   3

//--- plot K

#property indicator_label1  "K"

#property indicator_type1   DRAW_LINE

#property indicator_color1  clrWhite

#property indicator_style1  STYLE_SOLID

#property indicator_width1  1

//--- plot D

#property indicator_label2  "D"

#property indicator_type2   DRAW_LINE

#property indicator_color2  clrGold

#property indicator_style2  STYLE_SOLID

#property indicator_width2  1

//--- plot J

#property indicator_label3  "J"

#property indicator_type3   DRAW_LINE

#property indicator_color3  clrDarkViolet

#property indicator_style3  STYLE_SOLID

#property indicator_width3  1



#property indicator_level1  0

#property indicator_level2  20

#property indicator_level3  50

#property indicator_level4  80

#property indicator_level5  100



//---- input parameters

input int N =9;

input int M1=3;

input int M2=3;

//--- indicator buffers

double         KBuffer[];

double         DBuffer[];

double         JBuffer[];

double llv[],hhv[],rsv[];

double p=0,p1=0;

double f=0,f1=0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

//--- indicator buffers mapping

   SetIndexBuffer(0,KBuffer,INDICATOR_DATA);

   SetIndexBuffer(1,DBuffer,INDICATOR_DATA);

   SetIndexBuffer(2,JBuffer,INDICATOR_DATA);

   SetIndexBuffer(3,llv,INDICATOR_CALCULATIONS);

   SetIndexBuffer(4,hhv,INDICATOR_CALCULATIONS);

   SetIndexBuffer(5,rsv,INDICATOR_CALCULATIONS);

   

   ArraySetAsSeries(KBuffer,true);   

   ArraySetAsSeries(DBuffer,true);

   ArraySetAsSeries(JBuffer,true);

   ArraySetAsSeries(llv,true);

   ArraySetAsSeries(hhv,true);

   ArraySetAsSeries(rsv,true);   

      

   for(int i=0;i<6;i++)

     {       

      PlotIndexSetInteger(i,PLOT_DRAW_BEGIN,N+M1+M2);

     }



   

   string name = "KDJ("+ (string)N+","+(string)M1+","+(string)M2+")";

   IndicatorSetString(INDICATOR_SHORTNAME,name);

   IndicatorSetInteger(INDICATOR_DIGITS,2);   



   if(N<=0||M1<=0||M2<=0) return(INIT_FAILED);

   

   p = 1.0/M1;   p1 = 1-p;

   f = 1.0/M2;   f1 = 1-f;   

   

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

//---   

   int i,limit=0;

   if(rates_total<=0)return(0);

   if(prev_calculated<=0)limit=rates_total-1;

   else limit = rates_total - prev_calculated +1;



   ArraySetAsSeries(low,true);   

   ArraySetAsSeries(high,true);

   ArraySetAsSeries(close,true);



   for(i=limit; i>=0; i--)

     {

      llv[i]=0; hhv[i]=0;

      if(i>rates_total-N) continue;

      int shift = iLowest(NULL,0,MODE_LOW,N,i);

      llv[i] =  low[shift];

      shift = iHighest(NULL,0,MODE_HIGH,N,i);

      hhv[i] = high[shift];

     }

   for(i=limit; i>=0; i--)

     {

      rsv[i] = 0;

      if(hhv[i]>0 && llv[i]>0 && (hhv[i]-llv[i])!=0)

         rsv[i] = (close[i]-llv[i])/(hhv[i]-llv[i])*100;

     }



   for(i=limit; i>=0; i--)

     {

      if(i==rates_total-1) KBuffer[i]=0;

      else

        {

         KBuffer[i] = rsv[i]*p + KBuffer[i+1]*p1;

        }

     }



   for(i=limit; i>=0; i--)

     {

      if(i==rates_total-1) DBuffer[i]=0;

      else

        {

         DBuffer[i] = KBuffer[i]*f + DBuffer[i+1]*f1;

        }

     }



   for(i=limit; i>=0; i--)

     {

      JBuffer[i] = 3*KBuffer[i] - 2*DBuffer[i];

     }   

//--- return value of prev_calculated for next call

   return(rates_total);

  }

//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---