admin 发表于 2022-6-7 21:56:13

MT4指标三线KDJ指标下载

在MT4上,是没有三线KDJ指标的,分享KDJ指标源码:
#property copyright "Copyright 2020"#property link      "https://www.mql5.com"#property version   "1.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_color1clrWhite#property indicator_style1STYLE_SOLID#property indicator_width11//--- plot DLine#property indicator_label2"DLine"#property indicator_type2   DRAW_LINE#property indicator_color2clrGold#property indicator_style2STYLE_SOLID#property indicator_width21//--- plot JLine#property indicator_label3"JLine"#property indicator_type3   DRAW_LINE#property indicator_color3clrDarkViolet#property indicator_style3STYLE_SOLID#property indicator_width31#property indicator_levelstyle STYLE_DOT#property indicator_levelcolor clrSilver#property indicator_level10#property indicator_level220#property indicator_level350#property indicator_level480#property indicator_level5100//---- input parametersinput int N =9;//%K 周期input int M1=3;//%D 周期input int M2=3;//慢速//--- indicator buffersdouble         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   IndicatorBuffers(6);   SetIndexBuffer(0,KBuffer);   SetIndexBuffer(1,DBuffer);   SetIndexBuffer(2,JBuffer);   SetIndexBuffer(3,llv,INDICATOR_CALCULATIONS);   SetIndexBuffer(4,hhv,INDICATOR_CALCULATIONS);   SetIndexBuffer(5,rsv,INDICATOR_CALCULATIONS);   for(int i=0; i<6; i++)   {      SetIndexDrawBegin(i,N+M1+M2);   }   SetLevelValue(0,0);   SetLevelValue(1,20);   SetLevelValue(2,50);   SetLevelValue(3,80);   SetLevelValue(4,100);   string name = "KDJ("+ (string)N+","+(string)M1+","+(string)M2+")";   IndicatorShortName(name);   IndicatorDigits(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;   for(i=limit; i>=0; i--)   {      llv=0;      hhv=0;      if(i>rates_total-N)         continue;      int shift = iLowest(NULL,0,MODE_LOW,N,i);      llv =low;      shift = iHighest(NULL,0,MODE_HIGH,N,i);      hhv = high;   }   for(i=limit; i>=0; i--)   {      rsv = 0;      if(hhv>0 && llv>0 && (hhv-llv)!=0)         rsv = (close-llv)/(hhv-llv)*100;   }   for(i=limit; i>=0; i--)   {      if(i==rates_total-1)         KBuffer=0;      else      {         KBuffer = rsv*p + KBuffer*p1;      }   }   for(i=limit; i>=0; i--)   {      if(i==rates_total-1)         DBuffer=0;      else      {         DBuffer = KBuffer*f + DBuffer*f1;      }   }   for(i=limit; i>=0; i--)   {      JBuffer = 3*KBuffer - 2*DBuffer;   }//--- return value of prev_calculated for next call   return(rates_total);}//+------------------------------------------------------------------+
页: [1]
查看完整版本: MT4指标三线KDJ指标下载