Почему EA на закрытых барах не перерисовывает сигналы
Содержание
Если коротко: сигналы EA, который принимает решения только по закрытым барам, редко меняются потому, что данные для решения к этому моменту перестают двигаться. У формирующегося бара и цена закрытия, и максимум, и минимум могут измениться на следующем тике. А четыре цены закрытого бара после закрытия, как правило, уже не меняются.
Но чтение закрытых баров не гарантирует безопасности. В зависимости от расчёта индикатора и работы со старшими таймфреймами в данные могут попасть значения из будущего, даже если вы уверены, что используете закрытый бар.
Чем опасен формирующийся бар
В MQL5 сдвиг 0 — это формирующийся бар, а сдвиг 1 — последний закрытый. Цена закрытия на сдвиге 0 — это просто «текущая цена». Если использовать её для решений, возникают проблемы:
- Условие на каждом тике то выполняется, то пропадает, и основание для уже открытой сделки потом исчезает
- Сделка открывается по мимолётному сигналу, которого после закрытия бара на графике уже нет
- В тестере результат сильно зависит от способа генерации тиков, а если движение внутри бара отличается от реального, эта разница напрямую отражается на статистике
| Параметр | Формирующийся бар (сдвиг 0) | Закрытый бар (сдвиг 1 и далее) |
|---|---|---|
| Значения для решения | Меняются до закрытия | Обычно не меняются |
| Воспроизводимость сигнала | Низкая | Высокая |
| Скорость входа | Быстрее | Медленнее на время ожидания закрытия |
| Влияние режима тиков в тестере | Может измениться само решение | Влияние на решение невелико (на выход остаётся) |
Это не значит, что использовать формирующийся бар всегда ошибка. Есть стратегии, которые должны мгновенно ловить пробой. Но тогда нужно признать, что система зависит от движения внутри бара, и особенно тщательно проверять её на реальных тиках.
Сравнение рекомендованных брокеров →
🎁 Скачать бесплатный EA📧 Бесплатный email-курс (8 писем) + пакет из 13 индикаторов MT5 только для подписчиков
Сразу после подписки вы получите ссылку на пакет только для подписчиков с нашими 13 индикаторами MT5: скомпилированные файлы (.ex5), исходный код и руководство по установке. Затем 8 писем об основах алгоритмической торговли, правильном чтении бэктестов и выборе брокера (первые 5 дней по одному в день, затем через 7, 14 и 30 дней после подписки). Также вы получите уведомление перед каждым повышением цены версий, продаваемых на MQL5 Market (стартовая цена, которая повышается ступенями по мере продаж). На этом сайте наши советники бесплатны при наличии реального счёта у брокера-партнёра.
* Конфиденциальность строго защищена. Отписаться можно в любое время.
Как зафиксировать сигнал
В CopyRates явно задавайте стартовую позицию и порядок
Закрытый бар читается один раз — на первом тике нового бара.
datetime g_lastBar = 0;
void OnTick()
{
datetime t = iTime(_Symbol, _Period, 0);
if(t == 0 || t == g_lastBar) return;
MqlRates r[];
ArraySetAsSeries(r, true);
if(CopyRates(_Symbol, _Period, 1, 2, r) != 2) return;
g_lastBar = t;
// r[0] — последний закрытый бар, r[1] — бар перед ним
}
Три ключевых момента. Стартовая позиция 1 исключает формирующийся бар из диапазона. ArraySetAsSeries задаёт порядок элементов. А если получить данные не удалось, g_lastBar не обновляется, и попытка повторяется на следующем тике. Если забыть указать порядок, первым элементом массива окажется самый старый бар.
iBarShift — ловушка на старших таймфреймах
При работе со старшим таймфреймом iBarShift возвращает «бар, содержащий указанное время». Если передать текущее время, обычно вернётся формирующийся бар старшего таймфрейма.
int s = iBarShift(_Symbol, PERIOD_H1, TimeCurrent(), false);
if(s < 0) return;
double closedH1 = iClose(_Symbol, PERIOD_H1, s + 1);
Если нужен закрытый бар старшего таймфрейма, указывайте бар на один старше, как здесь.
Типичный репейнт возникает в индикаторах, которые рисуют значения старшего таймфрейма на младшем графике. Если каждому прошлому бару младшего таймфрейма присвоить цену закрытия старшего бара, содержащего то же время, в прошлом нарисуется итоговое значение, которого в тот момент ещё не существовало. На графике сигналы выглядят точными, но в реальном времени так решить нельзя.
Если передать в четвёртый параметр exact значение false, при отсутствии нужного бара вернётся ближайший. Из-за этого пропуски в данных труднее заметить, поэтому безопаснее дополнительно проверять время полученного бара. Данные других символов и таймфреймов могут обновляться с задержкой, так что перед принятием решения сверяйте, что это именно тот бар, который вы ожидали.
Защита от повторного срабатывания после перезапуска
Переменная g_lastBar в коде выше сбрасывается к начальному значению при перезапуске EA. Чтобы не получить повторный вход по тому же закрытому бару, в архитектуре стоит проверять также открытые позиции и время последней сделки.
Как проверить самостоятельно
Даже без доступа к исходному коду кое-что можно проверить:
- Визуальный режим: запустите тестер в визуальном режиме и посмотрите, совпадает ли время входов с началом баров. Если сделки часто открываются в середине бара, возможно, используется формирующийся бар (выходы не в счёт).
- Сравнение режимов моделирования: на одном периоде и с теми же настройками прогоните «только цены открытия», «все тики» и «все тики на основе реальных тиков». Если количество и время входов сильно расходятся, подозревайте зависимость от движения внутри бара.
- Фиксация стрелок индикатора: сохраните время появления стрелки, например скриншотом, и сравните через несколько баров. Если стрелка сместилась или исчезла, индикатор перерисовывается.
- Вопрос к разработчику: спросите, использует ли он закрытые бары и как работает со старшими таймфреймами.
Всё это косвенные признаки, и по ним одним нельзя доказать «отсутствие репейнта». Если хотите потренироваться на индикаторах, начните с бесплатных индикаторов, а по установке EA смотрите руководство по настройке EA.
Ограничения и предостережения
У решений по закрытым барам есть и неудобные стороны.
- Вход запаздывает: пока вы ждёте закрытия, цена уходит, и вход может оказаться по невыгодной цене. При резких скачках и падениях эта разница может быть большой.
- Издержки начала бара: если ордера концентрируются на первом тике нового бара, на них влияют широкие спреды и гэпы при открытии.
- От индикаторов, смотрящих в будущее, это не защищает: у таких индикаторов, как ZigZag, форма меняется задним числом, а для некоторых значений нужны последующие бары, поэтому в зависимости от читаемой позиции значения меняются даже на закрытых барах.
- Закрытые бары тоже различаются у брокеров: при другом серверном времени или другой ленте котировок четыре цены отличаются, поэтому один и тот же EA у другого брокера может принимать другие решения. Нельзя исключать и того, что история позже будет скорректирована.
- Выход происходит внутри бара: даже если решение о входе принято по закрытому бару, стоп-лосс и тейк-профит срабатывают посреди бара. Эта часть по-прежнему зависит от качества тиков.
И самое важное: отсутствие репейнта и прибыльность — разные вещи. Среди наших EA есть такие, у которых тесты на исторических данных хороши, а форвард-тест на демо-счёте уходит в минус. Использование закрытых баров — лишь одно из условий, при которых результатам тестов можно доверять, и оно ничего не говорит о будущих результатах. К тому же у каждого EA своя архитектура, поэтому при выборе проверяйте каждого отдельно и оценивайте его вместе с цифрами рейтинга по реальным измерениям. Подход к связанным проверкам мы собрали в разделе знания по EA и MT5.
Итоги
- Значения формирующегося бара меняются до закрытия, поэтому сигналы могут пропадать или меняться
- Решения по закрытым барам фиксируют исходные данные и меньше зависят от способа генерации тиков
- В
CopyRatesявно указывайте стартовую позицию и порядок, а при ошибке получения данных повторяйте попытку iBarShiftлегко возвращает формирующийся бар старшего таймфрейма, поэтому для чтения закрытого бара сдвигайте индекс- Отрисовка старшего таймфрейма и индикаторы, смотрящие в будущее, — типичные примеры репейнта
- У закрытых баров есть проблемы запаздывания и издержек, и они не обещают прибыли
По теме
2026-10-29
MQL5: OnTick и OnTimer — как выбрать при разработке EA
2026-10-19
Результаты EA не воспроизводятся: 5 мест для проверки
2026-10-12
Dark Algo MT5: PF 2.08, макс. DD 35.05% в равных условиях
2026-10-12
Daytrade Pro Algo MT5: PF 2.51, макс. DD 1.25%
📧 Бесплатный email-курс (8 писем) + пакет из 13 индикаторов MT5 только для подписчиков
Сразу после подписки вы получите ссылку на пакет только для подписчиков с нашими 13 индикаторами MT5: скомпилированные файлы (.ex5), исходный код и руководство по установке. Затем 8 писем об основах алгоритмической торговли, правильном чтении бэктестов и выборе брокера (первые 5 дней по одному в день, затем через 7, 14 и 30 дней после подписки). Также вы получите уведомление перед каждым повышением цены версий, продаваемых на MQL5 Market (стартовая цена, которая повышается ступенями по мере продаж). На этом сайте наши советники бесплатны при наличии реального счёта у брокера-партнёра.
* Конфиденциальность строго защищена. Отписаться можно в любое время.
Есть вопрос о советниках или Forex?
Задайте его на трейдерском форуме Nattzy (бесплатная регистрация). Можно спрашивать не только по этой статье — о настройке советников, выборе брокера и многом другом.
Спросить на Nattzy ↗