MT5指标三线KDJ指标下载
MT4、5三线KDJ指标下载:
源码:
#property copyright "Copyright 2020" #property link "https://www.mql5.com" #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;//%K_周期 input int M1=3;//%D_周期 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); } //+------------------------------------------------------------------+
如果不是为了暴富,难道每天熬夜敲着代码搞量化,只是为了打发时间?

浙公网安备 33010602011771号