Day bar info: индикатор дневного диапазона для MT4 и MT5
К обеду пара нередко уже прошла своё обычное дневное расстояние. Знать об этом до входа — разница между тем, чтобы поймать движение, и тем, чтобы поймать его конец.
Дневной диапазон — максимум минус минимум за сегодня — грубое число, отвечающее на острый вопрос: сколько осталось? В сравнении с тем, что пара проходит обычно, оно говорит, есть ли у пробоя запас хода или он идёт на парах.
Читаем дневной бар с любого таймфрейма
Переключать графики не нужно. Функции iHigh, iLow и iOpen принимают таймфрейм аргументом, поэтому пятиминутка спокойно читает дневной бар напрямую.
double dHigh = iHigh(Symbol(), PERIOD_D1, 0); // 0 = сегодня, ещё формируется
double dLow = iLow (Symbol(), PERIOD_D1, 0);
double dOpen = iOpen(Symbol(), PERIOD_D1, 0);
double rangePts = (dHigh - dLow) / Point;
Индекс 0 — это текущий незакрытый день, поэтому значения меняются у вас на глазах. Здесь так и надо: нужен живой диапазон. А вот для среднего берите только закрытые дни, начиная с индекса 1, иначе недоделанный сегодняшний бар тянет среднее вниз.
Среднее, и почему ADR здесь лучше ATR
Average True Range учитывает гэпы. Но на вопрос «сколько пара обычно проходит внутри дня» прямее отвечает простое среднее максимум-минус-минимум, которое часто называют ADR.
double AverageDailyRange(int days)
{
double sum = 0;
for(int i = 1; i <= days; i++) // с единицы: только закрытые дни
sum += (iHigh(Symbol(), PERIOD_D1, i) - iLow(Symbol(), PERIOD_D1, i)) / Point;
return(sum / days);
}
Двадцать дней — привычное окно: примерно торговый месяц, достаточно длинный, чтобы сгладить единичные события, и достаточно короткий, чтобы не усреднить настоящую смену режима.
Главное число: сколько диапазона осталось
На график стоит выводить именно израсходованный диапазон в процентах от среднего.
double adr = AverageDailyRange(20);
double used = (iHigh(Symbol(), PERIOD_D1, 0) - iLow(Symbol(), PERIOD_D1, 0)) / Point;
double pctUsed = (adr > 0) ? used / adr * 100.0 : 0;
string label = StringFormat("O %s | диапазон %.0f п. | %.0f%% от ADR",
DoubleToString(iOpen(Symbol(), PERIOD_D1, 0), Digits),
used, pctUsed);
- Меньше 50% — у дня есть запас. Пробоям есть куда идти.
- 80–100% — обычное расстояние израсходовано. Входить в продолжение здесь значит ставить на день выше среднего.
- Выше 130% — что-то произошло. Новости, сюрприз в политике или событие с ликвидностью. Нормальные ожидания больше не действуют.
Где показатель вводит в заблуждение
Исчерпание диапазона — не сигнал разворота. Трендовые дни регулярно доходят до 160% ADR и продолжают идти; в этом и состоит тренд. Статистика говорит, что день необычный, но не говорит, чем он закончится.
Она ещё и несимметрична по времени. Восемьдесят процентов ADR, израсходованные к открытию Лондона, и те же восемьдесят к закрытию Нью-Йорка — совершенно разные вещи: в первом случае день толком не начинался.
Дневной диапазон — это указатель уровня топлива, а не руль. Он говорит, как далеко вы можете уехать, и никогда — в какую сторону.
Практическое применение
- Цели. Проекция остатка ADR от текущей цены даёт реалистичную цель вместо мечтательной.
- Расстояние до стопа. Стоп уже десятой доли ADR снимут шумом, что бы ни говорила фигура на графике.
- Фильтр сессии. Если азиатская сессия уже съела 70% ADR, у лондонского пробоя, которого вы ждёте, запас хода сильно меньше обычного.