English
preview
От новичка до эксперта: Сигналы с высокой вероятностью

От новичка до эксперта: Сигналы с высокой вероятностью

MetaTrader 5Примеры |
178 0
Clemence Benjamin
Clemence Benjamin

Содержание



Введение и обзор концепции

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

Да, мы поставили работающий индикатор. Однако, с точки зрения алгоритмической торговли, это решение остается неполным. Индикатор, несмотря на то, что является формой автоматизации, по—прежнему переносит большую часть рабочей нагрузки на трейдера. Решения должны соблюдаться, интерпретироваться и выполняться вручную. Полная автоматизация не была достигнута, и это ограничение имеет значение.

В данной статье мы сделаем следующий решающий шаг вперед.

Зоны сами по себе чрезвычайно ценны, но они отражают только контекст сделки, а не само торговое решение. Чтобы продвинуться к созданию полноценной алгоритмической системы, мы должны дополнить эти зоны логикой принятия решений - интеллектом, который понимает, когда и как действовать внутри них.

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

  1. Отсутствие точных данных для идентификации сигналов в пределах определенных зон
  2. Отсутствует механизм уведомлений или оповещений
  3. Отсутствует автоматическое или полуавтоматическое исполнение сделок

На этом этапе разработки мы непосредственно устраняем первые два ограничения. Автоматическая торговля будет намеренно отложена на будущее, когда фундамент, который мы создаем сегодня, можно будет безопасно расширить. Давайте теперь определим концептуальную основу, прежде чем переводить ее в MQL5-код.

Понимание сигналов входа с более высокой вероятностью

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

Для небольших счетов точность не подлежит обсуждению. Входы должны быть обоснованы, отфильтрованы и подтверждены. Крупные участники рынка могут мириться с неточностями из-за недостатка капитала, но розничные трейдеры не могут позволить себе длительные просадки, вызванные несвоевременными входами. Именно здесь логика подтверждения становится необходимой.

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

Многие читатели, вероятно, уже знакомы с классическими свечными формациями. Ранее в этой серии мы разработали специальную библиотеку свечных паттернов, и теперь эта работа становится непосредственно применимой. Наблюдая за поведением цены внутри зон и анализируя повторяющиеся характеристики свечей, которые там формируются, мы устанавливаем повторяемую программируемую логику входа.

Почему автоматизация и уведомления так важны

Ручной мониторинг графиков на предмет свечных образований внутри зон является одновременно трудоемким и ненадежным процессом. Даже опытные трейдеры пропускают допустимые настройки из-за усталости, рассеянности или простой недоступности. Именно поэтому автоматизация — это не роскошь, а необходимость.

В этом обновлении мы автоматизировали процесс отслеживания характерных свечных паттернов внутри зон вероятности. Даже если предпочтительно ручное исполнение, система должна быть достаточно полной, чтобы уведомлять трейдера в режиме реального времени. Оповещения преобразуют рабочий процесс: вместо того чтобы постоянно следить за графиками, трейдер реагирует только тогда, когда на рынке появляется действительная возможность — во многом это похоже на реакцию на телефонное уведомление.

Такая гибкость значительно повышает эффективность при одновременном сокращении числа пропущенных сделок.

Торговля со знанием структуры

Хотя эти зоны классифицируются как зоны с более высокой вероятностью, они не застрахованы от сбоев. Уровни поддержки и сопротивления могут быть сведены на нет структурными пробоями, а игнорирование рыночного контекста приводит к ненужным убыткам. Следовательно, при выборе сделки необходимо учитывать доминирующее направление рынка, предшествующее структуре.

Если после сильного бычьего импульса формируется консолидация, мы отдаем приоритет долгосрочным возможностям. И наоборот, после сильного медвежьего движения мы предпочитаем короткие позиции. Смещение по направлению не является необязательным — это фильтр, который защищает капитал.

На этом этапе теоретическая основа сегодняшнего прогресса завершена. В следующем разделе мы представим наглядные иллюстрации свечных триггерных паттернов, наблюдаемых в пределах этих зон. Затем мы переходим к реализации на MQL5, где эти концепции преобразуются в работающий интеллектуальный код.

