Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

Обнаружение начала нового бара или свечи - эксперт для MetaTrader 5

Просмотров:
896
Рейтинг:
(14)
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Для эксперта (EA), когда MetaTrader получает новую котировку ("тик"), терминал вызывает стандартную функцию обработки событий OnTick(). Однако стандартной функции обработки событий, связанных с началом нового бара (свечи), не существует.

Чтобы определить это, необходимо следить за временем открытия последнего бара. Когда оно изменится, это будет означать начало нового бара, и вы сможете отреагировать на ситуацию и обработать событие. Следующий пример кода, совместимый как с MQL4, так и с MQL5, демонстрирует один из способов, как этого можно добиться:

// Стандартный обработчик событий тика
   void OnTick()
   {
      // Проверьте наличие нового бара (совместимо с MQL4 и MQL5).
         static datetime dtBarraCorrente   = WRONG_VALUE;
                datetime dtBarraPrecedente = dtBarraCorrente;
                         dtBarraCorrente   = iTime( _Symbol, _Period, 0 );
                bool     bEventoBarraNova  = ( dtBarraCorrente != dtBarraPrecedente );

      // Реагируйте на событие появления нового бара и справляйтесь с ситуацией.
         if( bEventoBarraNova )
         {
            // Определите, является ли это первым полученным тиком, и справьтесь с ситуацией.
               /* Например, когда он впервые применяется к графику и
 бар находится где-то в середине своего продвижения и
 не является началом нового бара. */
               if( dtBarraPrecedente == WRONG_VALUE )
               {
                  // Сделайте что-нибудь на первом тике или в середине бара ...
               }
               else
               {
                  // Сделайте что-нибудь, когда появится обычный бар ...
               };

            // Сделайте что-нибудь, не зависящее от предыдущего условия ...
         }
         else
         {
            // Сделайте что-нибудь еще ...
         };

      // Делайте другие вещи ...
   };

В предыдущем коде статическая переменная отслеживает время открытия бара даже при возврате из функции OnTick(). В отличие от обычной локальной переменной, она запоминает содержимое своих данных и не освобождает их при выходе из функции. Это ключ к обнаружению изменения времени открытия текущего бара.

Также важно отметить, что при первом размещении советника на графике предыдущий код реагирует так, как будто бар только что открылся. Это условие требует особого подхода, если ситуация должна быть обработана по-другому.

Обратите внимание, что исходный код всех моих публикаций в CodeBase теперь также доступен через "Публичные проекты" MetaEditor под именем "FMIC".

Перевод с португальского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/pt/code/41601

Spreads Spreads

Индикатор спреда двух символов

Population-based optimization algorithms Population-based optimization algorithms

Здесь собраны популяционные алгоритмы оптимизации. В архиве все необходимые файлы для запуска алгоритмов на тестовых функциях.

Пан Призма № рычаг 72 Пан Призма № рычаг 72

Постройте движущуюся линию с полиномом 4 степени. Экстраполирует синусоиду и ее ось. Построенные линии удаляют одно значение на каждом отрезке, и строится скользящая линия экстраполированных значений, которая не перерисовывается.

Базовая библиотека для создания профилей томов Базовая библиотека для создания профилей томов

Базовая библиотека для создания профилей объемов на графике.