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