Demand Index Indicator For MT5
Table Of Contents:
- Demand Index Indicator For MT5
- Demand Index Indicator For MT5 installeren
- Parameters van het Demand Index Indicator For MT5
- Buffers van het Demand Index Indicator For MT5
- Hoofddelen van de code
De Demand Index Indicator For MT5 berekent de waarden op basis van de prijsactie en het volume. U kunt kiezen tussen 10 afvlakalgoritmen.
Demand Index Indicator For MT5 installeren
Nadat u de indicator via het bovenstaande formulier heeft gedownload, moet u het zip-bestand uitpakken. Vervolgens moet u het bestand demand_index.mq5 naar de map MQL5Indicators van uw MT5 installatie kopiëren. Start daarna MT5 opnieuw op en dan kunt u de indicator zien in de lijst met indicatoren.
Parameters van het Demand Index Indicator For MT5
Het Demand Index Indicator For MT5 moet de parameters 6 configureren.
input Smooth_Method MA_SMethod=MODE_SMA; // Smoothing method input int SmLength=12; // Smoothing depth input int SmPhase=15; // Smoothing parameter input Applied_price_ IPC=PRICE_QUARTER_; // Price constant input ENUM_APPLIED_VOLUME VolumeType=VOLUME_TICK; // Volume input int Shift=0; // Horizontal shift of the indicator in bars
Buffers van het Demand Index Indicator For MT5
Het Demand Index Indicator For MT5 biedt 1 buffers.
SetIndexBuffer(0,DIBuffer,INDICATOR_DATA);
Hoofddelen van de code
int OnCalculate(const int rates_total, // number of bars in history at the current tick const int prev_calculated,// number of bars calculated at previous call const datetime &time[], const double &open[], const double& high[], // price array of maximums of price for the indicator calculation const double& low[], // price array of minimums of price for the indicator calculation const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- checking the number of bars to be enough for the calculation if(rates_total lt StartBars) return(0); //---- declarations of local variables int first,bar,Sign; double AvgTR,Avg,VolAvg,price0,price1,WtCRatio=0.0,VolRatio; double Constant,DMI,TempDI,BuyPres,SellPres,BuyP,SellP; long Volume; static double VolAvg_,BuyPres_,SellPres_; //---- calculation of the first starting index for the bars recalculation loop if(prev_calculated gt rates_total || prev_calculated lt =0) // checking for the first start of the indicator calculation { first=1; // starting index for calculation of all bars BuyPres_=1; SellPres_=1; if(VolumeType==VOLUME_TICK) VolAvg_=double(tick_volume[0]); else VolAvg_=double(volume[0]); } else first=prev_calculated-1; // starting index for calculation of new bars //---- restore values of the variables VolAvg=VolAvg_; BuyPres=BuyPres_; SellPres=SellPres_; //---- main indicator calculation loop for(bar=first; bar lt rates_total; bar++) { //---- store values of the variables before running at the current bar if(rates_total!=prev_calculated && bar==0) { VolAvg_=VolAvg; BuyPres_=BuyPres; SellPres_=SellPres; } //---- call of the PriceSeries function to get the input price price_ price0=PriceSeries(IPC,bar, open,low,high,close); price1=PriceSeries(IPC,bar-1,open,low,high,close); if(VolumeType==VOLUME_TICK) Volume=long(tick_volume[bar]); else Volume=long(volume[bar]); Avg=MathMax(high[bar],high[bar-1])-MathMin(low[bar],low[bar-1]); AvgTR=XMA1.XMASeries(1,prev_calculated,rates_total,MA_SMethod,SmPhase,SmLength,Avg,bar,false); VolAvg=((VolAvg *(SmLength-1))+Volume)/SmLength; if(price0!=0 && price1!=0 && AvgTR!=0 && VolAvg!=0) WtCRatio=(price0-price1)/MathMin(price0,price1); if(VolAvg!=0)VolRatio=Volume/VolAvg; else VolRatio=1; Constant=((price0*3)/AvgTR)*MathAbs(WtCRatio); if(Constant gt 88) Constant=88; Constant=VolRatio/MathExp(Constant); if(WtCRatio gt 0) { BuyP=VolRatio; SellP=Constant; } else { BuyP=Constant; SellP=VolRatio; } BuyPres =((BuyPres *(SmLength-1))+BuyP )/SmLength; SellPres=((SellPres*(SmLength-1))+SellP)/SmLength; TempDI=+1; if(SellPres gt BuyPres) { Sign=-1; if(SellPres!=0) TempDI=BuyPres/SellPres; } else { Sign=+1; if(BuyPres!=0) TempDI=SellPres/BuyPres; } TempDI*=Sign; if(TempDI lt 0) DMI= -1-TempDI; else DMI =+1-TempDI; DIBuffer[bar]=DMI*100.0; } //---- return(rates_total); } //+------------------------------------------------------------------+