# 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 | | --- | --- | | `ICTMacros/ICTMacros.mq5` | Indicator source code (MQL5, MetaTrader 5 build 3400+). | | `ICTMacros/README.md` | This document. | The compiled `ICTMacros.ex5` is build output and is intentionally not committed (see `.gitignore`). --- ## 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 1. Copy `ICTMacros/ICTMacros.mq5` into `MQL5/Indicators/` of your MetaTrader 5 data folder (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___` 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.