Обсуждение статьи "Трейдинг с экономическим календарём MQL5 (Часть 11): Модульная новостная панель на Canvas"

Опубликована статья Трейдинг с экономическим календарём MQL5 (Часть 11): Модульная новостная панель на Canvas:

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

В части 10 вся программа находилась в одном файле. Все аспекты — построение пользовательского интерфейса, фильтрация событий, управление прокруткой, определение наведения курсора, перетаскивание панели и торговая логика — были реализованы в одном месте. В информационной панели использовались объекты графика MetaTrader 5. Каждая строка события требовала отдельного создания и размещения нескольких объектов-меток; при перетаскивании панели при каждом движении мыши приходилось перемещать каждый объект, а полоса прокрутки состояла из трёх объектов, управляемых независимо друг от друга. Цвета были жёстко заданы, а размер макета был фиксированным.

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

Программа состоит из четырёх специализированных модулей. Модуль ядра содержит все общие данные — палитру темы, структуры событий, состояние прокрутки и константы макета. Логический модуль отвечает за все операции с данными — загрузку событий, применение фильтров, построение плана строк и управление поиском кандидатов для сделок. Модуль рендеринга отвечает за всю отрисовку — он считывает данные из слоя данных и рисует на Canvas, не изменяя состояние. Модуль взаимодействия отвечает за весь пользовательский ввод — преобразует движения мыши, щелчки, перетаскивания и события колёсика в изменения состояния и запускает перерисовку. Сторожевой макрос, определённый в основной точке входа, предотвращает дублирование объявлений при совместной компиляции всех четырёх модулей. Вкратце, вот чего мы намерены достичь.

ЦЕЛИ АРХИТЕКТУРЫ


Автор: Allan Munene Mutiiria