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

source code by @fundedmillionairess.mq4

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

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

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

О программе

Индикатор для MetaTrader 4, рассчитывающий и отображающий Average Daily Range (ADR) на графике. Поддерживает два режима отображения: полный с набором текстовых меток и горизонтальных линий, а также компактный мини-режим. Рисует линии дневного максимума и минимума, недельные уровни поддержки и сопротивления, а также расстояния в пунктах до ключевых ценовых уровней.

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

НастройкаОписание
Custom_Indicator Заголовок индикатора — Текстовая строка, используемая как название индикатора на графике.
Label0 Разделитель настроек расчёта — Текстовый разделитель, группирующий параметры расчёта в интерфейсе.
Input_Days Подсказка количества дней — Текстовая подсказка, описывающая назначение параметра количества дней.
Day_x Количество дней — Целое число, определяющее период усреднения для расчёта ADR.
Label1 Разделитель настроек угла — Текстовый разделитель, группирующий параметры расположения на графике.
Upper_Corner_Help Подсказка верхнего угла — Текстовая подсказка: 0 — верхний левый, 1 — верхний правый угол.
Lower_Corner_Help Подсказка нижнего угла — Текстовая подсказка: 2 — нижний левый, 3 — нижний правый угол.
Corner Угол расположения — Целое число от 0 до 3, задающее угол привязки объектов индикатора на графике.
Label2 Разделитель настроек цвета — Текстовый разделитель, группирующий параметры цветовой схемы.
Color_Help Подсказка цвета ADR — Текстовая подсказка для выбора цвета ADR.
ADR_Color Цвет ADR — Цвет текстовых меток и линий индикатора ADR.
Daily_High_Color Цвет линии дневного максимума — Цвет горизонтальной линии дневного максимума.
Daily_Low_Color Цвет линии дневного минимума — Цвет горизонтальной линии дневного минимума.
Label3 Разделитель настроек отображения — Текстовый разделитель, группирующий параметры режимов отображения.
Display_Help Подсказка отображения — Текстовая подсказка для переключения режимов отображения.
Show_Daily_High_Low_Lines Показывать линии дневного высока/низа — Строка Yes/No, включающая или отключающая отрисовку линий дневного максимума и минимума.
Show_Weekly_Lines Показывать недельные линии — Строка Yes/No, включающая или отключающая отрисовку недельных уровней поддержки и сопротивления.
Show_Mini_ADR Компактный режим — Строка Yes/No, переключающая отображение в компактный мини-режим.
Label4 Разделитель настроек шрифта — Текстовый разделитель, группирующий параметры шрифта.
Font_Size_Help Подсказка размера шрифта — Текстовая подсказка с допустимым диапазоном размера шрифта.
Font_Size Размер шрифта — Целое число от 6 до 14, задающее размер шрифта текстовых меток индикатора.
Vertical_Spacing_Adjustment Вертикальное смещение — Целое число, добавляемое к вертикальным координатам объектов индикатора для тонкой настройки расположения.
Получить полный код

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

#property indicator_chart_window

