Обсуждение статьи "Автоматизация торговых стратегий в MQL5 (Часть 42): Сессионная система пробоя начального диапазона (ORB)"

 

Опубликована статья Автоматизация торговых стратегий в MQL5 (Часть 42): Сессионная система пробоя начального диапазона (ORB):

В статье мы создадим гибко настраиваемую сессионную систему Opening Range Breakout (ORB) на MQL5. Она позволяет задавать время начала сессии и продолжительность начального диапазона, автоматически рассчитывает его максимум и минимум и открывает сделки только после подтверждённого пробоя в направлении движения.
Стратегия Opening Range Breakout (ORB) — это классическая внутридневная стратегия на импульсном движении, опирающаяся на первоначальный направленный уклон рынка, который формируется в начале торговой сессии. Под «начальным диапазоном» понимаются максимум и минимум первых нескольких минут после открытия рынка — обычно от 5 до 60 минут. Затем мы ждём уверенного выхода цены выше верхней границы диапазона для бычьего пробоя либо ниже нижней границы для медвежьего пробоя и открываем сделку в направлении пробоя. Идея проста, но эффективна: начальный диапазон часто отражает борьбу покупателей и продавцов в момент, когда рынок отыгрывает ночные новости и входящий поток ордеров. Уверенный пробой показывает, что одна из сторон получила контроль, и нередко приводит к устойчивому направленному движению. В целом логика системы довольно проста. Ниже показаны возможные ORB-сетапы.

ORB STRATEGY SETUPS

Мы создадим гибкую сессионную ORB-систему, которая сможет работать с любым инструментом и любой торговой сессией: нью-йоркской, лондонской, азиатской или заданной пользователем. Пользователь сможет указать точное время начала, например 09:30 для NYSE или 08:00 для Лондона, а также продолжительность начального диапазона в минутах. В пределах этого временного окна система автоматически рассчитает реальные максимум и минимум диапазона на выбранном таймфрейме. При необходимости можно включить подтверждение пробоя по закрытию нескольких баров.

Алгоритм будет открывать не более одной позиции в каждом направлении в рамках одной сессии. Для Stop Loss и Take Profit предусмотрены два способа расчёта: динамический, основанный на размере диапазона, и статический — в фиксированных пунктах. Соотношение риска и прибыли можно настраивать. Также доступен трейлинг-стоп по пунктам, который активируется после достижения минимального порога прибыли. Кроме того, инструмент обеспечивает расширенную визуализацию на графике: заполненный прямоугольник диапазона, вертикальные линии начала и окончания сессии, постоянно сохраняемые на графике уровни максимума и минимума, а также стрелки входа.

Как вы уже могли заметить, для наглядности мы уделяем большое внимание визуализации.


Автор: Allan Munene Mutiiria

 
Привет, Аллан, и спасибо за твой постоянный вклад — отлично изложено, спасибо тебе. Мне было бы интересно узнать, есть ли у тебя какие-нибудь решения по автоматизации времени открытия? Обычно я использую изменение времени у брокера, но для меня это не всегда точно, так как я нахожусь в Новой Зеландии, а мой брокер — в Австралии; здесь играют роль такие факторы, как австралийский часовой сдвиг, а также моменты, когда действуют токийский и нью-йоркский часовые сдвиги. У меня возникли проблемы с реализацией этого, буду благодарен за любые предложения. ChatGPT выдает мне скрипт, который проверяет даты перехода на летнее время в каждой стране; интересно, есть ли более элегантное решение?
 
linfo2 времени открытия? Обычно я использую изменение времени у брокера, но для меня это не всегда точно, так как я нахожусь в Новой Зеландии, а мой брокер — в Австралии; здесь играют роль такие факторы, как австралийский часовой сдвиг, а также моменты, когда действуют токийский и нью-йоркский часовые сдвиги. У меня возникли проблемы с реализацией этого, буду благодарен за любые предложения. ChatGPT выдает мне скрипт, который проверяет даты перехода на летнее время в каждой стране; интересно, есть ли более элегантное решение?

Здравствуйте. Спасибо за отзыв. Вы можете определить время в своём коде, используя местное время вместо времени брокера, или задать своё собственное. См. пример.

Местное время:

TimeLocal()

Вы также можете использовать время, соответствующее настройкам вашего компьютера, через торговый сервер:

TimeTradeServer()

Время по Гринвичу (GMT):

TimeGMT()

Кроме того, вы можете задать собственные дату и время, как показано ниже:

datetime my_time = D'2025.11.27 11:07'
MqlDateTime my_struct_time;

Выбор оптимального подхода остается за вами. Спасибо.

 
linfo2 времени открытия? Обычно я использую изменение времени у брокера, но для меня это не всегда точно, так как я нахожусь в Новой Зеландии, а мой брокер — в Австралии; здесь играют роль такие факторы, как австралийский часовой сдвиг, а также моменты, когда добавляются сдвиги по времени в Токио и Нью-Йорке. У меня возникли проблемы с реализацией этого, буду благодарен за любые предложения. ChatGPT выдает мне скрипт, который проверяет даты перехода на летнее время в каждой стране; интересно, есть ли более элегантное решение?

Ваша проблема сформулирована недостаточно чётко. Но вы можете попробовать обширную библиотеку Local Timezones and Local Session Hours или более простую TimeServerDaylightSavings. Без корректировки времени вы не сможете надёжно протестировать свою стратегию на исторических данных, на которые обычно влияют переход на летнее время (DST) и смены часовых поясов. Или, возможно, вам нужна функция Determine Broker's Daylight (DST) schedule для онлайн-определения смены часовых поясов.

К сожалению, встроенный API MQL5 не предоставляет готового и более элегантного решения.

Local Timezones and Local Session Hours
Local Timezones and Local Session Hours
  • 2024.02.28
  • www.mql5.com
Class to access to the local time for the specified location, as well as time zone information and the local trading session hours.