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

ICWR

icwr.a.mq5
Вы автор или правообладатель?

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

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

О программе

Индикатор ICWR для MetaTrader 4 рассчитывает точки зигзагообразных экстремумов цены на основе заданных параметров глубины, отклонения и шага. Он отображает на графике красную трендовую линию, соединяющую значимые волны, превышающие минимальную высоту, и накладывает зелёный объект Фибоначчи с уровнями ретракции между началом и концом этой волны. Для работы используются два внутренних буфера индикатора и графические объекты чарта.

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

НастройкаОписание
ExtDepth Глубина поиска — Количество баров, в пределах которых ищется экстремум (минимум или максимум) при построении зигзага.
ExtDeviation Отклонение — Минимальное отклонение в пунктах между текущим экстремумом и найденным минимумом/максимумом за заданную глубину, необходимое для признания нового уровня значимым.
ExtBackstep Шаг возврата — Количество баров, на которые осуществляется проверка назад для устранения промежуточных точек зигзага, оказавшихся выше нового минимума или ниже нового максимума.
RequiredWaveHeight Требуемая высота волны — Минимальная высота волны в пунктах, необходимая для отрисовки трендовой линии и объекта Фибоначчи; значение автоматически корректируется в зависимости от текущего таймфрейма.
Получить полный код

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

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Black

extern int ExtDepth=10;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int RequiredWaveHeight=40;

double ExtMapBuffer[];
double ExtMapBuffer2[];

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

int deinit()                           // Removes all lines and text
{                                      // from the chart upon removal

   ObjectDelete("ActiveWave");
   ObjectDelete("Fibo");
   return(0);
}

int start()
{
      // код доступен только после оплаты
   }
   if(Period()==5) {RequiredWaveHeight=40;}
   if(Period()==240) {RequiredWaveHeight=150;}
   int    shift,back,lasthighpos,lastlowpos,LastActivePos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,LastActive;

   int AWStartPos, AWEndPos;
   double AWStart, AWEnd;

   double FiboL, FiboH, FiboLC, FiboLR, FiboHR, FiboHC;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
   {

      val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];

      if(val==lastlow)                 // If this is not a new low
         val=0.0;                      // - Reset the val marker to dbl 0

      else                             // Otherwise, if it is a new low
      { 
         lastlow=val;                  // - Record this new low in lastlow for future reference
         if((Low[shift]-val)>(ExtDeviation*Point)) 
            val=0.0;                   // If the low of the current bar is 6 or

         else                          // Otherwise, if the current low is within 6 pips
         {                             // of the lowest low of the last 12 bars
            for(back=1; back<=ExtBackstep; back++)
            {                          // Check back 3 bars, and if each value over those

               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) 
                  ExtMapBuffer[shift+back]=0.0; 
            }
         }
      } 

      ExtMapBuffer[shift]=val;         // Set our current bar to 0 (continuation of zig) if:

      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];

      if(val==lasthigh) 
         val=0.0;
      else 
      {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) 
            val=0.0;
         else
         {
            for(back=1; back<=ExtBackstep; back++)
            {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) 
                  ExtMapBuffer2[shift+back]=0.0; 
            } 
         }
      }
      ExtMapBuffer2[shift]=val;
   }

   lasthigh=-1; 
   lasthighpos=-1;
   lastlow=-1;  
   lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
   {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];

      if((curlow==0)&&(curhigh==0))    // Break into the next cycle of the loop
         continue;                     // to try and find the next zig-zap endpoint

      if(curhigh!=0)                   // If there is a current high, then:
      {
         if(lasthigh>0)                   // If there was a previous high already:
         {
            if(lasthigh<curhigh)          //    - Set the last high to 0 if it is less than the current high
               ExtMapBuffer2[lasthighpos]=0;
            else                          //    - Set the current bar to 0 if it is less than the last high
               ExtMapBuffer2[shift]=0;
         }

         if(lasthigh<curhigh || lasthigh<0)
         {                             // If there was no last high or the last high was less than the current high
            lasthigh=curhigh;          //    - Set the current high to be the last high (keep record of it)
            lasthighpos=shift;         //    - Set the current bar to the lasthighpos (keep record of it)
         }
         lastlow=-1;                   // Since we just had a new high, reset the lastlow flag
      }

      if(curlow!=0)                    // If there is a low, then do the same as above, except for the case of lows instead of h

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

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

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

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

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

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

Стоимость полного кода
525,50₽ ≈ $6.42