DT Oscillator Indicator For MT5
Table Of Contents:
- DT Oscillator Indicator For MT5
- Installation du DT Oscillator Indicator For MT5
- Paramètres du DT Oscillator Indicator For MT5
- Tampons du DT Oscillator Indicator For MT5
- Parties principales du code
L' DT Oscillator Indicator For MT5 est basé sur le travail de Rober Miner. Cela ressemble à l'indicateur stochastique. L’indicateur trace également deux lignes sur une sous-fenêtre d’oscillateur, qui oscillent entre les niveaux 0 et 100. Vous pouvez utiliser le niveau 70 pour détecter les conditions de surachat et le niveau 30 pour détecter les conditions de survente. Vous pouvez également utiliser le croisement des deux lignes pour confirmation avant de décider de lancer un échange.
Installation du DT Oscillator Indicator For MT5
Après avoir téléchargé l'indicateur via le formulaire ci-dessus, vous devez décompresser le fichier zip. Ensuite, vous devez copier le fichier dt_oscillator.mq5 dans le dossier MQL5Indicators de votre installation MT5 . Ensuite, redémarrez MT5 et vous pourrez voir l’indicateur dans la liste des indicateurs.
Paramètres du DT Oscillator Indicator For MT5
DT Oscillator Indicator For MT5 a des paramètres 5 à configurer.
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
Tampons du DT Oscillator Indicator For MT5
Le DT Oscillator Indicator For MT5 4 DT Oscillator Indicator For MT5 fournit des tampons 4 .
SetIndexBuffer( 0,dtosf1,INDICATOR_DATA); SetIndexBuffer( 1,dtosf2,INDICATOR_DATA); SetIndexBuffer( 2,dtosc ,INDICATOR_DATA); SetIndexBuffer( 3,dtoss ,INDICATOR_DATA);
Parties principales du code
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)); }