Absolute Strength Indicator For MT5

Absolute Strength Indicator For MT5

Table Of Contents:

  1. Absolute Strength Indicator For MT5
  2. Absolute Strength Indicator For MT5インストール
  3. Absolute Strength Indicator For MT5パラメーター
  4. Absolute Strength Indicator For MT5
  5. コードの主要部分

Absolute Strength Indicator For MT5Absolute Strength Indicator For MT5は、動的レベルではなく絶対レベルでトレンドの強度を定義します。インディケーターRSI、DMIおよびStochasticは動的レベルを使用しています。この指標は、固定レベルを使用して、弱気の強さと比較した強気の強さを定義します。雄牛の強さは青色で描かれています。クマの強さはオレンジ色で描かれています。ヒストグラムのオレンジと青の線の間の距離は、トレンドの強さを定義します。オレンジ色の線が青い線の上にある場合、下降傾向が検出されます。それ以外の場合、上昇傾向が示されます。

FREE AbsoluteStrength Indicator

Download the FREE AbsoluteStrength Indicator for MT5.

To receive my email 100% sure: 
Put my email on your whitelist!

 

Partially Automated Trading Besides Your Day Job

Alerts In Real-Time When Divergences Occur

 

Absolute Strength Indicator For MT5インストール

上記のフォームからインジケーターをダウンロードした後、zipファイルを解凍する必要があります。次に、ファイルabsolutestrength_v2.mq5MT5インストールのMQL5Indicatorsフォルダーにコピーする必要があります。その後、MT5を再起動してください。そうすると、インジケーターのリストにインジケーターが表示されます。

Absolute Strength Indicator For MT5パラメーター

Absolute Strength Indicator For MT5は、構成する14 パラメーターがあります。

input ENUM_TIMEFRAMES      TimeFrame         =     0; input ENUM_MATH_MODE       MathMode          =     0; // Math method input ENUM_APPLIED_PRICE   Price             =  PRICE_CLOSE;   //Apply to input int                  Length            =    10; // Period of Evaluation input int                  PreSmooth         =     1; // Period of PreSmoothing input int                  Smooth            =     1; // Period of Smoothing input int                  Signal            =     1; // Period of Signal Line input ENUM_SMOOTH_MODE     MA_Mode           =     1; // Moving Average Mode input ENUM_LEVELS_MODE     LevelsMode        =     0; input double               StrengthLevel     =    70; // Strength Level (ex.70) input double               WeaknessLevel     =    30; // Weakness Level (ex.30) input int                  LookBackPeriod    =    30; // LookBack Period for LevelsMode=2,3 input double               UpperMultiplier   =     1; // Upper Band Multiplier for LevelsMode=2 input double               LowerMultiplier   =     1; // Lower Band Multiplier for LevelsMode=2 

Absolute Strength Indicator For MT5

Absolute Strength Indicator For MT5は、 12 バッファーを提供します。

