DT Oscillator Indicator For MT5
Table Of Contents:
- DT Oscillator Indicator For MT5
- Instalace DT Oscillator Indicator For MT5
- Parametry DT Oscillator Indicator For MT5
- Vyrovnávací DT Oscillator Indicator For MT5
- Hlavní části Kodexu
DT Oscillator Indicator For MT5 je založen na práci Roberta Minera. Vypadá to podobně jako stochastický indikátor. Indikátor také nakreslí dva řádky na podokno oscilátoru, které se otáčí mezi úrovněmi 0 a 100. Pomocí úrovně 70 můžete detekovat překoupené podmínky a úroveň 30 detekovat překoupené podmínky. Můžete také použít křížení dvou linek k potvrzení, než se rozhodnete zahájit obchod.
Instalace DT Oscillator Indicator For MT5
Po stažení indikátoru pomocí výše uvedeného formuláře je třeba rozbalit zip soubor. Pak musíte zkopírovat soubor dt_oscillator.mq5 do složky MQL5Indicators vaší instalace MT5 . Poté prosím restartujte MT5 a poté uvidíte indikátor v seznamu indikátorů.
Parametry DT Oscillator Indicator For MT5
DT Oscillator Indicator For MT5 obsahuje parametry 5 lze nakonfigurovat.
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
Vyrovnávací DT Oscillator Indicator For MT5
DT Oscillator Indicator For MT5 4 DT Oscillator Indicator For MT5 poskytuje vyrovnávací paměti 4 .
SetIndexBuffer( 0,dtosf1,INDICATOR_DATA); SetIndexBuffer( 1,dtosf2,INDICATOR_DATA); SetIndexBuffer( 2,dtosc ,INDICATOR_DATA); SetIndexBuffer( 3,dtoss ,INDICATOR_DATA);
Hlavní části Kodexu
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)); }