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

!sm_adr marker.mq5

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

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

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

О программе

Индикатор !sm_adr marker.mq5 рассчитывает средний дневной диапазон (ADR) на основе ATR с дневного таймфрейма и отображает уровни высокой и низкой цены сессии на графике. Используются пользовательские часовые пояса для определения начала текущего торгового дня и границ предыдущего дня. При достижении порогового значения диапазона цвета и толщины линий меняются. Индикатор создаёт графические объекты (трендовые линии и текстовые метки) с префиксом [ADR].

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

НастройкаОписание
TimeZoneOfData Часовой пояс данных, используемый для вычисления границ торговых дней на графике.
TimeZoneOfSession Часовой пояс сессии, используемый совместно с часовым поясом данных для определения начала и окончания торговой сессии.
ATRPeriod Период расчёта ATR для дневного таймфрейма, используемого для определения среднего дневного диапазона цены.
UseManualADR Переключатель, активирующий использование ручного значения ADR вместо автоматически рассчитанного через ATR.
ManualADRValuePips Значение ADR в пипсах, используемое вместо рассчитанного ATR при активном переключателе ручного режима.
LineStyle Стиль линий уровней (сплошная, пунктирная и т.д.), применяемый к горизонтальным линиям ADR.
LineThickness1 Толщина линий уровней в обычном состоянии, когда текущий диапазон меньше порогового значения.
LineColor1 Цвет линий уровней высокой и низкой цены в обычном состоянии (когда диапазон не достиг порога).
LineThickness2 Толщина линий уровней в активном состоянии, когда текущий диапазон достиг или превышает пороговое значение.
LineColor2 Цвет линий уровней высокой и низкой цены в активном состоянии (когда диапазон достиг порога).
BarForLabels Смещение в барах для позиционирования текстовых меток уровней на графике относительно текущего бара.
DebugLogger Включает или отключает вывод отладочной информации в журнал для отслеживания расчётов индикатора.
Получить полный код

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

#property indicator_chart_window

extern int TimeZoneOfData = 0;
extern int TimeZoneOfSession = 0;
int gi_84 = 0;
int gi_88 = 24;
int g_timeframe_92 = PERIOD_D1;
extern int ATRPeriod = 14;
extern bool UseManualADR = FALSE;
extern int ManualADRValuePips = 0;
extern int LineStyle = 2;
extern int LineThickness1 = 1;
extern color LineColor1 = Orange;
extern int LineThickness2 = 2;
extern color LineColor2 = Orange;
bool gi_128 = TRUE;
extern int BarForLabels = -10;
extern bool DebugLogger = FALSE;
int g_time_140 = 0;
int g_timeframe_144 = 0;
int gi_148 = -1;
double gd_152;

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

int deinit() {
   string l_name_0;
   int l_objs_total_8 = ObjectsTotal();
   for (int l_objs_total_12 = l_objs_total_8; l_objs_total_12 >= 0; l_objs_total_12--) {
      l_name_0 = ObjectName(l_objs_total_12);
      if (StringSubstr(l_name_0, 0, 5) == "[ADR]") ObjectDelete(l_name_0);
   }
   Comment("");
   return (0);
}

int start() {
      // код доступен только после оплаты
   }
   double l_open_0;
   double l_open_8;
   double ld_16;
   double ld_24;
   double ld_32;
   int li_40;
   int li_44;
   double ld_48;
   int li_56 = 0;
   int li_60 = 0;
   int li_64 = 0;
   if (Period() > PERIOD_D1) return (-1);
   if (DebugLogger) {
      Print("Local time current bar:", TimeToStr(Time[0]));
      Print("Dest  time current bar: ", TimeToStr(Time[0] - 3600 * (TimeZoneOfData - TimeZoneOfSession)), ", tzdiff= ", TimeZoneOfData - TimeZoneOfSession);
   }
   ComputeDayIndices(TimeZoneOfData, TimeZoneOfSession, li_56, li_60, li_64);
   if (Time[0] == g_time_140 && Period() == g_timeframe_144 && gi_148 == li_56) {
   }
   g_timeframe_144 = Period();
   g_time_140 = Time[0];
   gi_148 = li_56;
   int li_68 = TimeZoneOfData + TimeZoneOfSession;
   int li_72 = 3600 * li_68;
   datetime l_time_76 = Time[li_56];
   double ld_80 = iATR(NULL, g_timeframe_92, ATRPeriod, 1);
   if (UseManualADR) ld_80 = ManualADRValuePips * gd_152;
   double l_open_88 = 0;
   double ld_96 = 0;
   double ld_104 = 0;
   double ld_112 = 0;
   double ld_120 = 0;
   bool li_128 = FALSE;
   for (int li_132 = li_56; li_132 >= 0; li_132--) {
      li_44 = Time[li_132] - li_72;
      if (TimeHour(li_44) >= gi_84 && TimeHour(li_44) < gi_88) {
         if (l_open_88 == 0.0) {
            l_open_88 = Open[li_56];
            ld_112 = l_open_88 + ld_80;
            ld_120 = l_open_88 - ld_80;
            l_open_0 = l_open_88;
            l_open_8 = l_open_88;
         }
         for (int l_count_136 = 0; l_count_136 < 3; l_count_136++) {
            switch (l_count_136) {
            case 0:
               ld_48 = Low[li_132];
               break;
            case 1:
               ld_48 = High[li_132];
               break;
            case 2:
               ld_48 = Close[li_132];
            }
            ld_24 = l_open_0;
            ld_32 = l_open_8;
            li_40 = li_128;
            l_open_0 = MathMax(l_open_0, ld_48);
            l_open_8 = MathMin(l_open_8, ld_48);
            ld_16 = l_open_0 - l_open_8;
            li_128 = ld_16 >= ld_80 - gd_152 / 2.0;
            if (!li_40 && !li_128) ld_112 = l_open_8 + ld_80;
            else {
               if (!li_40 && li_128 && ld_48 >= ld_24) ld_112 = l_open_8 + ld_80;
               else {
                  if (!li_40 && li_128 && ld_48 < ld_24) ld_112 = ld_24;
                  else ld_112 = ld_112;
               }
            }
            if (!li_40 && !li_128) {
               if (DebugLogger) Print("#: ", li_132, " ", "", l_open_0, "-", ld_80, "= ", l_open_0 - ld_80);
               ld_120 = l_open_0 - ld_80;
            } else {
               if (!li_40 && li_128 && ld_48 >= ld_32) {
                  if (DebugLogger) Print("#: ", li_132, " ", "", l_open_8);
                  ld_120 = l_open_8;
               } else {
                  if (!li_40 && li_128 && ld_48 < ld_32) {
                     if (DebugLogger) Print("#: ", li_132, " ", "", ld_24, "-", ld_80, "= ", ld_24 - ld_80);
                     ld_120 = ld_24 - ld_80;
                  } else {
                     if (DebugLogger) Print("#: ", li_132, " ", "", ld_120);
                     ld_120 = ld_120;
                  }
               }
            }
            ld_96 = ld_112 - Close[li_132];
            ld_104 = Close[li_132] - ld_120;
            if (DebugLogger) {
               Print("#:", li_132, " ", TimeToStr(li_44, TIME_MINUTES), "", l_open_0 - l_open_8, "", li_128);
               Print("#: ", li_132, " ", "", ld_48, " (k= ", l_count_136, "");
               Print("#: ", li_132, " ", "", ld_80, ", O= ", l_open_0, ", P= ", l_open_8, ", Q= ", l_open_

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

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

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

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

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

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

Стоимость полного кода
690,80₽ ≈ $8.44