145 lines
No EOL
5.7 KiB
Markdown
145 lines
No EOL
5.7 KiB
Markdown
Article-22597-MQL5-Economic-Calendar-Modular-Canvas-Dashboard
|
|
|
|
This repository is an article-derived reference project based on the original MQL5 article. It does not claim to reproduce the full original source code unless files are explicitly attached.
|
|
|
|
## Overview
|
|
|
|
Reference repository for MQL5 article 22597 describing a refactor of an economic news dashboard from a monolithic chart-object implementation into a modular canvas-based system.
|
|
|
|
The article presents a four-module architecture:
|
|
|
|
- core data/state module
|
|
- logic module
|
|
- rendering module
|
|
- interaction module
|
|
|
|
It also discusses a dual-theme UI, runtime resizing, pixel-based scrolling, collapsible day groups, unit-aware calendar value formatting, live remain/countdown updates, and toast notifications.
|
|
|
|
## Original Article
|
|
|
|
- **Article ID:** 22597
|
|
- **Title:** MQL5 Economic Calendar Dashboard, Part 11
|
|
- **Author:** Allan Munene Mutiiria
|
|
- **Publication date:** 2026.05.26
|
|
- **Category:** Trading / GUI
|
|
- **URL:** https://www.mql5.com/en/articles/22597
|
|
|
|
## Repository Purpose
|
|
|
|
This repository is intended as a technical reference/reconstruction project for the article’s architecture and code organization.
|
|
|
|
Its purpose is to preserve and organize the article-described implementation details for:
|
|
|
|
- modular MQL5 EA design
|
|
- canvas-based dashboard rendering
|
|
- economic calendar event visualization
|
|
- interaction handling without chart objects
|
|
- pre-news trading workflow integration
|
|
|
|
## Key Concepts
|
|
|
|
- Canvas-based dashboard rendering with `CCanvas`
|
|
- Separation of concerns across `.mqh` modules
|
|
- Runtime-resizable layout with width/height bounds
|
|
- Pixel-based scrolling with draggable scrollbar thumb
|
|
- Proportional table column scaling
|
|
- Unit-aware formatting for calendar values
|
|
- Relative time formatting for upcoming/released events
|
|
- Collapsible day-group row planning
|
|
- Hit-testing and hover-code action dispatch
|
|
- Crop-based canvas resizing instead of bitmap reallocation
|
|
- Timer-driven partial repaint of changing cells
|
|
- Trade deduplication using stable calendar event IDs
|
|
|
|
## Algorithm / Architecture Summary
|
|
|
|
The article describes an Expert Advisor structured around a thin main entry point and four supporting modules:
|
|
|
|
1. **Main EA file**
|
|
- declares inputs
|
|
- embeds CSV resource for tester mode
|
|
- includes all modules
|
|
- forwards `OnInit`, `OnDeinit`, `OnTick`, `OnChartEvent`, and `OnTimer`
|
|
|
|
2. **Core module**
|
|
- stores layout constants, dashboard size state, theme palette, font/glyph constants
|
|
- defines scrollbar state and helpers
|
|
- computes scalable column widths
|
|
- formats calendar values and remaining time strings
|
|
|
|
3. **Logic module**
|
|
- loads events from live calendar API
|
|
- stores metadata such as unit, multiplier, digits, and event IDs
|
|
- applies filters
|
|
- builds a row plan with day separator rows
|
|
- supports collapse/expand state per day group
|
|
- supports trade candidate search and deduplication
|
|
|
|
4. **Render module**
|
|
- draws the dashboard header, filters, rows, scrollbar, countdown banner, and toast
|
|
- caches interactive rectangles for later hit-testing
|
|
- uses a main canvas plus a separator overlay canvas
|
|
|
|
5. **Interact module**
|
|
- converts chart coordinates to dashboard-local coordinates
|
|
- performs pixel-level hit-testing
|
|
- dispatches actions based on hover codes
|
|
- manages dragging, edge resizing, wheel scrolling, and canvas lifecycle
|
|
|
|
The article emphasizes allocating canvases at maximum size once, then resizing by changing the visible crop, reducing drag-time reallocation overhead.
|
|
|
|
## Mentioned or Attached Files
|
|
|
|
### Explicitly attached files
|
|
|
|
- `MQL5 News Calendar EA PART 11.mq5` — main Expert Advisor entry point
|
|
- `News Core.mqh` — shared state, layout, theme, formatting, scroll helpers
|
|
- `News Interact.mqh` — hit-testing, action dispatch, drag/resize handling, canvas lifecycle
|
|
- `News Logic.mqh` — event loading, filtering, row planning, trading logic
|
|
- `News Render.mqh` — dashboard drawing and visual update routines
|
|
- `EconomicCalendar.csv` — embedded resource for strategy tester mode
|
|
|
|
### Files only mentioned in text
|
|
|
|
- Part 10 article/source from the earlier monolithic implementation
|
|
- MQL5 Trading Tools series referenced for canvas drawing fundamentals
|
|
|
|
## Statistics
|
|
|
|
- **Modules described:** 4
|
|
- **Primary language:** MQL5
|
|
- **Main program type:** Expert Advisor
|
|
- **Attached source files in article:** 6
|
|
- **UI rendering approach:** Canvas bitmap labels
|
|
- **Article series position:** Part 11
|
|
|
|
## Tags
|
|
|
|
`MQL5` `MetaTrader5` `Economic-Calendar` `Canvas` `Dashboard` `Expert-Advisor` `UI` `Modular-Architecture` `Scrolling` `Event-Filtering`
|
|
|
|
## Difficulty
|
|
|
|
**Intermediate to Advanced**
|
|
|
|
Requires familiarity with:
|
|
|
|
- MQL5 event handlers
|
|
- `CCanvas`
|
|
- MT5 Economic Calendar API
|
|
- custom UI rendering
|
|
- state-driven interaction design
|
|
- EA modularization
|
|
|
|
## Limitations
|
|
|
|
- The repository is article-derived; full compile-ready original source is only supported to the extent of the explicitly attached files listed in the article.
|
|
- Some implementation details are described narratively rather than fully reproduced in the processed input.
|
|
- The article references additional prior work and shared helpers; not all supporting context is included here.
|
|
- Build success may depend on the presence and placement of `EconomicCalendar.csv` as described by the article.
|
|
- This README does not assume undocumented installation or usage steps beyond what the article states.
|
|
|
|
## Reference
|
|
|
|
- Original article: https://www.mql5.com/en/articles/22597
|
|
- MQL5 Economic Calendar: https://www.mql5.com/en/economic-calendar
|
|
- MQL5 `CCanvas` documentation: https://www.mql5.com/en/docs/standardlibrary/canvasgraphics/ccanvas |