Обсуждение статьи "Модульная архитектура индикаторов в MQL5 (Часть 1): Хватит копировать и вставлять — начните писать масштабируемый, переиспользуемый код."

 

Опубликована статья Модульная архитектура индикаторов в MQL5 (Часть 1): Хватит копировать и вставлять — начните писать масштабируемый, переиспользуемый код.:

В статье разработан объектно-ориентированный каркас для индикаторов MQL5 путем преобразования примитивного примера в пригодные для постоянного использования модули. В ней формализуется частичный пересчет буфера в OnCalculate, логика переносится в классы, вынесенные в заголовочные файлы (CAppliedPrice, CSma), а также вводятся CSubIndiBase, CIndicatorBase и реестр для централизации требований. В результате получаются переносимые компоненты, изолированные входные параметры и аккуратно организованные буферы при минимуме шаблонного кода, что ускоряет сборку новых индикаторов и упрощает их обслуживание.

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

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


Автор: Vladislav Boyko

 

Привет, Владислав! Твоя работа абсолютно четкая с концептуальной точки зрения — настоящий шедевр программной инженерии.

У меня к тебе вопрос: сможешь ли ты расширить этот проект, добавив поддержку MTF и многосимвольного режима?

С уважением, Сабино

 
Sabino Martiradonna проект, добавив поддержку MTF и многосимвольного режима?

С уважением, Сабино

Привет, Сабино, спасибо за отзыв! Давным-давно я пытался разработать индикаторы с поддержкой нескольких таймфреймов, но у меня возникли сложности с подготовкой синхронизированных массивов временных рядов для всех необходимых графиков. Я не захотел продолжать и отложил работу над поддержкой нескольких таймфреймов на потом. До сих пор к этому не вернулся.

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

 

Если количество баров на графике строго равно периоду SMA (что бывает крайне редко), это может привести к ошибке «array out of range». Я запушил небольшой коммит, исправляющий эту проблему:

fix: ensure recurrence seed is calculated when recalculation touches drawBegin

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

fix: ensure recurrence seed is calculated when recalculation touches drawBegin · b589d8d09a
fix: ensure recurrence seed is calculated when recalculation touches drawBegin · b589d8d09a
  • modular-indicator-architecture
  • forge.mql5.io
Using "rates_total - prev_calculated > 1" was insufficient for detecting when the seed value at drawBegin needed to be computed by summation. When calculating with minimal history (prev_calculated == barsRequired), recalcStartIdx equals drawBegin. Because the difference is <= 1, summation was s...