2026-11-01 03:50:34 +02:00 | | | # ICT Macros (MetaTrader 5)
|
| | |
|
| | | `ICTMacros.mq5` is a MetaTrader 5 chart indicator that draws **ICT macro windows**
|
| | | for the **Asia**, **London** and **New York** sessions directly on the price chart.
|
| | |
|
| | | Each macro window is drawn as a rectangle covering the high/low range of the bars
|
| | | inside the window, with an optional 50% midline, start/end vertical lines and a
|
| | | text label. Everything is a normal chart object, so the zones stay on the chart,
|
| | | can be styled by the indicator inputs, and are removed automatically when the
|
| | | indicator is deleted.
|
| | |
|
| | | The indicator is a **visualisation tool only**: it draws no signals, exposes no
|
| | | buffers, and never places or manages trades.
|
| | |
|
| | | ---
|
| | |
|
| | | ## Files
|
| | |
|
| | | | File | Description |
|
| | | | --- | --- |
|
2026-11-01 03:59:50 +02:00 | | | | `ICTMacros/ICTMacros.mq5` | Indicator source code (MQL5, MetaTrader 5 build 3400+). |
|
| | | | `ICTMacros/README.md` | This document. |
|
2026-11-01 03:50:34 +02:00 | | |
|
2026-11-01 03:59:50 +02:00 | | | The compiled `ICTMacros.ex5` is build output and is intentionally not committed (see `.gitignore`).
|
2026-11-01 03:50:34 +02:00 | | |
|
| | | ---
|
| | |
|
| | | ## What is an ICT macro window?
|
| | |
|
| | | ICT macro windows are short time slices inside a trading session where
|
| | | institutional order flow is often expected (for example the London open macro,
|
| | | or the New York AM session macros). This indicator converts the windows from
|
| | | **New York local time** into broker server time and highlights them per day.
|
| | |
|
| | | Default windows (New York local time):
|
| | |
|
| | | | Session | Default windows |
|
| | | | --- | --- |
|
| | | | London | `02:33-03:00;04:03-04:30` |
|
| | | | New York | `08:50-09:10;09:50-10:10;10:50-11:10;11:50-12:10;13:10-13:40;15:15-15:45` |
|
| | | | Asia | *(empty by default)* |
|
| | |
|
| | | The Asia list is empty on purpose: paste your own Asia windows into
|
| | | `InpAsiaMacros` and the Asia toggle starts working immediately.
|
| | |
|
| | | ---
|
| | |
|
| | | ## Installation
|
| | |
|
2026-11-01 03:59:50 +02:00 | | | 1. Copy `ICTMacros/ICTMacros.mq5` into `MQL5/Indicators/` of your MetaTrader 5 data folder
|
2026-11-01 03:50:34 +02:00 | | | (MetaEditor: **File → Open Data Folder**).
|
| | | 2. Compile it in MetaEditor (**F7**), or copy a prebuilt `ICTMacros.ex5`.
|
| | | 3. In MetaTrader 5 open **Navigator → Indicators → ICTMacros** and attach it to a
|
| | | chart (M1 to M15 is recommended).
|
| | |
|
| | | No DLLs, no external files and no network access are used.
|
| | |
|
| | | ---
|
| | |
|
| | | ## Inputs
|
| | |
|
| | | ### Sessions
|
| | | | Input | Default | Description |
|
| | | | --- | --- | --- |
|
| | | | `InpShowAsia` | `true` | Draw Asia macros. |
|
| | | | `InpShowLondon` | `true` | Draw London macros. |
|
| | | | `InpShowNewYork` | `true` | Draw New York macros. |
|
| | |
|
| | | ### Macro windows (New York local time, format `HH:MM-HH:MM;...`)
|
| | | | Input | Default | Description |
|
| | | | --- | --- | --- |
|
| | | | `InpAsiaMacros` | *(empty)* | Asia window list. |
|
| | | | `InpLondonMacros` | `02:33-03:00;04:03-04:30` | London window list. |
|
| | | | `InpNYMacros` | `08:50-09:10;09:50-10:10;10:50-11:10;11:50-12:10;13:10-13:40;15:15-15:45` | New York window list. |
|
| | |
|
| | | A window whose end time is not later than its start time is treated as
|
| | | **crossing midnight** (for example `23:30-00:15`).
|
| | |
|
| | | ### Time base
|
| | | | Input | Default | Description |
|
| | | | --- | --- | --- |
|
| | | | `InpTimeBase` | `ICT_TB_NEWYORK` | Reference zone of the window lists: New York local, broker server, or GMT. |
|
| | | | `InpServerOffsetMode` | `ICT_SRV_AUTO` | Detect the broker server offset automatically, or use the manual value. |
|
| | | | `InpManualServerGmtOffset` | `0.0` | Server GMT offset in hours, used when the manual mode is selected. |
|
| | |
|
| | | ### Display
|
| | | | Input | Default | Description |
|
| | | | --- | --- | --- |
|
| | | | `InpDrawBox` | `true` | Draw the macro box. |
|
| | | | `InpFillBox` | `false` | Fill the box (opaque, drawn behind the bars). |
|
| | | | `InpMidline` | `false` | Draw the 50% midline of the window. |
|
| | | | `InpVerticalLines` | `true` | Draw vertical lines at window start and end. |
|
| | | | `InpShowLabels` | `true` | Draw the window label. |
|
| | | | `InpLabelFontSize` | `8` | Label font size. |
|
| | | | `InpAsiaColor` | `clrKhaki` | Asia colour. |
|
| | | | `InpLondonColor` | `clrSteelBlue` | London colour. |
|
| | | | `InpNewYorkColor` | `clrTomato` | New York colour. |
|
| | | | `InpLiveBox` | `true` | Refresh the window that is currently open. |
|
| | |
|
| | | ### History / limits
|
| | | | Input | Default | Description |
|
| | | | --- | --- | --- |
|
| | | | `InpHistoryDays` | `20` | Past days to draw (`0` = current day only, capped at 200). |
|
| | | | `InpMaxObjects` | `2000` | Safety cap on objects created per rebuild. |
|
| | | | `InpCleanStaleObjects` | `true` | Remove leftover `ICTMacros_` objects from former runs. |
|
| | |
|
| | | ### Diagnostics
|
| | | | Input | Default | Description |
|
| | | | --- | --- | --- |
|
| | | | `InpVerboseLog` | `true` | Print time base, offset and object diagnostics to the Experts log. |
|
| | |
|
| | | ---
|
| | |
|
| | | ## Time handling
|
| | |
|
| | | * Chart bars are in **broker server time**; the configured windows are converted
|
| | | **New York local → UTC → server time**.
|
| | | * **US DST rules are implemented inside the indicator** (second Sunday of March
|
| | | → first Sunday of November), so EST/EDT is handled without external data.
|
| | | * The server/UTC offset is auto-detected as
|
| | | `TimeTradeServer() - TimeGMT()` rounded to 5 minutes, or taken from
|
| | | `InpManualServerGmtOffset` when `ICT_SRV_MANUAL` is selected.
|
| | | * `TimeGMT()` depends on the accuracy of the local PC clock. If that clock is not
|
| | | reliable, switch `InpServerOffsetMode` to `ICT_SRV_MANUAL`.
|
| | | * The detected offset is re-checked on every new bar, so broker DST switches are
|
| | | picked up without reloading the indicator.
|
| | |
|
| | | ---
|
| | |
|
| | | ## Behaviour and object naming
|
| | |
|
| | | * Object prefix: `ICTMacros_`. Names follow
|
| | | `ICTMacros_<Session>_<index>_<YYYYMMDD>` with `_mid`, `_S`, `_E` and `_L`
|
| | | suffixes for the midline, start line, end line and label.
|
| | | * Only objects created by this program are ever deleted; foreign objects are
|
| | | left untouched.
|
| | | * Boxes are rebuilt on `OnInit` and on every **new bar**; only the currently open
|
| | | window is refreshed intrabar (`InpLiveBox`), so closed windows never move.
|
| | | * A window is skipped when no bars exist for it (weekend, holiday, data gap), and
|
| | | a later window of the day appears once its first bar has formed.
|
| | | * The rectangle top/bottom are the high/low of the bars inside the window;
|
| | | `tEnd` is clamped to the window end.
|
| | |
|
| | | ---
|
| | |
|
| | | ## Limitations
|
| | |
|
| | | * Chart objects only — there are no indicator buffers, so nothing is available to
|
| | | `iCustom()` or to an Expert Advisor.
|
| | | * MT5 chart objects have no alpha transparency: a filled box is opaque (it is
|
| | | drawn behind the bars). Outline-only is the default, and is the recommended
|
| | | setting on busy charts.
|
| | | * Best on M1–M15. On coarse timeframes a window can cover 0 or 1 bar, and the
|
| | | indicator logs a warning when the period is above 30 minutes.
|
| | | * The object count grows with `InpHistoryDays`; watch `InpMaxObjects` on long
|
| | | histories.
|
| | | * Window definitions are plain text inputs, so a typo silently drops only the
|
| | | malformed entry — check the Experts log (`InpVerboseLog = true` prints the
|
| | | parsed window count per session).
|
| | |
|
| | | ---
|
| | |
|
| | | ## Requirements
|
| | |
|
| | | * MetaTrader 5 (MQL5), compiled with a recent MetaEditor build.
|
| | | * Any symbol and timeframe; no additional files required.
|
| | |
|
| | | ---
|
| | |
|
| | | ## Disclaimer
|
| | |
|
| | | This indicator is provided for educational and analytical purposes. It draws
|
| | | time-based zones only, produces no trading signals, and does not trade. Nothing
|
| | | in this repository is financial advice, and past behaviour of any market window
|
| | | does not guarantee future results.
|