← К каталогу
Исходный код · ID 3244

AllAbsoluteQQE

allabsoluteqqe_v2.3.mq4

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

AllAbsoluteQQE_v2.3 — пользовательский индикатор для MetaTrader 4, отображаемый в отдельном окне. Он рассчитывает аналитическую линию разницы и связанные с ней уровни, используя выбранный математический метод, сглаживание и один из множества вариантов скользящих средних. Индикатор поддерживает несколько режимов построения уровней и может подавать звуковые и почтовые уведомления при появлении сигналов.

Настройки позволяют задать таймфрейм расчёта, метод математической обработки, цену, периоды оценки и сглаживания, метод средней, параметры усреднения диапазона и множитель. Дополнительно настраиваются режим сигналов, режим уровней, пороги перекупленности/перепроданности, параметры канала и уведомлений.

Индикатор выводит буферы разницы, восходящего и нисходящего тренда, сигнальные стрелки, а также линии перекупленности и перепроданности. При включённом режиме оповещений он формирует предупреждения, воспроизводит звуки и отправляет письма при появлении сигналов.

Настройки программы

НастройкаОписание
TimeFrame in min (TimeFrame) Таймфрейм — Таймфрейм в минутах, используемый для расчёта индикатора.
Math method: 0-RSI;1-Stoch;2-DMI (MathMode) Математический метод — Метод математической обработки: 0 — RSI, 1 — Stoch, 2 — DMI.
Price = 0...10 (see List of Prices) (Price) Цена — Цена, используемая в расчётах, от 0 до 10 согласно списку цен.
Period of evaluation (Length) Период оценки — Период оценки, используемый в расчётах индикатора.
Period of PreSmoothing (PreSmooth) Период предсглаживания — Период предварительного сглаживания.
Period of smoothing (Smooth) Период сглаживания — Период сглаживания.
According to list above (MA_Method) Метод средней — Метод скользящей средней, выбираемый из списка поддерживаемых вариантов.
Average Range Period (RangeAvgLength) Период усреднения диапазона — Период усреднения диапазона.
Average Range Multiplier (Multiplier) Множитель диапазона — Множитель среднего диапазона, влияющий на ширину полос.
0-off,1-on (SignalMode) Режим сигналов — Включает или отключает режим сигналов.
Levels Mode: 0-Standard OverBought/OverSold (LevelsMode) Режим уровней — Режим построения уровней: 0 — стандартные уровни перекупленности/перепроданности, 1 — полосы стандартного отклонения, 2 — канал по максимумам и минимумам.
Overbougt Level (ex.70) (OverboughtLevel) Уровень перекупленности — Уровень перекупленности, например 70.
Oversold Level (ex.30) (OversoldLevel) Уровень перепроданности — Уровень перепроданности, например 30.
LookBack Period for LevelsMode=1,2 (LookBackPeriod) Период обратного просмотра — Период обратного просмотра, используемый для режимов уровней 1 и 2.
Upper Band Multiplier for LevelsMode=1 (UpperMultiplier) Множитель верхней границы — Множитель верхней границы для режима уровней 1.
Lower Band Multiplier for LevelsMode=1 (LowerMultiplier) Множитель нижней границы — Множитель нижней границы для режима уровней 1.
alerts Оповещения и Email — Разделитель группы настроек оповещений и почтовых уведомлений.
AlertMode Режим оповещений — Включает или отключает режим звуковых и почтовых оповещений.
Number of sounds after Signal (SoundsNumber) Количество звуков — Количество звуковых сигналов после появления сигнала.
Pause in sec between sounds (SoundsPause) Пауза между звуками — Пауза в секундах между звуковыми сигналами.
UpSound Звук для восходящего сигнала — Имя звукового файла, воспроизводимого при восходящем сигнале.
DnSound Звук для нисходящего сигнала — Имя звукового файла, воспроизводимого при нисходящем сигнале.
0-on,1-off (EmailMode) Режим Email — Включает или отключает отправку почтовых уведомлений.
0-on,1-off (EmailsNumber) Количество Email — Количество отправляемых почтовых уведомлений.
Получить полный код

