Создание системы торговой аналитики (Часть 4): Сводные метрики и дашборд
В этой статье мы расширяем существующий бэкенд Flask, чтобы рассчитывать аналитические показатели эффективности на основе сохраненных закрытых сделок MetaTrader 5 и предоставлять их как в формате JSON, так и в виде простого веб-представления. Система рассчитывает общее количество сделок, общую прибыль, долю прибыльных сделок, среднюю прибыль и метрики продолжительности сделок, возвращает JSON по адресу /api/v1/analytics/summary и отображает дашборд по адресу /api/v1. В результате появляется быстрый и единообразный способ анализировать эффективность торговли на основе сохраненных записей SQLite.
RiskGate: Централизованное управление рисками для нескольких советников
Во многих конфигурациях MetaTrader 5 на одном счете работают несколько советников, поэтому управление рисками оказывается разрозненным, а экспозиция по коррелирующим инструментам остается незамеченной. В статье представлен RiskGate — централизованный сервис, который оценивает торговые намерения советников на уровне всего счета: советники отправляют сигнал в формате JSON, а сервис возвращает поля approved, lot и reason. Вы увидите схему взаимодействия клиента и сервера, примеры правил (лимит дневного убытка, лимиты экспозиции и корреляции), архитектуру обработчика, проверенную модульными тестами, и пример советника. В результате обеспечивается согласованное управление рисками на уровне портфеля, а сами советники становятся проще.
Нейросети в трейдинге: Habi — быстрое принятие решений без сложного планирования (вероятностное представление)
Рассматриваем реализацию вероятностных компонентов Habi на MQL5 и OpenCL: обработку рыночных наблюдений, преобразование параметров нормального распределения и пакетное семплирование латентных векторов. На примере CNeuronHabiObservationOCL, CNeuronHabiGaussianOCL и CNeuronHabiVAEOCL разбираем архитектуру, инициализацию, прямой и обратный проходы. Показываем согласование Prior и Posterior через условную KL-дивергенцию и накопление градиентов от нескольких выборок. Полученные компоненты создают основу для последующей генерации торговых действий.
Разработка объектно-ориентированного сканера разрывов справедливой стоимости (FVG) на MQL5
В статье показано, как создать объектно-ориентированный сканер разрывов справедливой стоимости (FVG) на языке MQL5 и отображать разрывы ликвидности непосредственно на графике MetaTrader 5. Рассматриваются формализация геометрии дисбаланса на основе трех свечей, синхронизация массивов OHLC с помощью CopyRates, управление объектами-прямоугольниками без утечек и отслеживание митигации (отработки зоны) в реальном времени. Также показано, как интегрировать этот класс в советник со строгой проверкой появления нового бара для стабильной и эффективной работы.
Создание системы торговой аналитики (Часть 3): Сохранение данных о сделках MetaTrader 5 в SQLite
В этой статье мы расширим бэкенд на Flask, чтобы надежно принимать, проверять и сохранять данные о закрытых сделках из MetaTrader 5 с помощью SQLite и Flask-SQLAlchemy. В нем реализованы проверка обязательных полей, преобразование временных меток, сохранение данных в транзакциях с откатом при ошибке и работающие эндпоинты получения всех сделок, отдельных записей и базовой сводки. В результате получается полноценный пайплайн данных с локальным тестированием: он сохраняет записи о сделках и предоставляет доступ к ним через структурированный API для дальнейшего анализа.
Создание объектно-ориентированного механизма статистического арбитража на основе Z-показателя в MQL5
В статье показано, как реализовать готовый к практическому применению модуль расчёта Z-показателя на языке MQL5 с использованием объектно-ориентированного подключаемого файла. Библиотека вычисляет скользящее среднее и стандартное отклонение генеральной совокупности, предоставляет параметр сдвига для запросов по историческим данным и позволяет избежать избыточных вычислений на тиках, выполняя расчёты при закрытии бара. Советник открывает позиции в соответствии с установленными правилами при достижении положительных/отрицательных пороговых значений сигмы и закрывает их при возврате к среднему значению; пользовательский индикатор обеспечивает визуальную проверку.
От новичка до эксперта: Создание индикатора-оверлея CRT для нескольких таймфреймов в MQL5
Диапазоны CRT на старших таймфреймах информативны, однако трейдеры часто совершают сделки на младших таймфреймах без учета этого контекста. Мы реализуем индикатор на языке MQL5, который считывает данные OHLC старшего таймфрейма, накладывает полный диапазон свечи, ее тело и тени на активный график младшего таймфрейма и отмечает уровни входа, стоп-лосса и цели. Это позволяет лучше ориентироваться в ситуации и избавляет от необходимости переключаться между окнами.
Создание системы торговой аналитики (Часть 2): Как фиксировать закрытые сделки и передавать данные в формате JSON с помощью MQL5
Мы создаем легковесный мост, который фиксирует закрытые сделки в MetaTrader 5 и отправляет данные о них во внешний бэкенд по HTTP в формате JSON. Он использует OnTradeTransaction для обнаружения событий, считывает сведения из истории сделок, формирует данные в формате JSON и отправляет их POST-запросом через WebRequest. Для проверки обмена данными используется локальный API Flask. Так мы получаем работающий механизм передачи торговых данных за пределы терминала.
От новичка до эксперта: Автоматизация распознавания геометрических паттернов внутри базовых свечей зон ликвидности в MQL5
В статье описывается реализация модуля на MQL5, который анализирует бары младшего таймфрейма внутри каждой базовой свечи зоны ликвидности. Он обнаруживает свинговые точки и по объективным правилам классифицирует внутреннюю структуру: восходящий, нисходящий или симметричный треугольник, прямоугольник, M, W либо неопределенная структура. Индикатор отображает на графике метки геометрических фигур и добавляет название паттерна в алерты, сокращая необходимость ручной проверки на младшем таймфрейме.
Нейросети в трейдинге: Habi — быстрое принятие решений без сложного планирования
Адаптируем фреймворк Habi для алгоритмической торговли на финансовых рынках. Его основной принцип — перенос опыта сложного планирования в генеративную политику для быстрого принятия решений. Модель учитывает рыночные данные и состояние счёта, формирует варианты управления торговой позицией, а Critic оценивает их потенциальные результаты. Для обучения используются эталонные действия Oracul. Рассматриваем архитектуру торговой адаптации и реализацию OpenCL-кернелов пакетного семплирования и обратного распространения градиентов.
Как выявлять ликвидность на круглых ценовых уровнях в MQL5
В статье представлен метод обнаружения психологических круглых уровней на языке MQL5: цены преобразуются в строки, после чего подсчитываются конечные нули (ZeroSize). В ней излагается теория институциональной ликвидности на целочисленных уровнях, объясняется логика GetZeroCount с нормализацией по размеру тика для предотвращения ошибок вычислений с плавающей точкой и подробно описывается иерархическая визуализация. Примеры для рынка Forex, металлов и криптовалют, а также фильтры по таймфреймам и входные параметры показывают, как на практике использовать совпадение факторов и базовые механизмы управления рисками.
Создание системы торговой аналитики (Часть 1): Основы и архитектура системы
Мы проектируем простой внешний пайплайн аналитики торговых операций для MetaTrader 5 и реализуем его бэкенд на Python с использованием Flask и SQLite. В статье определяются архитектура, модель данных и API с поддержкой версий, а также показано, как настроить среду, инициализировать базу данных и локально запустить сервер. В результате вы получаете понятную основу для сбора записей о закрытых торговых операциях из MetaTrader 5 и их хранения для последующего анализа.
Алгоритм оптимизации, вдохновлённый охотой лисы — Fox-inspired Optimization Algorithm (FOX)
Разбираем FOX (Fox-inspired Optimization Algorithm): реализуем алгоритм в MQL5, детально проверяем ветви "прыжка" и "блуждания" и показываем, как притяжение к нулю и фиксированный масштаб шага мешают поиску в торговых диапазонах. Пошагово измеряем вклад каждого механизма на тестовом стенде и объясняем расхождения формул и кода. В конце — готовый к использованию класс C_AO_FOX и исправленная версия с шагом в долях диапазона.
Торговые инструменты MQL5 (Часть 33): Создание системы документации с расширенным форматированием для программ на языке MQL5
Мы расширяем возможности мастера настройки из части 9, чтобы создать для MetaTrader 5 систему документации, встроенную в график и использующую холст для отрисовки. Панель имеет вкладки и поддерживает прокрутку, форматирование фрагментов текста, изображения и интерактивные элементы управления; для её отрисовки используется сглаживание методом суперсэмплинга. В результате получился движок документации для многократного использования, который можно встроить в любую программу на языке MQL5 для отображения автономной документации прямо на графике.
От новичка до эксперта: Адаптивное управление рисками в стратегиях на основе ликвидности
В этой статье мы рассмотрим практические и надежные методы управления рисками, специально адаптированные для торговли на основе ликвидности. Вы научитесь защищать позиции во время ретестов, уверенно работать с ложными пробоями и распознавать признаки возможных манипуляций вблизи уровней. К концу статьи вы создадите адаптивный советник со встроенным контролем риска, способный управлять переворотами зон и исполнять стратегически обоснованные отложенные ордера.
От новичка до эксперта: Расширение стратегии на основе ликвидности с помощью трендовых фильтров
В статье стратегия на основе ликвидности дополняется простым трендовым фильтром: торговать от зон ликвидности только в направлении тренда, определяемого EMA(50). В ней объясняются правила фильтрации, представлен пригодный для повторного использования класс TrendFilter.mqh и показана его интеграция в советник на языке MQL5, а также сравниваются результаты тестирования исходной стратегии и стратегии с фильтром. Читатели получают четкий ориентир по направлению торговли, возможность сократить избыточную торговлю в контртрендовых фазах и готовые к использованию файлы исходного кода.
Нейросети в трейдинге: Диффузионная генерация торговых планов (Окончание)
Завершаем адаптацию DPCC к задачам финансовых рынков. На основе ранее разработанной торговой модели AC-SRM объединяем диффузионного Актёра, прогноз ценовых сценариев и двух распределительных Критиков. Рассматриваем подготовку рыночного представления, обучение на исторических планах и последующие TD-обновления торговой политики. Представляем результаты тестирования на EURUSD H1 за январь–май 2026 года. Несмотря на положительный финансовый результат, существенная просадка и ограниченный объём испытаний не позволяют делать выводы об устойчивости модели.
Логика кэрри-трейда в MQL5: Создание советника, учитывающего ставки свопа при расчете размера позиции и принятии решений об удержании
Большинство розничных трейдеров не обращают внимания на ставки свопа за перенос через ночь, однако для долгосрочных позиций эти процентные начисления могут как обеспечить успех стратегии, так и привести к ее провалу. В статье рассказывается, как создать динамический модуль MQL5, который получает данные о свопах в режиме реального времени и преобразует их в фактическую прибыль или убыток в валюте вашего счета. Вы узнаете, как запрограммировать советник, который автоматически рассчитывает, стоит ли удерживать сделку с учетом кэрри-дохода, и корректирует размер позиции с учетом ожидаемых процентов. Это практическое руководство по превращению скрытых издержек в математическое преимущество для ваших торговых систем.
Построение системы обнаружения дивергенций (Часть IV): Создание переиспользуемого модуля обнаружения дивергенций для MQL5
В статье логика обнаружения дивергенций, разработанная в этой серии, выносится в подключаемый файл DivergenceEngine.mqh, который можно повторно использовать в индикаторах и советниках на языке MQL5. В статье подробно описаны архитектура на основе структур, выбор осциллятора (MPO4 или RSI), работа с опорными точками и состоянием, а также минимальный API для доступа к данным. Советник на основе Parabolic SAR демонстрирует подключение модуля: коэффициент ускорения индикатора изменяется в зависимости от обнаруженной дивергенции. Этот пример дает понятную схему, которую можно повторно использовать без дублирования кода.
Интеграция ИИ в три концепции Smart Money (SMC): Ордер-блок (OB), слом структуры (BOS) и гэп справедливой стоимости (FVG)
В этом руководстве описано, как интегрировать обученную модель XGBoost (ONNX) в SMC-советник для оценки торговых сетапов перед их исполнением. Пайплайн на Python размечает исторические события по инструменту XAUUSD и формирует представление из 12 признаков, согласованное с советником. В результате получается воспроизводимый метод обучения, экспорта и встраивания модели, позволяющий советнику программно фильтровать сигналы ордер-блоков (OB), гэпов справедливой стоимости (FVG) и слома структуры (BOS).
Автоматизация торговых стратегий в MQL5 (Часть 53): Разворотные модели "двойная вершина" и "двойное дно"
Создадим программу на языке MQL5, которая по подтвержденным свинговым опорным точкам выявляет паттерны "двойная вершина" и "двойное дно" и торгует по ним на основе четких правил. Детектор сопоставляет экстремумы с учетом допуска, определяет линию шеи и применяет фильтры баланса отрезков и расстояния между экстремумами, чтобы отсеять слабо выраженные паттерны. Программа поддерживает вход при пробое линии шеи или (опционально) при откате к ней. Стоп-лосс размещается за экстремумом, а цели рассчитываются по проекции высоты паттерна или по соотношению вознаграждения и риска.
Алгоритм опыления цветов — Flower Pollination Algorithm (FPA)
Рассматривается реализация Flower Pollination Algorithm (FPA) в MQL5 с разбором операторов глобального и локального опыления и влияния ключевых параметров популяции и шага Леви, который при авторских настройках ищет почти наугад: находим причину и поднимаем результат с 26% до 49%. Трейдер получает готовый класс FPA с рабочими настройками для оптимизации советников и понимание, для каких задач он подходит.
Автоматизация графических паттернов в MQL5 (Часть 2): Паттерны "двойная вершина" и "двойное дно"
Мы создадим надежный алгоритм обнаружения паттернов "двойная вершина" и "двойное дно" на языке MQL5. Сначала он подтвердит тренд на H4, а затем проверит шесть условий (равенство точек, положение линии шеи, порядок следования, ширину, высоту и допуски на основе среднего истинного диапазона, ATR). Пробой линии шеи определяется на таймфрейме графика, а машина состояний с тремя состояниями гарантирует, что по каждому паттерну сделка совершается только один раз. Проекция высоты паттерна позволяет определить четкий целевой уровень выхода.
Автоматизация графических паттернов в MQL5 (Часть 1): Мультитаймфреймовый движок для анализа свинговой структуры
В этой статье представлен CSwingEngine — переиспользуемый класс на языке MQL5, который обнаруживает свинговые максимумы и минимумы на H4, присваивает им метки HH, LH, HL или LL и классифицирует рыночную структуру как трендовую или боковую. Свинги всегда определяются на H4 независимо от графика, на котором запущена программа, а каждая точка корректно отображается на младших таймфреймах благодаря штатной привязке к временным координатам типа datetime. Движок предоставляет понятный интерфейс для получения текущего состояния тренда и массива свингов, необходимых для распознавания паттернов с учетом рыночного контекста.
Нейросети в трейдинге: Диффузионная генерация торговых планов (Планировщик)
Продолжаем торговую адаптацию DPCC на MQL5/OpenCL: рассматриваем кадровый денойзер CNeuronPlanDenoiserOCL и отдельно — действующий цикл планировщика CNeuronDPCCOCL. Показываем подготовку контекста, предсказание шума, обратную диффузию и возврат исправленных действий в генерацию. Разбираем режимы P0/P1/P2, проверку финансовых ограничений по ценовым сценариям и выбор первого действия по спектральной оценке денежных результатов G. Материал помогает проследить движение планов и условия допуска кандидатов к выбору.
Фильтрация новостей с помощью экономического календаря MetaTrader 5 и резервного варианта на основе CSV
В статье представлен автономный модуль фильтрации новостей для MetaTrader 5, созданный на основе API экономического календаря платформы. Модуль реализует сопоставление торговых символов с валютами, торговые паузы перед событиями и после них, а также необязательное сокращение объёма позиции в дни с событиями высокой значимости, с резервным вариантом на основе CSV для Тестера стратегий. Демонстрационный советник и панель мониторинга на графике в реальном времени показывают интеграцию и проверку как в реальной торговой среде, так и в условиях бэктеста.
Автоматизация торговых стратегий в MQL5 (Часть 52): Модель tCISD с SSMT и Quarterly Theory
Мы разрабатываем на языке MQL5 программу tCISD, которая сочетает циклы Quarterly Theory, привязанные к нью-йоркскому времени, с SSMT-дивергенцией между торгуемым и коррелирующим символами, чтобы точнее выбирать момент разворота. В статье показано, как разметить циклы и четверти, выявить расхождение между символами по снятию ликвидности и определить уровень tCISD, пробой которого подтверждает смену характера доставки цены. Вы получите рабочую логику входа, которая активирует сетап при появлении дивергенции и открывает позицию после подтверждающего закрытия бара или при ретесте.
Построение системы обнаружения дивергенций (Часть III): Советник Adaptive SuperTrend
В статье реализован автономный советник Adaptive SuperTrend, который выполняет внутренние расчеты на выбранном таймфрейме без использования внешних буферов и файлов индикаторов. В нем предусмотрены расчет размера позиции в лотах на основе риска, стоп-лоссы на основе ATR, пошаговый трейлинг по соотношению прибыли и риска (RR), дополнительное подтверждение для защиты от перерисовки, которое можно включить, и управление торговлей по сессиям. На практике эту структуру можно использовать повторно для единообразной обработки сигналов при появлении нового бара и проверки ордеров на соответствие требованиям брокера.
Автоматизация торговых стратегий в MQL5 (Часть 51): Модель Bread and Butter Judas Swing с зонами премии и дисконта
Мы создаем на языке MQL5 программу для торговли на разворотах в рамках торговых сессий по модели Bread and Butter Judas Swing. Программа определяет дневную направленность по данным старшего таймфрейма, задает килл-зоны по нью-йоркскому времени и определяет зоны премии и дисконта каждой сессии по ее текущему диапазону. Обязательное условие — снятие ликвидности, после которого смена рыночной структуры подтверждает вход. Читатели получат готовый подход с четкими, проверяемыми правилами: активировать сетапы только во время активных сессий и открывать позиции в соответствии с дневной направленностью.
Трейдинг с экономическим календарем MQL5 (часть 12): Хранение данных в SQLite и предотвращение повторных сделок
В этой статье мы заменяем встроенный CSV-снимок слоем SQLite, который сохраняет события календаря и идентификаторы сработавших сделок между перезапусками. База данных хранится в общей папке терминала и используется как графиками в реальном времени, так и тестером стратегий, поэтому оба режима читают одни и те же данные без перекомпиляции. Загрузчик по запросу с индикатором выполнения на холсте получает историю из API календаря и сохраняет ее для повторного использования в автономном режиме.
Построение системы обнаружения дивергенций (Часть II): Пользовательский индикатор Adaptive SuperTrend
В статье мы усовершенствуем индикатор SuperTrend, добавив модуль обнаружения дивергенций (MPO4 или RSI), который динамически уменьшает множитель ATR при ослаблении моментума. В ней рассматриваются формула сжатия, перенос состояния без перерисовки с использованием отдельных буферов, а также пошаговая реализация индикатора на языке MQL5 с отображением на ценовом графике. Вы узнаете, как интерпретировать стрелки и переключения линии, настраивать входные параметры и применять индикатор для трейлинга по правилам и более раннего подтверждения сигналов.
Трейдинг с экономическим календарем MQL5 (Часть 11): Модульная новостная панель на Canvas
Мы перестраиваем информационную панель Экономического календаря MQL5: вместо монолитной панели, основанной на объектах, она становится модульной системой на Canvas, разделённой на четыре файла. В обновлении добавлены две темы оформления — светлая и тёмная, сворачиваемые группы дней, макет с изменяемым размером и прокруткой с пиксельной точностью, маркеры пересмотренных значений, а также обратный отсчёт в реальном времени со всплывающими уведомлениями. Кэш событий-кандидатов и таймер с ускоренной веткой, который перерисовывает только изменившиеся ячейки, повышают отзывчивость и упрощают расширение кодовой базы.
Нейросети в трейдинге: Диффузионная генерация торговых планов (Сценарный расчёт)
Продолжаем торговую адаптацию DPCC и объединяем ранее разработанные OpenCL-кернелы в два класса MQL5: CNeuronScenarioRolloutOCL для сценарного расчёта торговых планов и CNeuronPlanProjectionOCL для их коррекции с учётом ограничений. Разбираем организацию данных, взаимодействие классов, поиск поправок и повторную проверку финансовых последствий. Показываем, как использовать эти механизмы в собственных моделях и различать допустимый план, исчерпание бюджета поиска и ошибку вычислений.
Индикатор средней цены входа маркет-мейкера
В статье исследуется, можно ли по обычным данным MetaTrader 5 оценить среднюю стоимость позиции пассивной стороны рынка, если реальные сделки и позиции маркет-мейкеров недоступны. Пошагово строится модель: от оценки направленного потока и виртуальной позиции до Inventory Basis, Reservation Price по Avellaneda–Stoikov и адаптивных Bid/Ask с учётом токсичности потока.
Инжиниринг признаков для машинного обучения (Часть 4): Реализация временных признаков в MQL5
Применение границ сессий из Python к временным меткам брокера в MQL5 приводит на любом брокере с часовым поясом, отличным от UTC, к ошибочной классификации принадлежности к сессиям на два–три часа и искажает флаги сессий по всей истории бэктеста. Мы реализуем файл CTimeFeatures.mqh, содержащий классы CRingBuffer и CTimeFeatures, с тремя методами, доступными для советников: Initialize (фиксация смещения относительно UTC и настройка частотного фильтра), Update (добавление логарифмической доходности в кольцевые буферы для соответствующих торговых сессий) и Calculate (циклическое кодирование, флаги торговых сессий и волатильность сессий). Результат — плоский массив типа double, совместимый по формату с Python-функцией get_time_features для таймфреймов меньше часа, часовых и дневных таймфреймов.
Альтернатива временным барам (Часть 3): Индикатор в подокне для отображения альтернативных баров в MQL5
AlternativeBarsViewer — индикатор в подокне, отрисовывающий все десять типов альтернативных баров как свечи с цветовой маркировкой. Он использует ту же иерархию CBarConstructor, что и BarBuilderEA, обеспечивая идентичность баров. Он поддерживает три источника данных (реальные тики, синтетические тики на основе OHLC или CSV-файл советника) и два режима отображения (TIME и INDEX), между которыми можно переключаться во время работы. Вырожденные бары выделяются, а сводная информация о них выводится на компактной панели, что позволяет выполнять калибровку в реальном времени, не выходя из терминала.
Альтернатива временным барам (Часть 2): Построение баров серий в MQL5
Мы реализуем тиковые, объемные и долларовые бары серий в Python и MQL5 и встраиваем их в существующий фреймворк построения баров. В статье подробно описаны обновление двух накопителей, офлайн-калибровка с начальными значениями для каждого направления, сохранение состояния в советниках и проверка совпадения результатов Python и MQL5. Бары серий (runs bar) выявляют односторонние всплески активности, которые может скрывать метрика чистого дисбаланса, улучшая тем самым охват данных в спокойные сессии и для моделей возврата к среднему.
Альтернатива временным барам (Часть 1): Построение баров активности и дисбаланса в Python и MQL5
В данной статье сэмплирование по времени заменяется альтернативными типами баров Лопеса де Прадо. Представлены две согласованные реализации: унифицированный модуль Python для пакетной обработки истории тиков и объектно-ориентированная библиотека MQL5 для советников, работающих в реальном времени. В статье рассматриваются инфраструктура Parquet/Dask, очистка данных и единый API. Отдельно решаются практические задачи: фильтрация временных баров с нулевым тиковым объемом, инициализация порога дисбаланса, сохранение состояния экспоненциально взвешенного среднего (EWM) и обеспечение совпадения результатов Python и MQL5.
Перекрестный рекуррентный количественный анализ (CRQA) в MQL5: Разработка полноценной библиотеки анализа
В этой статье библиотека RQA для MQL5 расширяется до перекрестного рекуррентного количественного анализа (Cross Recurrence Quantification Analysis, CRQA) для сравнения двух временных рядов. Мы реализуем вложение двух рядов, построение матрицы перекрёстной рекуррентности, адаптированные метрики (CRR, CDET, CLAM, CENTR и другие), а также анализ в скользящем окне с возможностью ускорения на графическом процессоре (GPU) через OpenCL. Готовый к использованию индикатор сравнивает два торговых инструмента (символа) в режиме реального времени, поддерживая выравнивание по временным меткам и нормализацию для практического межрыночного анализа.
Нейросети в трейдинге: Диффузионная генерация торговых планов (Вычислительная основа)
Продолжаем торговую адаптацию фреймворка DPCC и рассматриваем семь OpenCL-кернелов для коррекции торгового плана. На основе диагностики нарушений определяем порядок изменения действий, формируем варианты поправок и повторно проверяем их последствия на заданных ценовых сценариях. Разбираем сравнение предложений, выбор улучшения и контроль бюджета проверок. Итоговые статусы и диагностика позволяют отличить успешную коррекцию от завершения поиска с оставшимися нарушениями.