SetIndexBuffer(0,      Bulls,INDICATOR_DATA); SetIndexBuffer(1,      Bears,INDICATOR_DATA); SetIndexBuffer(2,signalBulls,INDICATOR_DATA); SetIndexBuffer(3,signalBears,INDICATOR_DATA); SetIndexBuffer(4,   strength,INDICATOR_DATA); SetIndexBuffer(5,   weakness,INDICATOR_DATA); SetIndexBuffer(6,      price,INDICATOR_CALCULATIONS); SetIndexBuffer(7,    loprice,INDICATOR_CALCULATIONS); SetIndexBuffer(8,      bulls,INDICATOR_CALCULATIONS); SetIndexBuffer(9,      bears,INDICATOR_CALCULATIONS); SetIndexBuffer(10,    lbulls,INDICATOR_CALCULATIONS); SetIndexBuffer(11,    lbears,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     &TickVolume[],                 const long     &Volume[],                 const int      &Spread[]) {    int i, x, y, shift, limit, mtflimit, len, copied;    double up, lo, upPivot, dnPivot;    datetime mtf_time; //--- preliminary calculations    if(prev_calculated == 0)     {    limit = 0;     mtflimit = rates_total - 1;    ArrayInitialize(Bulls,EMPTY_VALUE);    ArrayInitialize(Bears,EMPTY_VALUE);    ArrayInitialize(signalBulls,EMPTY_VALUE);    ArrayInitialize(signalBears,EMPTY_VALUE);    ArrayInitialize(strength,0);    ArrayInitialize(weakness,0);    }    else     {    limit = prev_calculated-1;    mtflimit = PeriodSeconds(tf)/PeriodSeconds(Period());    }        copied = CopyBuffer(Price_handle,0,0,rates_total - 1,price);        if(copied lt 0)    {    Print("not all prices copied. Will try on next tick Error =",GetLastError(),", copied =",copied);    return(0);    }        if(MathMode == 2)    {    copied = CopyBuffer(Lo_handle,0,0,rates_total - 1,loprice);           if(copied lt 0)       {       Print("not all prices copied. Will try on next tick Error =",GetLastError(),", copied =",copied);       return(0);       }    } //--- the main loop of calculations    if(tf  gt  Period())    {    ArraySetAsSeries(Time,true);             for(shift=0,y=0;shift lt mtflimit;shift++)       {       if(Time[shift]  lt  iTime(NULL,TimeFrame,y)) y++;        mtf_time = iTime(NULL,TimeFrame,y);              x = rates_total - shift - 1;              copied = CopyBuffer(mtf_handle,0,mtf_time,mtf_time,mtf_bulls);       if(copied  lt = 0) return(0);       copied = CopyBuffer(mtf_handle,1,mtf_time,mtf_time,mtf_bears);       if(copied  lt = 0) return(0);              Bulls[x] = mtf_bulls[0];       Bears[x] = mtf_bears[0];                 if(Signal  gt  1)          {          copied = CopyBuffer(mtf_handle,2,mtf_time,mtf_time,mtf_sigbulls);          if(copied  lt = 0) return(0);          copied = CopyBuffer(mtf_handle,3,mtf_time,mtf_time,mtf_sigbears);          if(copied  lt = 0) return(0);                    signalBulls[x] = mtf_sigbulls[0];          signalBears[x] = mtf_sigbears[0];          }              copied = CopyBuffer(mtf_handle,4,mtf_time,mtf_time,mtf_strength);       if(copied  lt = 0) return(0);       copied = CopyBuffer(mtf_handle,5,mtf_time,mtf_time,mtf_weakness);       if(copied  lt = 0) return(0);              strength[x] = mtf_strength[0];       weakness[x] = mtf_weakness[0];       }    }    else    for(shift=limit;shift lt rates_total;shift++)    {       if(shift  gt  Length)       {                    switch(MathMode)          {          case 0:     bulls[shift] = 0.5*(MathAbs(price[shift] - price[shift-1]) + (price[shift] - price[shift-1]))/_point;                      bears[shift] = 0.5*(MathAbs(price[shift] - price[shift-1]) - (price[shift] - price[shift-1]))/_point;                      break;                      case 1:     up = 0; lo = 10000000000;                         for(i=0;i lt Length;i++)                         {                            up = MathMax(up,High[shift-i]);                         lo = MathMin(lo,Low [shift-i]);                         }                                                                bulls[shift] = (price[shift] - lo)/_point;                      bears[shift] = (up - price[shift])/_point;                      break;                       case 2:     bulls[shift] = MathMax(0,0.5*(MathAbs(price[shift]     - price[shift-1]) + (price[shift]     - price[shift-1])))/_point;                      bears[shift] = MathMax(0,0.5*(MathAbs(loprice[shift-1] - loprice[shift]) + (loprice[shift-1] - loprice[shift])))/_point;                             if (bulls[shift]  gt  bears[shift]) bears[shift] = 0;                      else                       if (bulls[shift]  lt  bears[shift]) bulls[shift] = 0;                      else                      if (bulls[shift] == bears[shift]) {bulls[shift] = 0; bears[shift] = 0;}                      break;          }                           if(MathMode == 1) len = 1; else len = Length;               if(shift  lt  len) continue;              lbulls[shift] = mAverage(0,MA_Mode,bulls,len,Time[shift],shift);        lbears[shift] = mAverage(1,MA_Mode,bears,len,Time[shift],shift);                     if(shift  lt  len + Smooth) continue;              Bulls[shift] = mAverage(2,MA_Mode,lbulls,Smooth,Time[shift],shift);        Bears[shift] = mAverage(3,MA_Mode,lbears,Smooth,Time[shift],shift);               if(shift  lt  len + Smooth + Signal) continue;                     if(Signal  gt  1)          {             signalBulls[shift] = mAverage(4,MA_Mode,Bulls,Signal,Time[shift],shift);           signalBears[shift] = mAverage(5,MA_Mode,Bears,Signal,Time[shift],shift);            }                 if(LevelsMode == 0)          {          if(StrengthLevel  gt  0) strength[shift] = StrengthLevel/100*(Bulls[shift] + Bears[shift]);          if(WeaknessLevel  gt  0) weakness[shift] = WeaknessLevel/100*(Bulls[shift] + Bears[shift]);          }          else          if(LevelsMode == 1 && shift  gt  len + Smooth + LookBackPeriod)          {             for(int j = 0; j  lt  LookBackPeriod; j++)             {              HiArray[j] = MathMax(Bulls[shift-j],Bears[shift-j]);               LoArray[j] = MathMin(Bulls[shift-j],Bears[shift-j]);              }                          if(UpperMultiplier  gt  0) strength[shift] = SMA(HiArray,LookBackPeriod,LookBackPeriod-1) + UpperMultiplier*stdDev(HiArray,LookBackPeriod);           if(LowerMultiplier  gt  0) weakness[shift] = SMA(LoArray,LookBackPeriod,LookBackPeriod-1) - LowerMultiplier*stdDev(LoArray,LookBackPeriod);          }          else          if(LevelsMode == 2 && shift  gt  len + Smooth + LookBackPeriod)          {             for(int j = 0; j  lt  LookBackPeriod; j++)             {              HiArray[j] = MathMax(Bulls[shift-j],Bears[shift-j]);               LoArray[j] = MathMin(Bulls[shift-j],Bears[shift-j]);              }                                upPivot = getPivots(0,HiArray,LookBackPeriod);          dnPivot = getPivots(1,LoArray,LookBackPeriod);                  strength[shift] = upPivot - (upPivot - dnPivot)*(1 - StrengthLevel/100);          weakness[shift] = dnPivot + (upPivot - dnPivot)*WeaknessLevel/100;          }       }       }          //--- done    return(rates_total); } //+------------------------------------------------------------------+  double mAverage(int index,int mode,double& array[],int length,datetime time,int bar) {    double ma = 0;        switch(mode)    {    case 1:  ma = EMA (index,array[bar],length    ,time,bar); break;    case 2:  ma = EMA (index,array[bar],2*length-1,time,bar); break;    case 3:  ma = LWMA(array,length,bar); break;       case 0:  ma = SMA (array,length,bar); break;       }        return(ma); }   // SMA - Simple Moving Average double SMA(double& array[],int length,int bar) {    int i;    double sum = 0;    for(i = 0;i  lt  length;i++) sum += array[bar-i];        return(sum/length); }  // EMA - Exponential Moving Average double EMA(int index,double _price,int length,datetime time,int bar) {    if(ptime[index]  lt  time) {ema[index][1] = ema[index][0]; ptime[index] = time;}         if(ftime[index]) {ema[index][0] = _price; ftime[index] = false;}    else     ema[index][0] = ema[index][1] + 2.0/(1+length)*(_price - ema[index][1]);         return(ema[index][0]); }  // LWMA - Linear Weighted Moving Average  double LWMA(double& array[],int length,int bar) {    double lwma, sum = 0, weight = 0;           for(int i = 0;i  lt  length;i++)       {        weight+= (length - i);       sum += array[bar-i]*(length - i);       }        if(weight  gt  0) lwma = sum/weight; else lwma = 0;         return(lwma); }  // stdDev - Standard Deviation  double stdDev(double& array[],int length) {    int i;    double avg = 0;    for (i=0;i lt length;i++) avg += array[i]/length;             double sum = 0;    for (i=0;i lt length;i++) sum += MathPow(array[i] - avg,2);    return(MathSqrt(sum/length)); }         double getPivots(int type,double& array[],int len) {    int i;    double max = 0, min = 100000000;            for(i=0;i lt len;i++)    {        if(type == 0 && array[i]  gt  max && array[i]  lt  1000000) max = array[i];         if(type == 1 && array[i]  lt  min ) min = array[i];       }      if(type == 0) return(max);     if(type == 1) return(min);            return(0);   }            string priceToString(ENUM_APPLIED_PRICE app_price) {    switch(app_price)    {    case PRICE_CLOSE   :    return("Close");    case PRICE_HIGH    :    return("High");    case PRICE_LOW     :    return("Low");    case PRICE_MEDIAN  :    return("Median");    case PRICE_OPEN    :    return("Open");    case PRICE_TYPICAL :    return("Typical");    case PRICE_WEIGHTED:    return("Weighted");    default            :    return("");    } }  datetime iTime(string symbol,ENUM_TIMEFRAMES TF,int index) {    if(index  lt  0) return(-1);    static datetime timearray[];    if(CopyTime(symbol,TF,index,1,timearray)  gt  0) return(timearray[0]); else return(-1); }    

 

About Me

I'm Mike Semlitsch the owner of PerfectTrendSystem.com. My trading career started in 2007. Since 2013 I have helped thousands of traders to take their trading to the next level. Many of them are now constantly profitable traders. 

The following performance was achieved by me while trading live in front of hundreds of my clients:

Connect With Me:  

Results From 5 Months!
This service starts soon! Be the first who get's notified when it begins!

This FREE Indicator Can Transform
Your Trading!

FREE Indicator + Telegram Group


Request the Ultimate Double Top/Bottom Indicator which is used by 10,000+ traders.