Поиск по коду файла

#property indicator_separate_window
#property indicator_buffers 7

#property indicator_color1 Silver
#property indicator_color2 RoyalBlue
#property indicator_color3 Tomato
#property indicator_color4 RoyalBlue
#property indicator_color5 Tomato
#property indicator_color6 Gray
#property indicator_color7 Gray
#property indicator_width1 2
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 2
#property indicator_width5 2
#property indicator_style6 4
#property indicator_style7 4

#property indicator_level1 0
#property indicator_levelcolor DimGray

extern int     TimeFrame         =     0;    // TimeFrame in min
extern int     MathMode          =     0;    // Math method: 0-RSI;1-Stoch;2-DMI
extern int     Price             =     0;    // Price = 0...10 (see List of Prices)
extern int     Length            =    27;    // Period of evaluation
extern int     PreSmooth         =     1;    // Period of PreSmoothing
extern int     Smooth            =     5;    // Period of smoothing
extern int     MA_Method         =     1;    // According to list above
extern int     RangeAvgLength    =    27;    // Average Range Period  
extern double  Multiplier        = 4.236;    // Average Range Multiplier
extern int     SignalMode        =     1;    // 0-off,1-on
extern int     LevelsMode        =     2;    // Levels Mode: 0-Standard OverBought/OverSold 

extern double  OverboughtLevel   =    80;    // Overbougt Level (ex.70)
extern double  OversoldLevel     =    20;    // Oversold Level (ex.30)
extern int     LookBackPeriod    =    20;    // LookBack Period for LevelsMode=1,2 
extern double  UpperMultiplier   =     1;    // Upper Band Multiplier for LevelsMode=1 
extern double  LowerMultiplier   =     1;    // Lower Band Multiplier for LevelsMode=1 

extern string  alerts            = "--- Alerts & Emails ---";
extern int     AlertMode         =     0;
extern int     SoundsNumber      =     5;    //Number of sounds after Signal
extern int     SoundsPause       =     5;    //Pause in sec between sounds 
extern string  UpSound           = "alert.wav";
extern string  DnSound           = "alert2.wav";
extern int     EmailMode         =     *;    //0-on,1-off   
extern int     EmailsNumber      =     *;    //0-on,1-off

double Difference[];
double upTrend[];
double dnTrend[];
double upSignal[];
double dnSignal[];
double Overbought[];
double Oversold[];

double tmp[][7][2], ma[7][3], bulls[], bears[], lbulls[], lbears[], trend[3], mMA[2], mLo[2], smin[2], smax[2], HiArray[], LoArray[];
int    draw_begin, masize, arraysize;

string TF, IndicatorName, short_name, math_name, price_name, ma_name, zone_name, prevmess, prevemail;

double hiDiff, loDiff, alpha, delta1[2], delta2[2], upband[2], loband[2], _point;
datetime prevtime[7], ptime, preTime;

int init()
{
      // код доступен только после оплаты
   }

int deinit() {Comment(""); return(0);}

int start()
{
      // код доступен только после оплаты
   }