Ручное определение паттернов внутри зон

Рис. 1: Ручное определение паттернов внутри зон

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

Что отчетливо видно в приведенном примере, так это формирование сильных и убедительных установок на разворот. Мы наблюдаем бычью модель поглощения, за которой следуют пин-бары, формирующиеся в зоне поддержки. Вскоре после этих образований цена достигла этой зоны и начала бычье движение к ранее выявленной зоне сопротивления. При достижении этой области мы также наблюдаем признаки сопротивления в ценовом движении, что еще раз подтверждает как логику определения зон, так и актуальность подтверждений свечами.

На этом этапе оставшийся пробел становится очевидным: теперь на нас лежит ответственность за то, чтобы превратить алгоритм из пассивного аналитического инструмента в интеллектуальную систему, которая активно информирует нас, когда зона начинает выдавать высококачественные сигналы от свечей. Зоны уже определяют, на что нам следует обратить внимание; следующая задача - определить, когда появится реальная возможность для действий.

Чтобы подтвердить то, что мы наблюдаем на рис. 1 выше, давайте расширим определения двух задействованных свечных паттернов, чтобы была совершенно понятна их значимость.

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

Пин-бар, напротив, является сигналом отвержения одной свечи. Он характеризуется небольшим реальным телом, в котором открытие и закрытие расположены очень близко друг к другу, и длинной тенью, выступающей в одном направлении. В случае бычьего пин-бара нижняя тень значительно длиннее тела свечи, в то время как закрытие происходит вблизи верхней границы диапазона свечи. Это образование указывает на то, что цена агрессивно снижалась в течение периода, но была сильно отвержена, что вынудило свечу закрыться вблизи уровня открытия или выше. Небольшое тело отражает временную нерешительность, в то время как увеличенная тень отражает неудачную попытку пробиться к снижению цен, что в конечном итоге решает проблему в пользу покупателей. Эти определения имеют решающее значение, поскольку они основаны исключительно на измеримых ценовых компонентах: открытии, закрытии, максимуме, минимуме и размере тела. Это делает их идеальными кандидатами для алгоритмического обнаружения.

Эти точные структурные характеристики, несомненно, являются тем, что мы наблюдаем на представленном изображении. Паттерны появляются не случайным образом; они возникают в пределах заранее определенной зоны поддержки, подтверждая идею о том, что зоны создают контекст, а свечные образования определяют тайминг. Вместе они формируют целостный фреймворк принятия решений, а не изолированные сигналы.

Это взаимодействие между зонами вероятности и структурно определенными свечными подтверждениями формирует концептуальную основу интеллектуальной системы подтверждения, которую мы сейчас планируем закодировать в MQL5.

В следующем разделе мы преобразуем эти визуальные и структурные наблюдения в четкие программируемые правила и продемонстрируем, как алгоритм обнаруживает такие образования и реагирует на них в режиме реального времени.


Реализация

На данном этапе все концептуальные компоновочные блоки уже готовы. Остается только соединить их в единое, работающее решение. Нашей целью является уже не теоретическая проверка, а практическая реализация.

Благодаря нашей предыдущей работе мы уже обладаем тремя важнейшими компонентами профессиональной торговой системы. Во-первых, контекст зоны, предоставляемый SRProbabilityZones.mq5, определяет, где ценовое движение заслуживает внимания, определяя области поддержки и сопротивления с высокой вероятностью. Во-вторых, анализ паттернов, также включенный в infinity_candlestick_pattern.mqh из нашей более ранней статьи, определяет, что считается значимым рыночным сигналом, с помощью хорошо структурированной логики распознавания свечей. Наконец, мы введем уровень уведомлений, определяющий, когда трейдер получает информацию о появлении действительной возможности.

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

