Indicators/ICTMacros/README.md
175 lines
6.9 KiB
Markdown
# 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_<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.