void _AllAbsQQE(int limit)
{   
   double   upPivot, dnPivot;

   if(ArraySize(bulls) != Bars) 
   {
   ArraySetAsSeries(bulls,false); ArraySetAsSeries(lbulls,false); 
   ArraySetAsSeries(bears,false); ArraySetAsSeries(lbears,false); 
   ArrayResize(bulls,Bars); ArrayResize(lbulls,Bars);
   ArrayResize(bears,Bars); ArrayResize(lbears,Bars);
   ArraySetAsSeries(bulls,true); ArraySetAsSeries(lbulls,true);
   ArraySetAsSeries(bears,true); ArraySetAsSeries(lbears,true);
   }

   for(int shift=limit;shift>=0;shift--) 
   {
      if(ptime != Time[shift]) 
      {
      mMA[1]    = mMA[0]; 
      mLo[1]    = mLo[0]; 
      trend[2]  = trend[1]; trend[1]  = trend[0];
      upband[1] = upband[0];
      loband[1] = loband[0];
      delta1[1] = delta1[0];
      delta2[1] = delta2[0]; 
      ptime     = Time[shift];
      }

   if(MathMode < 2) int price = Price; else price = 2;

   mMA[0] = allAverages(0,price,PreSmooth,MA_Method,masize,shift);       

      if(shift < Bars-2)
      {
         if (MathMode == 0)
         {
         bulls[shift] = 0.5*(MathAbs(mMA[0] - mMA[1]) + (mMA[0] - mMA[1]));
         bears[shift] = 0.5*(MathAbs(mMA[0] - mMA[1]) - (mMA[0] - mMA[1]));
         }
         else  
         if (MathMode == 1)
         {
         double up = 0;      
         double dn = 10000000000;
            for(int i=0;i<Length;i++)
            {   
            up = MathMax(up,High[shift+i]);
            dn = MathMin(dn,Low [shift+i]);
            }
         bulls[shift] = mMA[0] - dn;
         bears[shift] = up - mMA[0];
         }
         else   
         if (MathMode == 2)
         {
         mLo[0] = allAverages(1,3,PreSmooth,MA_Method,masize,shift);          

         bulls[shift] = MathMax(0,0.5*(MathAbs(mMA[0] - mMA[1]) + (mMA[0] - mMA[1])));
         bears[shift] = MathMax(0,0.5*(MathAbs(mLo[1] - mLo[0]) + (mLo[1] - mLo[0])));

            if (bulls[shift] > bears[shift]) bears[shift] = 0;
            else 
            if (bulls[shift] < bears[shift]) bulls[shift] = 0;
            else
            if (bulls[shift] == bears[shift]) {bulls[shift] = 0; bears[shift] = 0;}
         }

      if(MathMode == 1) int len = 1; else len = Length; 

      lbulls[shift] = allAveragesOnArray(2,bulls,len,MA_Method,masize,shift);
      lbears[shift] = allAveragesOnArray(3,bears,len,MA_Method,masize,shift);

      double Bulls = allAveragesOnArray(4,lbulls,Smooth,MA_Method,masize,shift)/_point;      
      double Bears = allAveragesOnArray(5,lbears,Smooth,MA_Method,masize,shift)/_point;  

      Difference[shift] = Bulls - Bears;   

         if(Difference[shift] > Difference[shift+1]) {hiDiff = Difference[shift]; loDiff = Difference[shift+1];}
         else 
         if(Difference[shift] < Difference[shift+1]) {hiDiff = Difference[shift+1]; loDiff = Difference[shift];}
         else
         {hiDiff = Difference[shift]; loDiff = Difference[shift];}

      double range = hiDiff - loDiff;

      delta1[0] = delta1[1] + alpha*(range     - delta1[1]);  
      delta2[0] = delta2[1] + alpha*(delta1[0] - delta2[1]);             

      upband[0] = Difference[shift] + Multiplier*delta2[0]; 
      loband[0] = Difference[shift] - Multiplier*delta2[0]; 

      trend[0] = trend[1];

      if(Difference[shift] > upband[1]) trend[0] = 1; 
	   if(Difference[shift] < loband[1]) trend[0] =-1;

      upTrend[shift]  = EMPTY_VALUE;
      dnTrend[shift]  = EMPTY_VALUE;
      upSignal[shift] = EMPTY_VALUE;
      dnSignal[shift] = EMPTY_VALUE;

         if(trend[0] > 0)
	      {
	      if(loband[0] < loband[1]) loband[0] = loband[1];
	      upTrend[shift] = loband[0];
	      if(SignalMode > 0 && trend[1] < 0) upSignal[shift] = loband[0];
	      }
	      else
	      if(trend[0] < 0)
         {
         if(upband[0] > upband[1]) upband[0] = upband[1];
         dnTrend[shift] = upband[0];
         if(SignalMode > 0 && trend[1] > 0) dnSignal[shift] = upband[0];
         }    

         if(LevelsMode == 0)
         {
         if(OverboughtLevel > 0) Overbought[shift] = (0.02 * OverboughtLevel - 1)*(Bulls + Bears);
         if(OversoldLevel   > 0) Oversold[shift]   = (0.02 * OversoldLevel   - 1)*(Bulls + Bears);
         }
         else
         if(LevelsMode == 1 && shift < Bars - (LookBackPeriod+Length))
         {
            for(int j = 0; j < LookBackPeriod; j++)
            { 
            HiArray[j] = Difference[shift+j];  
            LoArray[j] = Difference[shift+j]; 
            }      

         if(UpperMultiplier > 0) Overbought[shift] = SMAOnArray(HiArray,LookBackPeriod,0) + UpperMultiplier*stdDev(HiArray,LookBackPeriod); 
         if(LowerMultiplier > 0) Oversold[shift]   = SMAOnArray(LoArray,LookBackPeriod,0) - LowerMultiplier*stdDev(LoArray,LookBackPeriod);
         }
         else
         if(LevelsMode == 2 && shift < Bars -(LookBackPeriod + Length))
         {
            for(j = 0; j < LookBackPeriod; j++)
            { 
            HiArray[j] = Difference[shift+j];  
            LoArray[j] = Difference[shift+j]; 
            }   

         upPivot = getPivots(2,HiArray,LookBackPeriod,0);
         dnPivot = getPivots(3,LoArray,LookBackPeriod,0);

         Overbought[shift] = upPivot - (upPivot - dnPivot)*(1 - OverboughtLevel/100);
         Oversold[shift]   = dnPivot + (upPivot - dnPivot)*OversoldLevel/100;
         }
      }   

      if(AlertMode > 0)
      {
      bool   upsignal = false, dnsignal = false;
      string upmess, dnmess, upsubj, dnsubj, sprice = DoubleToStr(Close[1],Digits);

      if(trend[1] > 0 && trend[2] <= 0) {upsignal = true; upmess = "BUY Signal" ; upsubj = "BUY" ;} 
      else
      if(trend[1] < 0 && trend[2] >= 0) {dnsignal = true; dnmess = "SELL Signal"; dnsubj = "SELL";}
      else
      if(Difference[1] >= Overbought[1] && Difference[1] >= 0 && (Difference[2] < Overbought[2] || Difference[2] < 0)) {upsignal = true; upmess = "OverBought Signal"; upsubj = "OverBought";} 
      else
      if(Difference[1] <= Oversold[1]   && Difference[1] <= 0 && (Difference[2] > Oversold[2]   || Difference[2] > 0)) {dnsignal = true; dnmess = "OverSold Signal"  ; dnsubj = "OverSold"  ;} 

         if(upsignal || dnsignal)
         {
            if(isNewBar(TimeFrame))
            {
            BoxAlert(upsignal," : "+upmess+" at "+sprice);   
            BoxAlert(dnsignal," : "+dnmess+" at "+sprice); 
            }

         WarningSound(upsignal,SoundsNumber,SoundsPause,UpSound,Time[1]);
         WarningSound(dnsignal,SoundsNumber,SoundsPause,DnSound,Time[1]);

            if(EmailMode > 0)
            {
            EmailAlert(upsignal,upsubj," : "+upmess+" at "+sprice,EmailsNumber); 
            EmailAlert(dnsignal,dnsubj," : "+dnmess+" at "+sprice,EmailsNumber); 
            }
         }
      }
   }
}

