Divergence Indicator For MT5
Table Of Contents:
- Divergence Indicator For MT5
- Установка Divergence Indicator For MT5
- Параметры Divergence Indicator For MT5
- Буферы Divergence Indicator For MT5
- Основные части кодекса
Divergence Indicator For MT5 - это уникальный инструмент, который анализирует данные индикатора и движение цены, чтобы найти точную цену, где значение индикатора не совпадает с техническими подробностями. В большинстве случаев наивные трейдеры не знают, как отфильтровать ложные торговые сигналы. Они полагаются на традиционный подход к управлению рисками, так что они могут принимать убыточные сделки без какого-либо стресса. Но с помощью этого индикатора вы можете легко оценить аномалию в технических данных, и это поможет вам оставаться в стороне. Наоборот, когда показания индикатора полностью синхронизируются с ручной оценкой, вы можете выставить сделку с уровнем доверия. Когда вы используете этот инструмент, убедитесь, что вы никогда не принимаете слишком большой риск, даже если вы используете один из самых эффективных способов найти хорошие сделки.
Установка Divergence Indicator For MT5
После того, как вы загрузили индикатор через форму выше, вам необходимо распаковать zip-файл. Затем вам нужно скопировать файл divergence.mq5 в папку MQL5Indicators вашей установки MT5 . После этого перезапустите MT5, и вы сможете увидеть индикатор в списке индикаторов.
Параметры Divergence Indicator For MT5
Divergence Indicator For MT5 имеет параметры 6 для настройки.
input INDMODE ind=MODE_MACD; //indicator input uint pds=10; //indicator periods input PRICEMODE f=MODE_CLOSE; //price field input double dCh=0; //peak/trough depth minimum (0-1) input uint xshift=0; //shift signals back to match divergences input int Shift=0; //horizontal shift of the indicator in bars
Буферы Divergence Indicator For MT5
Divergence Indicator For MT5 предоставляет буферы 10 .
SetIndexBuffer(0,ExtOpenBuffer,INDICATOR_DATA); SetIndexBuffer(1,ExtHighBuffer,INDICATOR_DATA); SetIndexBuffer(2,ExtLowBuffer,INDICATOR_DATA); SetIndexBuffer(3,ExtCloseBuffer,INDICATOR_DATA); SetIndexBuffer(4,ExtColorBuffer,INDICATOR_COLOR_INDEX); SetIndexBuffer(5,R1,INDICATOR_CALCULATIONS); SetIndexBuffer(6,R2,INDICATOR_CALCULATIONS); SetIndexBuffer(7,y,INDICATOR_CALCULATIONS); SetIndexBuffer(8,xd,INDICATOR_CALCULATIONS); SetIndexBuffer(9,xu,INDICATOR_CALCULATIONS);
Основные части кодекса
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[]) { //---- checking for the sufficiency of bars for the calculation if(BarsCalculated(Ind_Handle) lt rates_total || rates_total lt min_rates_total) return(RESET); //---- declaration of local variables int limit,to_copy,bar,CNmb1,CNmb2,CNmb3,CNmb4; double Pkx1,Pkx2,Trx1,Trx2,Pky1,Pky2,Try1,Try2; bool Trx,Pkx,Try,Pky; //---- calculations of the necessary amount of data to be copied and //the starting number limit for the bar recalculation loop if(prev_calculated gt rates_total || prev_calculated lt =0)// checking for the first start of the indicator calculation { limit=rates_total-1-min_rates_total-3; // starting index for the calculation of all bars } else { limit=rates_total-prev_calculated; // starting index for the calculation of new bars } to_copy=limit+1; //---- copy newly appeared data into the arrays if(CopyBuffer(Ind_Handle,MAIN_LINE,0,to_copy,y) lt =0) return(RESET); //---- indexing elements in arrays as timeseries ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); ArraySetAsSeries(open,true); for(bar=limit; bar gt =0 && !IsStopped(); bar--) { if(f==MODE_CLOSE) { xu[bar]=close[bar]; xd[bar]=close[bar]; } else { xu[bar]=high[bar]; xd[bar]=low[bar]; } ExtOpenBuffer [bar]=0.0; ExtCloseBuffer[bar]=0.0; ExtHighBuffer [bar]=0.0; ExtLowBuffer [bar]=0.0; } //---- main loop of the indicator calculation for(bar=limit; bar gt =2 && !IsStopped(); bar--) { CNmb1=0; CNmb2=0; CNmb3=0; CNmb4=0; for(int kkk=bar; kkk lt rates_total; kkk++) { Pkx=xu[kkk] lt xu[kkk-1] && xu[kkk-1] gt xu[kkk-2] && xu[kkk-1] gt =(xu[kkk]+xu[kkk-2])/2.0*(1.0+fCh); if(Pkx) CNmb1++; if(Pkx && CNmb1==1) Pkx1=xu[kkk-1]; if(Pkx && CNmb1==2) Pkx2=xu[kkk-1]; Trx=xd[kkk] gt xd[kkk-1] && xd[kkk-1] lt xd[kkk-2] && xd[kkk-1] lt =(xd[kkk]+xd[kkk-2])/2.0*(1.0-fCh); if(Trx) CNmb2++; if(Trx && CNmb2==1) Trx1=xd[kkk-1]; if(Trx && CNmb2==2) Trx2=xd[kkk-1]; Pky=y[kkk] lt y[kkk-1] && y[kkk-1] gt y[kkk-2] && y[kkk-1] gt =(y[kkk]+y[kkk-2])/2.0*(1.0+fCh); if(Pky) CNmb3++; if(Pky && CNmb3==1) Pky1=y[kkk-1]; if(Pky && CNmb3==2) Pky2=y[kkk-1]; Try=y[kkk] gt y[kkk-1] && y[kkk-1] lt y[kkk-2] && y[kkk-1] lt =(y[kkk]+y[kkk-2])/2.0*(1.0-fCh); if(Try) CNmb4++; if(Try && CNmb4==1) Try1=y[kkk-1]; if(Try && CNmb4==2) Try2=y[kkk-1]; if(CNmb1 gt =2 && CNmb2 gt =2 && CNmb3 gt =2 && CNmb4 gt =2) break; } Pkx=xu[bar] lt xu[bar-1] && xu[bar-1] gt xu[bar-2] && xu[bar-1] gt =(xu[bar]+xu[bar-2])/2.0*(1.0+fCh); Trx=xd[bar] gt xd[bar-1] && xd[bar-1] lt xd[bar-2] && xd[bar-1] lt =(xd[bar]+xd[bar-2])/2.0*(1.0-fCh); Pky=y[bar] lt y[bar-1] && y[bar-1] gt y[bar-2] && y[bar-1] gt =(y[bar]+y[bar-2])/2.0*(1.0+fCh); Try=y[bar] gt y[bar-1] && y[bar-1] lt y[bar-2] && y[bar-1] lt =(y[bar]+y[bar-2])/2.0*(1.0-fCh); R1[bar]=0; if(Trx && Try && Trx1 lt Trx2 && Try1 gt Try2) R1[bar]=1; R2[bar]=0; if(Pkx && Pky && Pkx1 gt Pkx2 && Pky1 lt Pky2) R2[bar]=1; if(R1[bar]-R2[bar] gt 0) { ExtOpenBuffer[bar]=open[bar]; ExtCloseBuffer[bar]=close[bar]; ExtHighBuffer[bar]=high[bar]; ExtLowBuffer[bar]=low[bar]; if(close[bar] gt open[bar]) ExtColorBuffer[bar]=3; else ExtColorBuffer[bar]=2; } if(R1[bar]-R2[bar] lt 0) { ExtOpenBuffer[bar]=open[bar]; ExtCloseBuffer[bar]=close[bar]; ExtHighBuffer[bar]=high[bar]; ExtLowBuffer[bar]=low[bar]; if(open[bar] gt close[bar]) ExtColorBuffer[bar]=0; else ExtColorBuffer[bar]=1; } } //---- return(rates_total); } //+------------------------------------------------------------------+