На уровне реализации логика намеренно проста и недвусмысленна:

  1. Если цена торгуется внутри заранее определенной зоны поддержки или сопротивления.
  2. И если в пределах этой зоны будет обнаружен действительный свечной паттерн.
  3. Затем система немедленно уведомляет трейдера, используя встроенные механизмы MQL5, такие как оповещения, push-уведомления, электронные письма или звуковые события.

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

1. Заголовок файла и идентификатор проекта

Мы начинаем с определения идентификатора советника. На этом этапе устанавливается авторство, управление версиями и официальная ссылка на MQL5 Market. Четко указывая права собственности и метаданные в верхней части файла, мы гарантируем, что проект можно будет отслеживать, он будет доступен для публикации и прост в обслуживании по мере его развития. Это стандартная, но необходимая практика для разработки на профессиональном уровне на MQL5.

//+---------------------------------------------------------------------------------+
//|                                                 Pattern Zone Notification EA.mq5|
//|                                                               Clemence Benjamin |
//|https://www.mql5.com/go?link=https://www.mql5.com/ru/users/billionaire2024/seller|
//+---------------------------------------------------------------------------------+

#property copyright "Clemence Benjamin"
#property link      "https://www.mql5.com/go?link=https://www.mql5.com/ru/users/billionaire2024/seller"
#property version   "1.00"

2. Интеграция уровня интеллектуального анализа свечных паттернов

На данном этапе мы интегрируем в советник движок интеллектуального анализа свечей. Вместо того чтобы встраивать логику обнаружения паттернов непосредственно в основной файл, мы полагаемся на внешнюю библиотеку паттернов. Такой подход позволяет системе быть модульной и масштабируемой. Все определения свечей, измерения и правила проверки остаются изолированными в отдельном включаемом файле, что позволяет нам обновлять или расширять логику паттернов без изменения основной структуры советника.

#include <infinity_Candlestick_Pattern.mqh>

3. Пользовательские настройки параметров оповещений и поведения

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

input bool   EnableEmailNotifications = true;
input bool   EnablePushNotifications  = true;
input bool   EnableAlertSounds        = true;
input bool   EnableOnScreenAlerts     = true;
input string AlertSoundFile           = "alert.wav";
input bool   CheckOnNewBar            = true;
input int    MaxAlertsPerDay          = 10;
input bool   DrawPatternArrows        = true;
input color  BullishArrowColor        = clrGreen;
input color  BearishArrowColor        = clrRed;

4. Параметры конфигурации зоны и настройка контекста

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

input int    Zone_LookBackPeriod   = 150;
input int    Zone_SwingSensitivity = 5;
input int    Zone_ZonePadding      = 20;
input color  Zone_SupportColor     = clrRoyalBlue;
input color  Zone_ResistanceColor  = clrCrimson;
input bool   Zone_ShowZoneLabels   = true;

5. Глобальное управление состоянием и буферы данных

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

datetime lastBarTime = 0;
int alertsToday = 0;
datetime lastAlertDate = 0;

MqlRates rates[];
double highs[], lows[], opens[], closes[];
double atrValues[];

int atrHandle = INVALID_HANDLE;
int zoneIndicatorHandle = INVALID_HANDLE;

6. Отображение буфера индикатора зоны

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

#define ZONE_SUPPORT_HIGH_BUFFER 0
#define ZONE_SUPPORT_LOW_BUFFER  1
#define ZONE_RESISTANCE_HIGH_BUFFER 2
#define ZONE_RESISTANCE_LOW_BUFFER  3

7. Реестр имен паттернов

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

string patternNames[24];
void InitializePatternNames()
{
    patternNames[0]  = "Morning Star";
    patternNames[1]  = "Evening Star";
    patternNames[2]  = "Three White Soldiers";
    ...
    patternNames[23] = "Spinning Top";
}

8. Последовательность инициализации советника

На этапе инициализации подготавливаем все основные компоненты. Загружаем индикатор ATR для оценки паттерна с учетом волатильности, пытаемся подключиться к индикатору зоны, инициализируем все массивы как временные ряды и устанавливаем привязку к последнему бару. Если экранные оповещения включены, на этом этапе мы также создаем панель уведомлений. Это гарантирует, что советник запустится в синхронизированном и полностью работоспособном состоянии.

