MT4中KDJ指标源码,KDJ源码下载,KDJ金叉死叉源码,随机指标超买超卖源码



原理: 通过公式计算并绘制KDJ指标。

点击下载程序与源码 文件大小:2.44 KB

必须读我.txt 策汇在线.url MQL4/ MQL4/Indicators/ MQL4/Indicators/KDJ.mq4

MQL4/Indicators/KDJ.mq4代码片段:

//+------------------------------------------------------------------+ //| kdj.mq4 | //| Copyright 2020.策汇在线 http://www.fxchs.com | //| http://www.fxchs.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2020, 策汇在线 http://www.fxchs.com" #property link "http://www.fxchs.com" #property strict //////////////////////////////////////////////////////////////////////// // // // 介绍: KDJ指标源码 // // 原理: 通过公式计算并绘制KDJ指标。 // // 来自: 策汇在线: http://www.fxchs.com // // ////////////////////////////////////////////////////////////////////////// // 子窗口显示 #property indicator_separate_window #property indicator_buffers 3 // RGB三条KDJ线 #property indicator_color1 Red #property indicator_color2 RoyalBlue #property indicator_color3 Lime // 参数级别 #property indicator_level1 0 #property indicator_level2 20 #property indicator_level3 80 #property indicator_level4 100 //---- 输入参数 extern int nPeriod=9; // 周期 extern double factor_1=0.6666666; // 计算因子1 extern double factor_2=0.3333333; // 计算因子2 //---- KDJ缓存 double percentK[]; double percentD[]; double percentJ[]; // 未成熟随机值缓存 double RSV[]; // 初始化 int init() { IndicatorBuffers(4); // 设置线条属性 SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,percentK); SetIndexLabel(0, "%K"); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,percentD); SetIndexLabel(1, "%D"); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,percentJ); SetIndexLabel(2, "%J"); SetIndexBuffer(3,RSV); return(0); } int deinit() { return(0); } // 入口 int start() { int i, k, num; // 分别是n个低价,n个高价,n个收盘价 double Ln, Hn, Cn; // 获取图表中K线数量,然后逐个计算 int counted_bars=IndicatorCounted(); i = Bars - counted_bars - 1; num = Bars - nPeriod; // 计算KDJ值,存入缓存,系统会自动绘制线条 while(i>=0) { // Cn为第n日收盘价;Ln为n日内的最低价;Hn为n日内的最高价 Cn = iClose(NULL,0,i); Ln = iClose(NULL,0,i); Hn = iClose(NULL,0,i); for(k=0; k<nPeriod; k++) { if (Ln > iLow(NULL,0,i+k)) { Ln = iLow(NULL,0,i+k); } if (Hn < iHigh(NULL,0,i+k)) { Hn = iHigh(NULL,0,i+k); } } // 未成熟随机值RSV = (Cn-Ln)/(Hn-Ln)*100 (当日收盘价-n日内最低价)/(n天内最高价-n天内最低价)*100 if (Hn-Ln != 0) RSV[i] = (Cn-Ln)/(Hn-Ln)*100; else RSV[i] = 50; // 当日K值 = 2/3×前一日K值+1/3×当日RSV // 当日D值 = 2/3×前一日D值+1/3×当日K值 // 若无前一日K 值与D值,则可分别用50来代替。 if (i >= num) { percentK[i] = factor_1 * 50 + factor_2 * RSV[i]; percentD[i] = factor_1 * 50 + factor_2 * percentK[i]; } else { percentK[i] = factor_1 * percentK[i+1] + factor_2 * RSV[i]; percentD[i] = factor_1 * percentD[i+1] + factor_2 * percentK[i]; } // J值=3*当日K值-2*当日D值 percentJ[i] = 3 * percentK[i] - 2 * percentD[i]; i--; } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+