string gs_76 = "";
extern string Custom_Indicator = "Average Daily Range Pro Calculator";
extern string Label0 = "=== Calculation setting ===";
extern string Input_Days = "Enter number of days to calculate.";
extern int Day_x = 5;
extern string Label1 = "=== Corner settings ===";
extern string Upper_Corner_Help = "0 = Upper Left, 1 = Right";
extern string Lower_Corner_Help = "2 = Lower Left, 3 = Right";
extern int Corner = 2;
extern string Label2 = "=== Color settings ===";
extern string Color_Help = "Select ADR color:";
extern color ADR_Color = Goldenrod;
extern color Daily_High_Color = LimeGreen;
extern color Daily_Low_Color = Fuchsia;
extern string Label3 = "=== Display settings ===";
extern string Display_Help = "Enter Yes or No";
extern string Show_Daily_High_Low_Lines = "Yes";
extern string Show_Weekly_Lines = "Yes";
extern string Show_Mini_ADR = "No";
extern string Label4 = "=== Font settings ===";
extern string Font_Size_Help = "Font size can be 6 to 14";
extern int Font_Size = 8;
extern int Vertical_Spacing_Adjustment = 0;
int gia_248[34][2];
int gi_252 = 1;
int gi_256 = 100;
int gi_260 = 3;
bool gi_268 = TRUE;
int gi_unused_272 = 5;
int gi_unused_276 = 15;
double gd_280;
double gd_288;
string gs_296 = "";
string gs_304 = "";
string gs_312;
string gs_320;
string gs_328;
string gs_336;
string gs_344;
string gs_352;
string gs_360;
string g_dbl2str_368;
string g_dbl2str_376;
string g_dbl2str_384;
string g_dbl2str_392;
string g_dbl2str_400;
string gs_408;
string gs_416;
string gs_424;
string gs_432;
string gs_440;
string gs_448;
string gs_456;
string gs_464;
string g_dbl2str_472;
string g_dbl2str_480;
string g_dbl2str_488;
string g_dbl2str_496;
string g_dbl2str_504;
string g_dbl2str_512;
string g_dbl2str_520;
string g_dbl2str_528;
string gs_536 = "";
int gi_544;
bool gi_548;
bool gi_552;
int gi_556;
bool gi_560 = TRUE;
int g_time_564 = 0;
bool gi_568 = TRUE;
int gi_unused_572 = 0;
int g_time_576 = 0;

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

int deinit() {
   DeleteObjs();
   return (0);
}

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

void NormalDisplay() {
   int day_of_week_56;
   double ld_148;
   double ld_0 = 0;
   double ld_8 = 0;
   double ld_16 = 0;
   double ld_24 = 0;
   double ilow_32 = 0;
   double ihigh_40 = 0;
   int li_48 = 0;
   if (gi_560) {
      SetTextData();
      createLabelObjects();
      gi_560 = FALSE;
   }
   double ld_76 = 0;
   double ld_116 = 0;
   double ld_124 = 0;
   double ld_132 = 0;
   double ld_140 = 0;
   double ld_68 = (iHigh(NULL, PERIOD_D1, 1) - iLow(NULL, PERIOD_D1, 1)) / Point;
   ld_24 = 0.0;
   double ld_84 = 0.0;
   double ld_92 = 0.0;
   ld_76 = 0.0;
   int count_52 = 0;
   int count_60 = 0;
   int count_64 = 0;
   for (li_48 = 1; li_48 < 220; li_48++) {
      count_52++;
      if (count_52 > 220) break;
      day_of_week_56 = TimeDayOfWeek(iTime(NULL, PERIOD_D1, li_48));
      if (day_of_week_56 != 0) {
         if (day_of_week_56 == 5 && count_64 == 0) count_64 = 1;
         count_60++;
         ld_148 = iHigh(NULL, PERIOD_D1, li_48) - iLow(NULL, PERIOD_D1, li_48);
         if (count_60 <= Day_x) ld_24 += ld_148;
         if (count_64 > 0 && count_64 <= 5) {
            ld_76 += ld_148;
            count_64++;
         }
         if (count_60 <= 22) ld_84 += ld_148;
         if (count_60 <= 180) ld_92 += ld_148;
         if (count_60 >= 180) break;
      }
   }
   double ld_100 = NormalizeDouble(ld_24 / Day_x / Point, 0);
   ld_0 = NormalizeDouble(ld_100 / 2.0 * Point, Digits);
   ld_76 = NormalizeDouble(0.2 * ld_76 / Point, 0);
   ld_84 = NormalizeDouble(ld_84 / 22.0 / Point, 0);
   ld_92 = NormalizeDouble(ld_92 / 180.0 / Point, 0);
   ilow_32 = iLow(NULL, PERIOD_D1, 0);
   ihigh_40 = iHigh(NULL, PERIOD_D1, 0);
   ld_116 = (ihigh_40 - Ask) / Point;
   ld_124 = (Bid - ilow_32) / Point;
   ld_8 = iOpen(NULL, PERIOD_D1, 0) + ld_0;
   ld_16 = iOpen(NULL, PERIOD_D1, 0) - ld_0;
   ld_132 = (ld_8 - Ask) / Point;
   ld_140 = (Bid - ld_16) / Point;
   g_dbl2str_368 = DoubleToStr(ld_100 / gi_556, 0);
   g_dbl2str_376 = DoubleToStr(ld_68 / gi_556, 0);
   g_dbl2str_384 = DoubleToStr(ld_76 / gi_556, 0);
   g_dbl2str_392 = DoubleToStr(ld_84 / gi_556, 0);
   g_dbl2str_400 = DoubleToStr(ld_92 / gi_556, 0);
   g_dbl2str_472 = DoubleToStr(ld_8, Digits);
   g_dbl2str_480 = DoubleToStr(ihigh_40, Digits);
   g_dbl2str_488 = DoubleToStr(ilow_32, Digits);
   g_dbl2str_496 = DoubleToStr(ld_16, Digits);
   g_dbl2str_504 = DoubleToStr(ld_116 / gi_556, 0);
   g_dbl2str_512 = DoubleToStr(ld_132 / gi_556, 0);
   g_dbl2str_520 = DoubleToStr(ld_124 / gi_556, 0);
   g_dbl2str_528 = DoubleToStr(ld_140 / gi_556, 0);
   if (gi_552) DoADRHighLowLines(ld_8, ld_16);
   updateText();
}

