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

Опубликована статья Построение системы обнаружения дивергенций (Часть IV): Создание переиспользуемого модуля обнаружения дивергенций для MQL5:

В статье логика обнаружения дивергенций, разработанная в этой серии, выносится в подключаемый файл DivergenceEngine.mqh, который можно повторно использовать в индикаторах и советниках на языке MQL5. В статье подробно описаны архитектура на основе структур, выбор осциллятора (MPO4 или RSI), работа с опорными точками и состоянием, а также минимальный API для доступа к данным. Советник на основе Parabolic SAR демонстрирует подключение модуля: коэффициент ускорения индикатора изменяется в зависимости от обнаруженной дивергенции. Этот пример дает понятную схему, которую можно повторно использовать без дублирования кода.
В первых трех частях в Adaptive SuperTrend было реализовано все необходимое для обнаружения дивергенций: расчет значений осциллятора (MPO4 или RSI), обнаружение опорных точек, классификация дивергенций и управление состоянием. В этом состоянии хранятся цена последней опорной точки, последнее значение осциллятора, тип последней дивергенции и количество баров, прошедших с момента ее появления. Каждый компонент добавлялся там, где требовался для расчета SuperTrend, с использованием тех же массивов с индексацией типа "временные ряды", которые используются в индикаторе.

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

Divergence header illustration_Old

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


Автор: Solomon Anietie Sunday