string averageName(int mode,int& _arraysize)
{   
   string _ma_name = "";

   switch(mode)
   {
   case 1 : _ma_name="EMA"       ; break;
   case 2 : _ma_name="Wilder"    ; break;
   case 3 : _ma_name="LWMA"      ; break;
   case 4 : _ma_name="SineWMA"   ; break;
   case 5 : _ma_name="TriMA"     ; break;
   case 6 : _ma_name="LSMA"      ; break;
   case 7 : _ma_name="SMMA"      ; break;
   case 8 : _ma_name="HMA"       ; break;
   case 9 : _ma_name="ZeroLagEMA"; break;
   case 10: _ma_name="DEMA"      ; _arraysize = 2; break;
   case 11: _ma_name="T3 basic"  ; _arraysize = 6; break;
   case 12: _ma_name="InstTrend" ; break;
   case 13: _ma_name="Median"    ; break;
   case 14: _ma_name="GeoMean"   ; break;
   case 15: _ma_name="REMA"      ; break;
   case 16: _ma_name="ILRS"      ; break;
   case 17: _ma_name="IE/2"      ; break;
   case 18: _ma_name="TriMA_gen" ; break;
   case 19: _ma_name="VWMA"      ; break;
   case 20: _ma_name="JSmooth"   ; _arraysize = 5; break;
   case 21: _ma_name="SMA_eq"    ; break;
   case 22: _ma_name="ALMA"      ; break;
   case 23: _ma_name="TEMA"      ; _arraysize = 4; break;
   case 24: _ma_name="T3"        ; _arraysize = 6; break;
   case 25: _ma_name="Laguerre"  ; _arraysize = 4; break;
   default: _ma_name="SMA";
   }

   return(_ma_name);

}