void DoADRHighLowLines(double ad_0, double ad_8) {
   if (g_time_564 != Time[0]) {
      CreateHTLine("TextPlace_ADRHighLine", "ADR High", 0, ad_0, 0, ad_0, STYLE_SOLID, 3, Daily_High_Color, TRUE, FALSE);
      CreateHTLine("TextPlace_ADRLowLine", "ADR Low", 0, ad_8, 0, ad_8, STYLE_SOLID, 3, Daily_Low_Color, TRUE, FALSE);
      g_time_564 = Time[0];
   }
}

void MiniDisplay() {
   int day_of_week_8;
   string ls_unused_64;
   string ls_unused_72;
   double ld_84;
   int li_100;
   int li_104;
   int li_108;
   int li_unused_116;
   int count_4 = 0;
   double ld_16 = 0.0;
   string ls_40 = StringSubstr(gs_536, 16);
   string str_concat_48 = StringConcatenate("ADR Pro Calculator", ls_40);
   string ls_unused_56 = "";
   switch (Font_Size) {
   case 6:
      gi_252 = 0;
      break;
   case 7:
      gi_252 = 0;
      break;
   case 8:
      gi_252 = 2;
      break;
   case 9:
      gi_252 = 3;
      break;
   case 10:
      gi_252 = 4;
      break;
   case 11:
      gi_252 = 5;
      break;
   case 12:
      gi_252 = 7;
      break;
   case 13:
      gi_252 = 7;
      break;
   case 14:
      gi_252 = 8;
   }
   gi_252 += Vertical_Spacing_Adjustment;
   int li_0 = 1;
   count_4 = 0;
   int count_12 = 0;
   ld_16 = 0.0;
   for (li_0 = 1; li_0 < 10; li_0++) {
      count_4++;
      if (count_4 > 10) break;
      day_of_week_8 = TimeDayOfWeek(iTime(NULL, PERIOD_D1, li_0));
      if (day_of_week_8 != 0) {
         count_12++;
         ld_84 = iHigh(NULL, PERIOD_D1, li_0) - iLow(NULL, PERIOD_D1, li_0);
         if (count_12 <= Day_x) ld_16 += ld_84;
         if (count_12 >= Day_x) break;
      }
   }
   ld_16 /= Day_x;
   double ld_24 = iOpen(NULL, PERIOD_D1, 0) + ld_16 / 2.0;
   double ld_32 = iOpen(NULL, PERIOD_D1, 0) - ld_16 / 2.0;
   string str_concat_92 = StringConcatenate("ADR: ", Day_x, " days / ", DoubleToStr(ld_16 / gi_556 / Point, 0), " pips | ADR H/L: ", DoubleToStr(ld_24, Digits), " / ",
      DoubleToStr(ld_32, Digits));
   if (gi_568) {
      ObjectDelete("TextPlace_mini1");
      ObjectDelete("TextPlace_mini2");
      count_4 = 0;
      switch (Corner) {
      case 0:
         li_100 = 15;
         li_104 = gi_252 + 27;
         li_108 = 5;
         break;
      case 1:
         li_100 = 15;
         li_104 = gi_252 + 27;
         li_108 = 15;
         break;
      case 2:
         li_100 = gi_252 + 20;
         li_104 = 8;
         li_108 = 5;
         break;
      case 3:
         li_100 = gi_252 + 20;
         li_104 = 8;
         li_108 = 15;
      }
      li_unused_116 = 0;
      myObjCreate("TextPlace_mini1", li_108, li_100, str_concat_48);
      myObjCreate("TextPlace_mini2", li_108, li_104, str_concat_92);
      gi_568 = FALSE;
   }
   ObjectSetText("TextPlace_mini1", str_concat_48, Font_Size, "Tahoma", ADR_Color);
   ObjectSetText("TextPlace_mini2", str_concat_92, Font_Size, "Tahoma", ADR_Color);
   if (gi_552) DoADRHighLowLines(ld_24, ld_32);
}