int OnInit()
{
    InitializePatternNames();

    atrHandle = iATR(_Symbol, _Period, 14);
    if(atrHandle == INVALID_HANDLE)
        return(INIT_FAILED);

    zoneIndicatorHandle = iCustom(_Symbol, _Period, "SRProbabilityZones",
                                  Zone_LookBackPeriod,
                                  Zone_SwingSensitivity,
                                  Zone_ZonePadding,
                                  Zone_SupportColor,
                                  Zone_ResistanceColor,
                                  Zone_ShowZoneLabels);

    ArraySetAsSeries(rates, true);
    ArraySetAsSeries(opens, true);
    ArraySetAsSeries(highs, true);
    ArraySetAsSeries(lows, true);
    ArraySetAsSeries(closes, true);
    ArraySetAsSeries(atrValues, true);

    lastBarTime = iTime(_Symbol, _Period, 0);
    lastAlertDate = TimeCurrent();

    if(EnableOnScreenAlerts)
        CreateNotificationPanel();

    Print("Pattern Zone Notification EA initialized successfully");
    return(INIT_SUCCEEDED);
}

9. Надежная стратегия сбора данных зон

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

bool GetZoneData(double &supportHigh, double &supportLow,
                 double &resistanceHigh, double &resistanceLow)
{
    ...
}

10. Контроль за обработкой тиков и их исполнением

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

void OnTick()
{
    if(CheckOnNewBar)
    {
        datetime currentBarTime = iTime(_Symbol, _Period, 0);
        if(currentBarTime == lastBarTime)
            return;
        lastBarTime = currentBarTime;
    }

    CheckDailyReset();

    if(alertsToday >= MaxAlertsPerDay)
        return;

    ...
    CheckPatternsAtBar(0, supportHigh, supportLow, resistanceHigh, resistanceLow);
}

11. Логика оценки паттерна с учетом зоны

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

void CheckPatternsAtBar(int index, double supHigh, double supLow,
                        double resHigh, double resLow)
{
    double currentPrice = closes[index];
    datetime patternTime = rates[index].time;

    bool inSupportZone = (currentPrice >= supLow && currentPrice <= supHigh);
    bool inResistanceZone = (currentPrice >= resLow && currentPrice <= resHigh);

    if(inSupportZone)
        CheckBullishPatterns(index, patternTime, currentPrice, "Support Zone");

    if(inResistanceZone)
        CheckBearishPatterns(index, patternTime, currentPrice, "Resistance Zone");
}

12. Подтверждение паттерна, оповещения и визуальная обратная связь

Когда в пределах соответствующей зоны обнаруживается действительный паттерн, советник уведомляет трейдера по всем включенным каналам. Оповещения могут доставляться с помощью всплывающих окон терминала, звуковых сигналов, электронных писем, push-уведомлений и экранных сообщений. Кроме того, советник может рисовать стрелки и метки непосредственно на графике, обеспечивая немедленное визуальное подтверждение того, где и почему возник сигнал.

void SendAlert(string message, datetime time, double price,
               string zone, bool isBullish)
{
    Alert(message);
    if(EnableOnScreenAlerts)
        ShowOnScreenNotification(message, isBullish);

    if(EnableAlertSounds)
        PlaySound(AlertSoundFile);

    if(EnableEmailNotifications)
        SendMail("Pattern Alert", message);

    if(EnablePushNotifications)
        SendNotification(message);

    alertsToday++;
    lastAlertDate = TimeCurrent();
}

Благодаря этой реализации мы выходим за рамки пассивной визуализации зон и внедряем интеллектуальный механизм подтверждения, зависящий от контекста. Зоны поддержки и сопротивления определяют, где требуется внимание, свечные паттерны определяют, когда появляется возможность, а советник объединяет их в структурированную автоматизированную систему поддержки принятия решений. Эта архитектура закладывает прочную основу для дальнейшей эволюции в направлении полностью автоматизированной торговли на последующих этапах. Полный исходный код приведен в конце данной статьи. Кроме того, мы включили ссылки на ресурсы и предшествующую работу, на которых основана эта реализация, чтобы читателям было легче понять варианты проектирования и расширить или адаптировать решение. В следующем разделе я поделюсь своими результатами тестера стратегий.