double allAverages(int index,int price,int period,int mode,int _arraysize,int bar)
{
   double MA[3];  

    if(prevtime[index] != Time[bar])
    {
    ma[index][2]  = ma[index][1]; 
    ma[index][1]  = ma[index][0]; 
    for(int i=0;i<_arraysize;i++) tmp[i][index][1] = tmp[i][index][0];

    prevtime[index] = Time[bar]; 
    }

   for(i=0;i<3;i++) MA[i] = ma[index][i];   

   switch(mode)
   {
   case 1 : ma[index][0] = EMA(price,ma[index][1],period,bar); break;
   case 2 : ma[index][0] = Wilder(price,ma[index][1],period,bar); break;  
   case 3 : ma[index][0] = LWMA(price,period,bar); break;
   case 4 : ma[index][0] = SineWMA(price,period,bar); break;
   case 5 : ma[index][0] = TriMA(price,period,bar); break;
   case 6 : ma[index][0] = LSMA(price,period,bar); break;
   case 7 : ma[index][0] = SMMA(price,ma[index][1],period,bar); break;
   case 8 : ma[index][0] = HMA(price,period,bar); break;
   case 9 : ma[index][0] = ZeroLagEMA(price,ma[index][1],period,bar); break;
   case 10: ma[index][0] = DEMA(index,0,price,period,1,bar); break;
   case 11: ma[index][0] = T3_basic(index,0,price,period,0.7,bar); break;
   case 12: ma[index][0] = ITrend(price,MA,period,bar); break;
   case 13: ma[index][0] = Median(price,period,bar); break;
   case 14: ma[index][0] = GeoMean(price,period,bar); break;
   case 15: ma[index][0] = REMA(price,MA,period,0.5,bar); break;
   case 16: ma[index][0] = ILRS(price,period,bar); break;
   case 17: ma[index][0] = IE2(price,period,bar); break;
   case 18: ma[index][0] = TriMA_gen(price,period,bar); break;
   case 19: ma[index][0] = VWMA(price,period,bar); break;
   case 20: ma[index][0] = JSmooth(index,0,price,period,1,bar); break;
   case 21: ma[index][0] = SMA_eq(price,MA,period,bar); break;
   case 22: ma[index][0] = ALMA(price,period,0.85,8,bar); break;
   case 23: ma[index][0] = TEMA(index,price,period,1,bar); break;
   case 24: ma[index][0] = T3(index,0,price,period,0.7,bar); break;
   case 25: ma[index][0] = Laguerre(index,price,period,4,bar); break;
   default: ma[index][0] = SMA(price,period,bar); break;
   }

   return(ma[index][0]);
}

