Article-22540-Chart-Object-.../README.md
2026-06-02 15:27:00 +00:00

115 lines
4.4 KiB
Markdown

## Article-22540-Chart-Object-Detection-MQL5
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 an MQL5 chart-object detection framework that converts manually drawn analytical objects into structured data consumable by Expert Advisors.
The article describes a lightweight detector built around raw MQL5 chart-object APIs such as `ObjectsTotal()`, `ObjectName()`, `ObjectGetInteger()`, and `ObjectGetDouble()`. It focuses on detecting analytical objects like trendlines, rectangles, channels, horizontal lines, vertical lines, and selected Fibonacci objects, then normalizing their coordinates into a single structure.
## Original Article
- Article ID: 22540
- Author: Clemence Benjamin
- Publication date: 2026.05.17
- Category: Trading Systems
- URL: https://www.mql5.com/en/articles/22540
## Repository Purpose
- Preserve the article’s described implementation as a reusable reference.
- Provide a compact reconstruction target for:
- `CChartObjectDetector`
- `SChartObjectInfo`
- a simple polling-based test EA
- Help developers integrate manually drawn chart objects into algorithmic logic for alerts, validation, or trading decisions.
## Key Concepts
- Iteration over all chart objects via object index
- Filtering analytical objects from non-analytical UI/chart elements
- Normalization of heterogeneous object geometries into one structure
- Use of indexed properties:
- `OBJPROP_TIME`
- `OBJPROP_PRICE`
- Support for multiple object classes:
- `OBJ_TREND`
- `OBJ_RECTANGLE`
- `OBJ_CHANNEL`
- `OBJ_HLINE`
- `OBJ_VLINE`
- `OBJ_FIBO` and related Fibonacci variants in extraction logic
- Periodic polling from an EA using `OnTick()` with throttling
## Algorithm / Architecture Summary
The article presents a three-stage pipeline:
1. **Filter**
- Enumerate all chart objects on a target chart.
- Keep only supported analytical object types.
2. **Extract**
- Read time/price anchors using raw property access.
- Use indexed access for multi-point objects.
- Handle object-type-specific extraction rules:
- trend/channel/rectangle: two anchors
- horizontal line: price only
- vertical line: time only
- Fibonacci: anchor points only in this version
3. **Store**
- Populate a normalized `SChartObjectInfo` record with:
- object name
- numeric type
- readable type name
- `time1`, `time2`
- `price1`, `price2`
The detector is encapsulated in `CChartObjectDetector`, with an `Init()` method for chart binding and a `Detect()` method returning an array of normalized objects.
The test EA initializes the detector on the current chart and logs detected objects every 5 seconds.
## Mentioned or Attached Files
### Explicitly attached files
- `ChartObjectDetector.mqh` — include file containing the detection class and normalized object structure
- `ObjectDetectionTestEA.mq5` — test Expert Advisor that polls detection results and prints them to the Experts log
### Files mentioned in text
- `MQL5/Include/ChartObjectsAlgorithms/ChartObjectDetector.mqh` — target include path referenced by the article
- `MQL5/Experts/ObjectDetectionTestEA.mq5` — target EA path referenced by the article
## Statistics
- Sections: 5
- Main implementation artifacts described: 2
- Supported analytical object categories discussed: 6+
- Detection cadence in test EA: every 5 seconds
- Public detector methods shown: `Init()`, `Total()`, `Detect()`
## Tags
`mql5`, `expert-advisor`, `chart-objects`, `object-detection`, `trendline`, `fibonacci`, `technical-analysis`, `automation`
## Difficulty
Intermediate
## Limitations
- The full original repository structure is not available unless the article attachments are separately provided in this project.
- This is an article-derived reference/reconstruction project.
- Fibonacci handling is incomplete in the described version:
- anchor points are read
- level extraction is deferred to a later part
- The detector uses polling and does not yet react to chart object events automatically.
- Non-analytical objects such as labels, buttons, and other UI elements are intentionally ignored.
- The article text shows a minor inconsistency between extraction logic and filtering scope for some Fibonacci variants; implementation should follow the actual attached code if present.
## Reference
Original MQL5 article: https://www.mql5.com/en/articles/22540