Тестирование

После того как советник был успешно скомпилирован в MetaEditor, мы приступили к оценке его работы с помощью тестера стратегий. Этот этап позволил нам смоделировать исторические рыночные условия, понаблюдать за тем, как советник реагирует на движение цены в пределах зон ПОДДЕРЖКИ и СОПРОТИВЛЕНИЯ, а также убедиться, что механизмы обнаружения паттернов и оповещения функционируют должным образом. Собирая подробные логи во время тестов, мы можем анализировать точность сигналов, тайминг и согласованность оповещений, обеспечивая ценную информацию для дальнейшей доработки и оптимизации.  Приведенные ниже анимированные снимки экрана и лог-данные иллюстрируют работу советника в действии, подчеркивая его поведение и оповещения на протяжении всего процесса тестирования.

Testing higher probability signals

Рис. 2: Тестирование

2025.12.15 14:08:31.087   program file added: \Indicators\SRProbabilityZones.ex5. 13720 bytes loaded
2025.12.15 14:08:31.089   2024.01.01 00:00:00   SRProbabilityZones indicator handle created successfully
2025.12.15 14:08:31.128   2024.01.01 00:00:00   Pattern Zone Notification EA initialized successfully

2025.12.15 14:08:38.093   2024.01.02 00:18:30   Alert: GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.02 00:10 Price: 1.27216
2025.12.15 14:08:38.093   GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.02 00:10 Price: 1.27216

2025.12.15 14:08:38.096   2024.01.02 00:20:30   Alert: GBPUSD - Hammer detected in Support Zone at 2024.01.02 00:15 Price: 1.27236
2025.12.15 14:08:38.096   GBPUSD - Hammer detected in Support Zone at 2024.01.02 00:15 Price: 1.27236

2025.12.15 14:08:38.128   2024.01.02 00:30:00   Alert: GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.02 00:25 Price: 1.27253
2025.12.15 14:08:38.128   GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.02 00:25 Price: 1.27253

2025.12.15 14:08:38.291   2024.01.02 00:45:30   Alert: GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.02 00:40 Price: 1.27289
2025.12.15 14:08:38.291   GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.02 00:40 Price: 1.27289

2025.12.15 14:08:38.291   2024.01.02 00:45:30   Alert: GBPUSD - Tweezer Bottom detected in Support Zone at 2024.01.02 00:35 Price: 1.27254
2025.12.15 14:08:38.291   GBPUSD - Tweezer Bottom detected in Support Zone at 2024.01.02 00:35 Price: 1.27254

2025.12.15 14:10:36.075   2024.01.02 01:35:00   Alert: GBPUSD - Tweezer Bottom detected in Support Zone at 2024.01.02 01:25 Price: 1.27303
2025.12.15 14:10:36.075   GBPUSD - Tweezer Bottom detected in Support Zone at 2024.01.02 01:25 Price: 1.27303

2025.12.15 14:12:07.303   2024.01.03 00:25:00   Alert: GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.03 00:20 Price: 1.26149
2025.12.15 14:12:07.303   GBPUSD - Bullish Marubozu detected in Support Zone at 2024.01.03 00:20 Price: 1.26149

2025.12.15 14:12:07.444   2024.01.03 01:40:00   Alert: GBPUSD - Bearish Harami detected in Resistance Zone at 2024.01.03 01:30 Price: 1.26210
2025.12.15 14:12:07.444   GBPUSD - Bearish Harami detected in Resistance Zone at 2024.01.03 01:30 Price: 1.26210

2025.12.15 14:12:08.088   2024.01.03 03:05:00   Alert: GBPUSD - Shooting Star detected in Resistance Zone at 2024.01.03 03:00 Price: 1.26294
2025.12.15 14:12:08.089   GBPUSD - Shooting Star detected in Resistance Zone at 2024.01.03 03:00 Price: 1.26294

