can you explain what is the difference to the normal Stochastic indicator?
thank you . I compare KD and Sochastic indicator ion MT4 platerm ,they are quite the same ,but use the same parameter ,the KD is slight smooth .
On MT5 platerform ,the parameters of Stochastic is different ,they can not be adjust smaller , and can not get the same lines as on MT4.
here is another stock indicator ,it is very accurate to indicate the buy enter point on daily periom .
i code it to Mql4 program ,but it is very memory_ cosumering and works very slow .
N:=3; //input parameter
Var1:=MA(HHV(HIGH,485),17); ///HHV(HIGH,222) the highest price in 222 period
Var2:=MA(HHV(HIGH,222),17); //MA ma method in 17 period
Var3:=MA(HHV(HIGH,96),17);
Var4:=MA(LLV(LOW,485),17); //LLV(LOW,485) the lowest price in 485 period
Var5:=MA(LLV(LOW,222),17);
Var6:=MA(LLV(LOW,96),17);
Var7:=MA((Var4*0.96+Var5*0.96+Var6*0.96+Var1*0.558+Var2*0.558+Var3*0.558)/6,17);
Var8:=MA((Var4*1.25+Var5*1.23+Var6*1.2+Var1*0.55+Var2*0.55+Var3*0.65)/6,17);
Var9:=MA((Var4*1.3+Var5*1.3+Var6*1.3+Var1*0.68+Var2*0.68+Var3*0.68)/6,17);
VarA:=MA((Var7*3+Var8*2+Var9)/6*1.738,17);
VarB:=IF(DATE<=1050531,VarA,VarA*DAY); //date is the time from when the market is opened ,i ignore it day is the of the month
VarC:=LOW; // low is the low price of this day
VarD:=REF(LOW,1); //ref (low,1) is last day's price
VarE:=SMA(ABS(VarC-VarD),3,1)/SMA(MAX(VarC-VarD,0),N,1)*100; //sma is ma method
VarF:=MA(IF(CLOSE*1.35<=VarB,VarE*10,VarE/10),N);
Var10:=LLV(LOW,30);
Var11:=HHV(VarF,30);
Var12:=1990831;
buypoint:=IF(DATE<=Var12,MA(IF(LOW<=Var10,(VarF+Var11*2)/2,0),N),100000000); //drawline
I:=IF(CLOSE<REF(CLOSE,1),VOL/CAPITAL*10053,0);
best_buy_point:= ABS(EMA(I,13.3)-18)/WINNER(CLOSE)*IF((CLOSE-MA(CLOSE,6))/MA(CLOSE,6)<-0.04,1,0);
#property copyright "" #property link "" #property version "1.00" //#property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Red #property indicator_width1 2 #property indicator_color2 Green #property indicator_width2 2 #property indicator_color3 Blue #property indicator_width3 2 #property indicator_color4 Yellow #property indicator_width4 2 input int n1=500; input int n2=250; input int n3=90; input int p1=21; input int p2=3; input int p3=30; double var1[];double var2[];double var3[];double var4[];double var5[]; double var6[];double var7[];double var8[];double var9[];double var10[]; double varA[];double varB[];double varC[];double varD[];double varE[];double varF[]; double var11[];double var12[];double var13[];double var21[];double var22[];double var23[]; double var31[];double var32[];double var33[];double var41[]; double var51[];double var52[];double var53[];double var54[]; double var61[]; double firemountin[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping IndicatorBuffers(31); SetIndexStyle(0,DRAW_LINE,2);SetIndexStyle(1,DRAW_LINE,2); SetIndexStyle(2,DRAW_LINE,2);SetIndexStyle(3,DRAW_LINE,2); SetIndexBuffer(0,var61); SetIndexBuffer(1,varD); SetIndexBuffer(2,varE); SetIndexBuffer(3,firemountin); SetIndexBuffer(4,var4); SetIndexBuffer(5,var5); SetIndexBuffer(6,var6); SetIndexBuffer(7,var7); SetIndexBuffer(8,var8); SetIndexBuffer(9,var9); SetIndexBuffer(10,var10); SetIndexBuffer(11,varA); SetIndexBuffer(12,varB); SetIndexBuffer(13,varC); SetIndexBuffer(14,var1); SetIndexBuffer(15,var2); SetIndexBuffer(16,varF); SetIndexBuffer(17,var11); SetIndexBuffer(18,var12); SetIndexBuffer(19,var13); SetIndexBuffer(20,var21); SetIndexBuffer(21,var22); SetIndexBuffer(22,var23); SetIndexBuffer(23,var31); SetIndexBuffer(24,var32); SetIndexBuffer(25,var33); SetIndexBuffer(26,var41); SetIndexBuffer(27,var51); SetIndexBuffer(28,var52); SetIndexBuffer(29,var53); SetIndexBuffer(30,var54); SetIndexBuffer(31,var3); //--- 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; //Print(0); //--- if(rates_total<=1000) return(0); //limit=prev_calculated-1; limit=rates_total-prev_calculated; if(prev_calculated>0) limit++; for(i=0; i<limit; i++) { var11[i]=High[iHighest(NULL,0,MODE_HIGH,n1,i)];//Print(var11[0]); var12[i]=High[iHighest(NULL,0,MODE_HIGH,n2,i)]; var13[i]=High[iHighest(NULL,0,MODE_HIGH,n3,i)]; var21[i]=Low[iLowest(NULL,0,MODE_LOW,n1,i)]; var22[i]=Low[iLowest(NULL,0,MODE_LOW,n2,i)]; var23[i]=Low[iLowest(NULL,0,MODE_LOW,n3,i)]; } for(i=0; i<limit; i++) var1[i]= iMAOnArray(var11,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var2[i]= iMAOnArray(var12,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var3[i]= iMAOnArray(var13,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var4[i]= iMAOnArray(var21,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var5[i]= iMAOnArray(var22,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var6[i]= iMAOnArray(var23,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) { var31[i]=(var1[i]*0.96+var2[i]*0.96+var3[i]*0.96+var4[i]*0.558+var5[i]*0.558+var6[i]*0.558)/6; var32[i]=(var1[i]*1.25+var2[i]*1.23+var3[i]*1.2 +var4[i]*0.55 +var5[i]*0.65 +var6[i]*0.55)/6; var33[i]=(var1[i]*1.3 +var2[i]*1.3 +var3[i]*1.3 +var4[i]*0.68 +var5[i]*0.68 +var6[i]*0.68)/6; } for(i=0; i<limit; i++) var7[i]= iMAOnArray(var31,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var8[i]= iMAOnArray(var32,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var9[i]= iMAOnArray(var33,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) { var41[i]=(var9[i]*3+var8[i]*2+var7[i])/6*1.738; } for(i=0; i<limit; i++) varA[i] = iMAOnArray(var41,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) varB[i] =High[i+1];//Low[i+1]; for(i=0; i<limit; i++) var51[i]=MathAbs(High[i]-varB[i]);//MathAbs(Low[i]-varB[i]); for(i=0; i<limit; i++) var52[i]=MathMax((High[i]-varB[i]),0);//MathMax((Low[i]-varB[i]),0);// for(i=0; i<limit; i++) var53[i]= iMAOnArray(var51,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) var54[i]= iMAOnArray(var52,Bars,p1,0,MODE_EMA,i); for(i=0; i<limit; i++) { if(var54[i]!=0) varC[i]=var53[i]/var54[i];//*100; else varC[i]=0;//if(var54[i+1]!=0) varC[i]=var53[i]/var54[i+1]*100; } for(i=0; i<limit; i++) { if(High[i]*1.35>=varA[i]) var61[i]=varC[i]*10;else var61[i]=varC[i]/10; }//Print("var61=",var61[20]); for(i=0; i<limit; i++) varD[i]= iMAOnArray(var61,Bars,p1,0,MODE_EMA,i); //Print("varD=",varD[0]); for(i=0; i<limit; i++) { double hm=-10000; for(int m=i;m<i+p3;m++) { if(varD[m]>hm) hm=varD[m]; } varE[i]=hm; }//Print("varE=",varE[3000]); for(i=0; i<limit; i++) varF[i]=Low[iLowest(NULL,0,MODE_LOW,p3,i)]; //Print("varF=",varF[300]); for(i=0; i<limit; i++) var10[i]=1; for(i=0; i<limit; i++) { if(High[i]<=varE[i]) firemountin[i]=(varD[i]+varF[i]*2)/2; else firemountin[i]=0; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I have coded KD indicator that is used in stock market into MQL4 program ,but feel difficult to code into mql5 program .
Is there someone interesting in this program ? code it and share it with all .