DT Oscillator Indicator For MT5
Table Of Contents:
- DT Oscillator Indicator For MT5
- Installation af DT Oscillator Indicator For MT5
- Parametre for DT Oscillator Indicator For MT5
- Buffere af DT Oscillator Indicator For MT5
- Vigtigste dele af koden
DT Oscillator Indicator For MT5 er baseret på Rober DT Oscillator Indicator For MT5 arbejde. Det ligner den stokastiske indikator. Indikatoren tegner også to linjer på en oscillatorsubvindue, der svinger mellem 0 og 100 niveauer. Du kan bruge 70-niveauet til at registrere overkøbte forhold og 30-niveauet til at detektere oversolgte forhold. Du kan også bruge krydsningen af de to linjer til bekræftelse, før du beslutter at indlede en handel.
Installation af DT Oscillator Indicator For MT5
Når du har hentet indikatoren via formularen ovenfor, skal du pakke zip-filen ud. Derefter skal du kopiere filen dt_oscillator.mq5 til mappen MQL5Indicators for din MT5 installation. Efter dette skal du genstarte MT5, så vil du være i stand til at se indikatoren på listen over indikatorer.
Parametre for DT Oscillator Indicator For MT5
DT Oscillator Indicator For MT5 har 5 parametre, der skal konfigureres.
input int RsiPeriod = 13; // Rsi period input int StochPeriod = 8; // Stochastic period input int SlowingPeriod = 5; // Slowing input int SignalPeriod = 3; // Signal period input bool TapeVisible = true; // Tape visibility
Buffere af DT Oscillator Indicator For MT5
DT Oscillator Indicator For MT5 leverer 4 buffere.
SetIndexBuffer( 0,dtosf1,INDICATOR_DATA); SetIndexBuffer( 1,dtosf2,INDICATOR_DATA); SetIndexBuffer( 2,dtosc ,INDICATOR_DATA); SetIndexBuffer( 3,dtoss ,INDICATOR_DATA);
Vigtigste dele af koden
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 &TickVolume[], const long &Volume[], const int &Spread[]) { // // // // // if (ArraySize(rsibuf)!=rates_total) ArrayResize(rsibuf,rates_total); if (ArraySize(stobuf)!=rates_total) ArrayResize(stobuf,rates_total); // // // // // for (int i=(int)MathMax(prev_calculated-1,0); i lt rates_total; i++) { rsibuf[i] = iRsi(Close[i],RsiPeriod,i,rates_total); double min = rsibuf[i]; double max = rsibuf[i]; for (int k=1; k lt StochPeriod && (i-k) gt =0; k++) { min = MathMin(rsibuf[i-k],min); max = MathMax(rsibuf[i-k],max); } if (max!=min) stobuf[i] = 100*(rsibuf[i]-min)/(max-min); else stobuf[i] = 0; // // // // // dtosc[i] = 0; for (int k=0; k lt SlowingPeriod && (i-k) gt =0; k++) dtosc[i] += stobuf[i-k]; dtosc[i] /= SlowingPeriod; dtoss[i] = 0; for (int k=0; k lt SignalPeriod && (i-k) gt =0; k++) dtoss[i] += dtosc[i-k]; dtoss[i] /= SignalPeriod; if (TapeVisible) { dtosf1[i] = dtosc[i]; dtosf2[i] = dtoss[i]; } else { dtosf1[i] = EMPTY_VALUE; dtosf2[i] = EMPTY_VALUE; } } // // // // // return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // double rsiWork[][3]; #define _price 0 #define _chgAvg 1 #define _totChg 2 // // // // // double iRsi(double price, double period, int i, int bars) { if (ArrayRange(rsiWork,0)!=bars) ArrayResize(rsiWork,bars); // // // // // // rsiWork[i][_price] = price; if (i==0) { rsiWork[i][_chgAvg] = 0; rsiWork[i][_totChg] = 0; return(50); } // // // // // double sf = 1.0 / period; double change = rsiWork[i][_price]-rsiWork[i-1][_price]; rsiWork[i][_chgAvg] = rsiWork[i-1][_chgAvg] + sf*( change -rsiWork[i-1][_chgAvg]); rsiWork[i][_totChg] = rsiWork[i-1][_totChg] + sf*(MathAbs(change)-rsiWork[i-1][_totChg]); double changeRatio = (rsiWork[i][_totChg]!=0 ? rsiWork[i][_chgAvg]/rsiWork[i][_totChg] : 0 ); return(50.0*(changeRatio+1.0)); }