void ShowWeekLines() {
   int li_8;
   int day_of_week_12;
   int count_16;
   double ld_28;
   double iclose_36;
   double ld_44;
   int li_56;
   int li_60;
   double ld_64;
   double ld_72;
   double ld_80;
   double ld_88;
   double ld_96;
   double ld_104;
   double ld_112;
   double ld_120;
   double ld_128;
   double ld_136;
   int li_unused_0 = 0;
   int li_4 = 0;
   string ls_unused_20 = "";
   if (Time[0] != g_time_576) {
      if (TimeDayOfWeek(iTime(NULL, PERIOD_D1, li_4)) > 5 && TimeDayOfWeek(iTime(NULL, PERIOD_D1, li_4)) < 1) Alert("ADR Template ", Symbol(), "  Waiting for start of week at 5:00 PM Eastern.");
      else {
         li_8 = 0;
         for (li_4 = 1; li_4 <= 12; li_4++) {
            if (li_8 == 0 && TimeDayOfWeek(iTime(NULL, PERIOD_D1, li_4)) == 5) {
               li_8 = li_4;
               break;
            }
         }
         iclose_36 = iClose(NULL, PERIOD_D1, li_8);
         ld_28 = 0.0;
         for (li_8 = li_4; li_8 <= li_4 + 4; li_8++) ld_28 += iHigh(NULL, PERIOD_D1, li_8) - iLow(NULL, PERIOD_D1, li_8);
         ld_28 = MathRound(ld_28 / 5.0 / Point / gi_556);
         g_time_576 = Time[0];
         ld_44 = 0.0;
         li_4 = 1;
         li_8 = 0;
         count_16 = 0;
         for (li_4 = 1; li_4 < 35; li_4++) {
            li_8++;
            if (li_8 > 35) break;
            day_of_week_12 = TimeDayOfWeek(iTime(NULL, PERIOD_D1, li_4));
            if (day_of_week_12 != 0) {
               ld_44 += iHigh(NULL, PERIOD_D1, li_4) - iLow(NULL, PERIOD_D1, li_4);
               count_16++;
               if (count_16 >= 22) break;
            }
         }
         ld_44 = MathRound(ld_44 / 22.0 / Point / gi_556);
         li_56 = (ld_28 + ld_44) / 2.0;
         li_60 = li_56 / 2;
         ld_64 = iclose_36 + li_56 * Point * gi_556;
         CreateHTLine("TextPlace_WklyHigh", "Wk Hi    ", gi_256, ld_64, 0, ld_64, STYLE_SOLID, 2, Green, TRUE, FALSE);
         ld_72 = iclose_36 - li_56 * Point * gi_556;
         CreateHTLine("TextPlace_WklyLow", "Wk Lo    ", gi_256, ld_72, 0, ld_72, STYLE_SOLID, 2, Red, TRUE, FALSE);
         ld_80 = iclose_36 + li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyMidHigh", "Wk Mid Hi", gi_256, ld_80, 0, ld_80, STYLE_SOLID, 2, MediumSeaGreen, TRUE, FALSE);
         ld_88 = iclose_36 - li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyMidLow", "Wk Mid Lo", gi_256, ld_88, 0, ld_88, STYLE_SOLID, 2, MediumVioletRed, TRUE, FALSE);
         ld_96 = ld_64 + li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyExtHigh_1", "Wk Ex Hi 1", gi_256, ld_96, 0, ld_96, STYLE_DASH, 1, Green, TRUE, FALSE);
         ld_104 = ld_96 + li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyExtHigh_2", "Wk Ex Hi 2", gi_256, ld_104, 0, ld_104, STYLE_DASH, 1, Green, TRUE, FALSE);
         ld_112 = ld_104 + li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyExtHigh_3", "Wk Ex Hi 3", gi_256, ld_112, 0, ld_112, STYLE_DASH, 1, Green, TRUE, FALSE);
         ld_120 = ld_72 - li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyExtLow_1", "Wk Ex Lo 1", gi_256, ld_120, 0, ld_120, STYLE_DASH, 1, Red, TRUE, FALSE);
         ld_128 = ld_120 - li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyExtLow_2", "Wk Ex Lo 2", gi_256, ld_128, 0, ld_128, STYLE_DASH, 1, Red, TRUE, FALSE);
         ld_136 = ld_128 - li_60 * Point * gi_556;
         CreateHTLine("TextPlace_WklyExtLow_3", "Wk Ex Lo 3", gi_256, ld_136, 0, ld_136, STYLE_DASH, 1, Red, TRUE, FALSE);
      }
   }
}

