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

zb tma tt.mq5

Вы автор или правообладатель?

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

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

О программе

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

Индикатор определяет локальные экстремумы сглаженных данных и рисует ZigZag и стрелки в точках разворотов. Зоны покупок и продаж формируются вокруг этих точек в зависимости от заданных параметров глубины и отклонения. Все отображаемые элементы размещаются в отдельных буферах с настраиваемыми стилями отрисовки.

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

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

НастройкаОписание
TMAPeriod TMAPeriod — Задаёт основной период расчёта центральной линии TMA.
HalfTMAPeriod HalfTMAPeriod — Задаёт период расчёта половинной линии TMA, используемой для определения экстремумов и ZigZag.
TMAPrice TMAPrice — Задаёт тип ценовых данных, используемых при расчёте линий TMA (0 — Close, 1 — Open, 4 — Median, 5 — Typical, 6 — Weighted).
ShowZigZag ShowZigZag — Включает или отключает отображение ZigZag-линии на графике.
Depth Depth — Задаёт глубину поиска локальных минимумов и максимумов для отрисовки стрелок и зон покупок/продаж.
Deviation Deviation — Задаёт отклонение (в барах) для определения экстремумов при построении ZigZag-линии.
Backstep Backstep — Задаёт количество баров, используемых для коррекции расчёта половинной линии TMA. Влияет на формулу усреднения экстремумов.
Получить полный код

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

/*
   Generated by EX4-TO-MQ4 decompiler V4.0.438.3 [-]
   Website: 
   E-mail : p******m*@gmail.com
*/

#property indicator_chart_window
#property indicator_buffers 8

#property indicator_color1 White
#property indicator_color2 RoyalBlue
#property indicator_color3 Lavender //Lime
#property indicator_color4 Purple
#property indicator_color5 Lime
#property indicator_color6 Red
#property indicator_color7 Lime
#property indicator_color8 Red
#property indicator_width1  4
#property indicator_width2  2
#property indicator_width5  2
#property indicator_width6  2

extern int     TMAPeriod  =  3;
extern int HalfTMAPeriod  =  21;
extern int      TMAPrice  =  0;
extern bool   ShowZigZag  =  true;
extern int         Depth  =  12;
extern int     Deviation  =  20;
extern int      Backstep  =  3;

double KREST[];
double ZIGZAG[];
double CenterTMA[];
double HalfTMA[];
double ArrowUP[];
double ArrowDN[];
double ZoneBUY[];
double ZoneSELL[];
int gia_136[6] = {0, 0, 0, 0, 0, 0};
int gia_140[5] = {0, 0, 0, 0, 0};
int gi_144;
int gi_148;
int gi_152;
int gi_156;
int gi_160;
bool gi_164 = TRUE;
int g_bars_168 = 0;

void f0_6(int i) {
   if (Bars - i > TMAPeriod + 1) f0_5(i);
   else CenterTMA[i] = 0;
   if (Bars - i > HalfTMAPeriod + TMAPeriod + 2) {
      CalcTMAlines(i);
      return;
   }
   HalfTMA[i] = 0;
}

void f0_5(int i) {
   int li_4;
   int count_8;
   int counted_bars;
   int limit;
   double ld_20;
   switch (TMAPrice) {
   case 0:
      CenterTMA[i] = iMA(NULL, 0, TMAPeriod + 1, 0, MODE_LWMA, PRICE_CLOSE, i);
      break;
   case 1:
      CenterTMA[i] = iMA(NULL, 0, TMAPeriod + 1, 0, MODE_LWMA, PRICE_OPEN, i);
      break;
   case 4:
      CenterTMA[i] = iMA(NULL, 0, TMAPeriod + 1, 0, MODE_LWMA, PRICE_MEDIAN, i);
      break;
   case 5:
      CenterTMA[i] = iMA(NULL, 0, TMAPeriod + 1, 0, MODE_LWMA, PRICE_TYPICAL, i);
      break;
   case 6:
      CenterTMA[i] = iMA(NULL, 0, TMAPeriod + 1, 0, MODE_LWMA, PRICE_WEIGHTED, i);
      break;
   default:
      CenterTMA[i] = iMA(NULL, 0, TMAPeriod + 1, 0, MODE_LWMA, PRICE_OPEN, i);
   }
   for (int x = i + TMAPeriod + 2; x > i; x--) {
      ld_20 = 0.0;
      li_4 = 0;
      count_8 = 0;
      counted_bars = x + TMAPeriod;
      limit = x - TMAPeriod;
      if (limit < i) limit = i;
      while (counted_bars >= x) {
         count_8++;
         ld_20 += count_8 * f0_2(counted_bars);
         li_4 += count_8;
         counted_bars--;
      }
      while (counted_bars >= limit) {
         count_8--;
         ld_20 += count_8 * f0_2(counted_bars);
         li_4 += count_8;
         counted_bars--;
      }
      CenterTMA[x] = ld_20 / li_4;
   }
}