Лог показывает, что как индикатор SRProbabilityZones, так и советник Pattern Zone Notification успешно инициализировались без ошибок, подтверждая корректность настройки системы. Советник точно распознает свечные паттерны, различая бычьи паттерны в зонах поддержки и медвежьи паттерны в зонах сопротивления. Оповещения регистрируются с точными временными метками и ценами, что указывает на то, что советник правильно отражает рыночные условия и точно отображает исторические данные для воспроизведения или тестирования.

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


Заключение

Сегодня мы сделали значительный шаг вперед, разработав советник, распознающий торговые сигналы с более высокой вероятностью в определенных зонах ПОДДЕРЖКИ и СОПРОТИВЛЕНИЯ. Модульная конструкция советника стала возможной благодаря интеграции нашей предыдущей работы в проект — гибкость, которую обеспечивает платформа MQL5. Используя уже подготовленную библиотеку свечных паттернов, мы смогли упростить процесс разработки и эффективно сосредоточиться на конечном решении. Важно отметить, что, как было замечено в ходе тестирования, сигналы генерировались исключительно в пределах этих зон, что способствовало систематической торговле и снижению неопределенности для трейдеров.

Мы еще больше усовершенствовали советник, внедрив комплексную систему уведомлений, которая оповещает нас о появлении сигнала, обеспечивая своевременную осведомленность о ключевых рыночных возможностях. Чтобы закрепить полученный учебный опыт, я подготовил краткое изложение ключевых уроков для всех, а полные исходные коды прилагаются ниже. Приглашаю вас поэкспериментировать, выполнять модификации и обсудить эти идеи в комментариях. До нашей следующей публикации следите за обновлениями, чтобы получить больше полезной информации и практических реализаций.


Основные уроки

Основные уроки Описание
1. Глобальные переменные для межкомпонентного взаимодействия. Использовать GlobalVariableSet()/GlobalVariableGet() для обмена данными между индикаторами и советниками, обеспечивая модульную конструкцию, при которой компоненты работают независимо, но обмениваются данными.
2. Надлежащее сравнение времени в MQL5. Для сравнения дат вместо TimeDay()/TimeMonth() использует TimeToStruct(). Метод struct более надежен и позволяет избежать проблем с неинициализированными переменными datetime.
3. Конфликты именования переменных. При включении библиотек убедитесь, что имена ваших переменных не конфликтуют с именами библиотечных параметров. Переименовывает локальные переменные (patternATR → atrValues), чтобы избежать предупреждений о "скрытии глобальной переменной".
4. Ограничения тестера стратегий. Тестер стратегий MT5 может одновременно запускать только один советник. Для систем, требующих использования нескольких компонентов, либо объединит их в один советник, либо протестирует на живых графиках.
5. Возможность резервного копирования из нескольких источников данных. Реализовать резервные механизмы: сначала проверить глобальные переменные, затем индикаторные буферы, затем выполнить внутренние вычисления. Это делает ваш советник надежным в различных средах.
6. Комплексная инициализация. Всегда инициализировать все глобальные переменные в OnInit() допустимыми значениями. Не полагайтесь на инициализацию глобальной области видимости для переменных datetime, которым требуется функция TimeCurrent().
7. Модульное функциональное проектирование. Разделить задачи на отдельные функции (CheckDailyReset(), GetZoneData(), CheckPatternsAtBar()). Это улучшает читаемость, тестирование и техническое обслуживание.
8. Многоканальные системы оповещения. Реализовать несколько методов оповещения (оповещение терминала, электронная почта, push-уведомление, звук, оповещение на экране), чтобы трейдеры не пропустили важные сигналы.
9. Управление ресурсами. Всегда освобождать дескрипторы индикаторов (IndicatorRelease()) и удалять объекты графика в OnDeinit(). Предотвращать утечки из памяти и очищать визуальные элементы графика.
10. Параметры конфигурации пользователя. Указывать входные параметры для ключевых настроек (ограничения оповещений, переключение уведомлений, визуальные настройки). Это позволяет пользователям выполнять настройку без изменения кода.
11. Обработка ошибок с плавной деградацией. При сбое компонентов (индикатор не найден, данные недоступны) ошибки регистрируются в логе, но работа продолжается с уменьшенной функциональностью, а не завершается сбоем.
12. Визуальная обратная связь для пользователей. Обеспечивать отображение на экране панелей состояния системы, счетчиков и временных оповещений. Визуальная обратная связь помогает пользователям понять, что делает система в режиме реального времени.