double allAveragesOnArray(int index,double& price[],int period,int mode,int _arraysize,int bar)
{
   double MA[3];  

    if(prevtime[index] != Time[bar])
    {
    ma[index][2]  = ma[index][1]; 
    ma[index][1]  = ma[index][0]; 
    for(int i=0;i<_arraysize;i++) tmp[i][index][1] = tmp[i][index][0];

    prevtime[index] = Time[bar]; 
    }

   for(i=0;i<3;i++) MA[i] = ma[index][i];   

   switch(mode)
   {
   case 1 : ma[index][0] = EMAOnArray(price[bar],ma[index][1],period,bar); break;
   case 2 : ma[index][0] = WilderOnArray(price[bar],ma[index][1],period,bar); break;  
   case 3 : ma[index][0] = LWMAOnArray(price,period,bar); break;
   case 4 : ma[index][0] = SineWMAOnArray(price,period,bar); break;
   case 5 : ma[index][0] = TriMAOnArray(price,period,bar); break;
   case 6 : ma[index][0] = LSMAOnArray(price,period,bar); break;
   case 7 : ma[index][0] = SMMAOnArray(price,ma[index][1],period,bar); break;
   case 8 : ma[index][0] = HMAOnArray(price,period,bar); break;
   case 9 : ma[index][0] = ZeroLagEMAOnArray(price,ma[index][1],period,bar); break;
   case 10: ma[index][0] = DEMAOnArray(index,0,price[bar],period,1,bar); break;
   case 11: ma[index][0] = T3_basicOnArray(index,0,price[bar],period,0.7,bar); break;
   case 12: ma[index][0] = ITrendOnArray(price,MA,period,bar); break;
   case 13: ma[index][0] = MedianOnArray(price,period,bar); break;
   case 14: ma[index][0] = GeoMeanOnArray(price,period,bar); break;
   case 15: ma[index][0] = REMAOnArray(price[bar],MA,period,0.5,bar); break;
   case 16: ma[index][0] = ILRSOnArray(price,period,bar); break;
   case 17: ma[index][0] = IE2OnArray(price,period,bar); break;
   case 18: ma[index][0] = TriMA_genOnArray(price,period,bar); break;
   case 19: ma[index][0] = VWMAOnArray(price,period,bar); break;
   case 20: ma[index][0] = JSmoothOnArray(index,0,price[bar],period,1,bar); break;
   case 21: ma[index][0] = SMA_eqOnArray(price,MA,period,bar); break;
   case 22: ma[index][0] = ALMAOnArray(price,period,0.85,8,bar); break;
   case 23: ma[index][0] = TEMAOnArray(index,price[bar],period,1,bar); break;
   case 24: ma[index][0] = T3OnArray(index,0,price[bar],period,0.7,bar); break;
   case 25: ma[index][0] = LaguerreOnArray(index,price[bar],period,4,bar); break;
   default: ma[index][0] = SMAOnArray(price,period,bar); break;
   }

   return(ma[index][0]);
}

double SMA(int price,int per,int bar)
{
   double Sum = 0;
   for(int i = 0;i < per;i++) Sum += iMA(NULL,0,1,0,0,price,bar+i);

   return(Sum/per);
}

double SMAOnArray(double& array[],int per,int bar)
{
   double Sum = 0;
   for(int i = 0;i < per;i++) Sum += array[bar+i];

   return(Sum/per);
}

double EMA(int price,double prev,int per,int bar)
{
   if(bar >= Bars - 2) double ema = iMA(NULL,0,1,0,0,price,bar);
   else 
   ema = prev + 2.0/(1+per)*(iMA(NULL,0,1,0,0,price,bar) - prev); 

   return(ema);
}

double EMAOnArray(double price,double prev,int per,int bar)
{
   if(bar >= Bars - 2) double ema = price;
   else 
   ema = prev + 2.0/(1+per)*(price - prev); 

   return(ema);
}

double Wilder(int price,double prev,int per,int bar)
{

Показано первые 50% кода (символов: 32533)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
3 253,30₽ ≈ $39.76