double f0_2(int i) {
   switch (TMAPrice) {
   case 0:
      return (Close[i]);
   case 1:
      return (Open[i]);
   case 4:
      return ((High[i] + Low[i]) / 2.0);
   case 5:
      return ((Close[i] + High[i] + Low[i]) / 3.0);
   case 6:
      return ((2.0 * Close[i] + High[i] + Low[i]) / 4.0);
   }
   return (Open[i]);
}

void CalcTMAlines(int i) {
   double ld_4;
   double ld_12;
   for (int k = i + TMAPeriod + 2; k >= i; k--) {
      ld_4 = CenterTMA[ArrayMaximum(CenterTMA, HalfTMAPeriod, k)];
      ld_12 = CenterTMA[ArrayMinimum(CenterTMA, HalfTMAPeriod, k)];
      HalfTMA[k] = ((Backstep + 2) * 2 * CenterTMA[k] - (ld_4 + ld_12)) / 2.0 / (Backstep + 1);
   }
}

void ManageZigZag(int i) {
   int li_4;
   int j;
   int counted_bars;
   int index_16;
   int k = i - 1;
   int li_24 = 0;
   int li_28 = 0;
   while (k < gi_144 && counted_bars == 0) {
      k++;
      ZIGZAG[k] = 0;
      li_4 = k - Deviation;
      if (li_4 < i) li_4 = i;
      j = k + Deviation;
      if (k == ArrayMinimum(HalfTMA, j - li_4 + 1, li_4)) {
         counted_bars = -1;
         li_24 = k;
      }
      if (k == ArrayMaximum(HalfTMA, j - li_4 + 1, li_4)) {
         counted_bars = 1;
         li_28 = k;
      }
   }
   if (counted_bars != 0) {
      index_16 = 0;
      if (k > i) {
         if (HalfTMA[k] > HalfTMA[i]) {
            if (counted_bars == 1) {
               if (k >= i + Deviation && index_16 < 5) {
                  index_16++;
                  gia_136[index_16] = k;
               }
               li_28 = k;
               ZIGZAG[k] = HalfTMA[k];
            }
         } else {
            if (counted_bars == -1) {
               if (k >= i + Deviation && index_16 < 5) {
                  index_16++;
                  gia_136[index_16] = k;
               }
               li_24 = k;
               ZIGZAG[k] = HalfTMA[k];
            }
         }
      }
      while (k < gi_160 || index_16 < 5) {
         ZIGZAG[k] = 0;
         li_4 = k - Deviation;
         if (li_4 < i) li_4 = i;
         j = k + Deviation;
         if (k == ArrayMinimum(HalfTMA, j - li_4 + 1, li_4)) {
            if (counted_bars == -1 && HalfTMA[k] < HalfTMA[li_24]) {
               if (k >= i + Deviation && index_16 < 5) gia_136[index_16] = k;
               ZIGZAG[li_24] = 0;
               ZIGZAG[k] = HalfTMA[k];
               li_24 = k;
            }
            if (counted_bars == 1) {
               if (k >= i + Deviation && index_16 < 5) {
                  index_16++;
                  gia_136[index_16] = k;
               }
               ZIGZAG[k] = HalfTMA[k];
               counted_bars = -1;
               li_24 = k;
            }
         }
         if (k == ArrayMaximum(HalfTMA, j - li_4 + 1, li_4)) {
            if (counted_bars == 1 && HalfTMA[k] > HalfTMA[li_28]) {
               if (k >= i + Deviation && index_16 < 5) gia_136[index_16] = k;
               ZIGZAG[li_28] = 0;
               ZIGZAG[k] = HalfTMA[k];
               li_28 = k;
            }
            if (counted_bars == -1) {
               if (k >= i + Deviation && index_16 < 5) {
                  index_16++;
                  gia_136[index_16] = k;
               }
               ZIGZAG[k] = HalfTMA[k];
               counted_bars = 1;
               li_28 = k;
            }
         }
         k++;
         if (k > gi_144) return;
      }
      gi_152 = Bars - gia_136[5];
      ZIGZAG[i] = HalfTMA[i];
      return;
   }
}

void ManageArrowsZones(int i) {
   int li_4;
   int j;
   int counted_bars;
   int index_16;
   int k = i - 1;
   int li_24 = 0;
   int 

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

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

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

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

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

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

Стоимость полного кода
768,90₽ ≈ $9.40