Вложения

Название исходного файла Версия Описание
PatternZoneNotificationEA.mq5 1.00 Советник, распознающий свечные паттерны в пределах зон поддержки и сопротивления, отправляющий оповещения через терминал, электронную почту, push-уведомления и отображающий уведомления на графике с помощью дополнительных стрелок.
SRProbabiblityZones.mq5 1.00 Индикатор, вычисляющий динамические зоны поддержки и сопротивления с использованием точек поворота и заполнения зон; используется советником для оповещения о паттернах.
Infinity_Candlestick_Pattern.mqh 1.00 Библиотека, содержащая функции для обнаружения нескольких свечных паттернов, включая одно- и многосвечовые образования, используемые советником для распознавания паттернов.


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/20658

Прикрепленные файлы |
Как получить синхронизированные массивы для использования в алгоритмах портфельной торговли Как получить синхронизированные массивы для использования в алгоритмах портфельной торговли
Описан практический подход к синхронизации баров между инструментами портфеля в MQL5. Предложены классы для загрузки, хранения и выравнивания OHLCV с опциями: пустой бар или перенос значений предыдущего бара, выбор символа синхронизации и обработка асинхронных новых баров. Показаны примеры использования в индикаторах мультиграфиков и корзины. Читатель получает готовый API для стабильных портфельных расчетов.
Нейросети в трейдинге: Масштабируемые трансформеры со структурной декомпозицией признаков (FAT) Нейросети в трейдинге: Масштабируемые трансформеры со структурной декомпозицией признаков (FAT)
Статья объясняет, как структурная декомпозиция признаков в Field-Aware Transformer улучшает моделирование взаимодействий между полями рыночных данных и сохраняет вычислительную управляемость. Детально разобраны структурированная токенизация, поле‑зависимые проекции внимания и разреженный Top‑K механизм выбора параметров на общем базисе. Приведена реализация на MQL5, включающая эмбеддинги полей и генератор параметров. Практическая польза — снижение переобучения и контролируемый рост сложности при расширении признаков.
От новичка до эксперта: Подтверждение зон спроса и предложения через статистические данные От новичка до эксперта: Подтверждение зон спроса и предложения через статистические данные
Сегодня мы раскрываем часто упускаемую из виду статистическую основу, стоящую за торговыми стратегиями, основанными на спросе и предложении. Используя комбинацию MQL5 и Python в рамках рабочего процесса Jupyter Notebook, мы проводим структурированное, основанное на данных исследование, направленное на преобразование визуальных рыночных предположений в измеримые результаты. В данной статье описан весь исследовательский процесс, включая сбор данных, статистический анализ на основе Python, разработку алгоритма, тестирование и окончательные выводы. Для подробного ознакомления с методологией и результатами исследования, прочтите полную статью.
От новичка до эксперта: Ориентирование в непредсказуемой стихии рынка От новичка до эксперта: Ориентирование в непредсказуемой стихии рынка
Рыночные правила постоянно развиваются, а многие некогда надежные принципы постепенно теряют свою эффективность. То, что работало в прошлом, с течением времени больше не работает стабильно. Сегодняшнее обсуждение сосредоточено на диапазонах вероятностей и на том, как их можно использовать для навигации по рыночным нерегулярностям. Мы будем использовать MQL5 для разработки алгоритма, способного эффективно торговать даже в самых нестабильных рыночных условиях. Присоединяйтесь к этой дискуссии, чтобы узнать больше.