void CreateHTLine(string a_name_0, string as_8, int ai_16, double a_price_20, int ai_28, double a_price_32, int a_style_40, int a_width_44, color a_color_48, int a_bool_52, int a_bool_56) {
   int width_76;
   int li_80 = 4;
   int time_60 = Time[ai_16];
   int datetime_64 = Time[ai_28];
   if (as_8 == "ADR High" || as_8 == "ADR Low") datetime_64 = Time[0] + 60 * Period() * (li_80 + 1);
   ObjectDelete(a_name_0);
   ai_28 += 5 * (60 * Period());
   ObjectCreate(a_name_0, OBJ_TREND, 0, time_60, a_price_20, datetime_64, a_price_32);
   ObjectSet(a_name_0, OBJPROP_STYLE, a_style_40);
   if (a_style_40 == STYLE_SOLID) ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_44);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_48);
   ObjectSet(a_name_0, OBJPROP_BACK, a_bool_52);
   ObjectSet(a_name_0, OBJPROP_RAY, a_bool_56);
   string name_84 = a_name_0 + "_Lab";
   switch (gi_260) {
   case 0: return;
   case 1:
      datetime_64 = Time[ai_16];
      break;
   case 2:
      ai_16 /= 2;
      datetime_64 = Time[ai_16];
      break;
   case 3:
      datetime_64 = Time[0] + 6 * (60 * Period());
   }
   if (as_8 == "ADR High" || as_8 == "ADR Low") {
      datetime_64 = Time[0] + 60 * Period() * li_80;
      if (Font_Size < 9) width_76 = 1;
      else width_76 = 2;
      ObjectDelete(name_84);
      ObjectCreate(name_84, OBJ_ARROW, 0, datetime_64, a_price_20);
      ObjectSet(name_84, OBJPROP_COLOR, a_color_48);
      ObjectSet(name_84, OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
      ObjectSet

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

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

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

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

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

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

Стоимость полного кода
1 913,10₽ ≈ $23.38