source code by @fundedmillionairess.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.