Files

289 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# NANDR ORB + Order Block EA
A MetaTrader 5 Expert Advisor for scalping **XAUUSD (Gold/USD)** on **M15** (also supports M5 and M1), combining two strategies:
- **Opening Range Breakout (ORB)** — tracks the high/low of the first 15 real minutes of each trading session and trades confirmed breakouts + retests
- **Order Block Detection** — identifies institutional order blocks using volume pivot analysis (LuxAlgo methodology) and uses them as trade confirmation and SL anchors
---
## Strategy Logic
### Opening Range Breakout
1. At the start of each enabled session, accumulate the **ORB High** and **ORB Low** over the first 15 real-time minutes
2. Detect a **confirmed breakout** (candle closing beyond the range; optional strict N-bar filter to avoid false breaks)
3. Wait for price to **retest** the broken ORB level
4. Enter on the retest, sized and stopped by the selected **ORB Risk Method**
### ORB Risk Methods (coupled SL + Reward:Risk)
The `InpOrbRiskMethod` input selects a risk profile that fixes **both** the stop-loss
placement and the reward:risk target together, per the ORB strategy specification:
| Method | Stop Loss | Reward:Risk |
|--------|-----------|-------------|
| `Boundary 1:2` (default) | Broken range boundary (long=ORH, short=ORL) | 1:2 |
| `Mid 1:1.5` | Range midpoint (50%) | 1:1.5 |
| `Opposite 1:1` | Opposite range boundary (long=ORL, short=ORH) | 1:1 |
| `Legacy` | Uses `InpSLMode` / `InpTPMode` / `InpRRRatio` manually | — |
If the chosen method produces an invalid stop (wrong side of entry), the EA falls
back to the legacy `InpSLMode` / `InpTPMode` settings.
### Daily Bias
The `InpDailyBiasMode` input controls which trade directions are permitted each day:
| Mode | Behaviour |
|------|-----------|
| `Auto` (default) | The first confirmed ORB breakout of the day sets the tradeable direction; later trades must align with it |
| `Off` | No trades taken today (use on news / high-uncertainty days) |
| `Long only` | Only long entries processed |
| `Short only` | Only short entries processed |
Breakout **detection** is never suppressed — only trade **execution** is gated, so
levels and structure keep updating regardless of bias.
### Order Block Confirmation
- A **volume pivot** is identified where the bar at index `[length]` has the highest volume in a symmetric window
- Market structure determines direction: bullish OB if the pivot was a swing low, bearish OB if a swing high
- **Bullish OB zone**: `[low, hl2]` of the pivot bar
- **Bearish OB zone**: `[hl2, high]` of the pivot bar
- OBs are removed (mitigated) when price penetrates the zone
Entry is taken when the ORB retest aligns with a nearby Order Block (optional add-on, **disabled by default** via `InpUseOBRetestEntry`).
Active exposure is session-scoped: one open trade is allowed per session, and different sessions may each hold one trade on the same day.
### Session Level Ladder (optional, disabled by default)
- After a confirmed session breakout direction, the EA can trade between that session's ORB levels:
- Bullish ladder: `Low -> Mid`, then `Mid -> High`
- Bearish ladder: `High -> Mid`, then `Mid -> Low`
- Confirmation for ladder entries uses wick retest plus bar-close context.
- Priority is ORB retest first, with ladder as fallback.
- Ladder TP is always the next session level. SL is user-selectable (fixed pips or source-level buffer).
---
## Timeframe Scaling
The ORB window is always **15 real minutes** regardless of chart timeframe:
| Timeframe | ORB Bars | Breakout Confirm | OB Pivot Length |
|-----------|----------|-----------------|-----------------|
| **M15** (default) | 1 | 2 bars | 5 |
| M5 | 3 | 3 bars | 5 |
| M1 | 15 | 5 bars | 10 |
All values auto-configured by timeframe and individually overrideable via inputs.
---
## Sessions
All sessions are **disabled by default** — enable the ones you want to trade:
| Session | UTC Start | Best for XAUUSD |
|---------|-----------|-----------------|
| Daily Open | 22:00 | Asian range setup |
| Tokyo | 00:00 | Low volume, range-bound |
| London | 08:00 | High volatility ✓ (8AM GMT) |
| NY | 12:00 | High volatility ✓ |
| NY ORB (Stock open) | 13:30 | Strong momentum ✓ (9:30 EDT) |
All session start times are **UTC-based** and individually configurable via the
`Inp<Session>Hour` / `Inp<Session>Min` inputs. The EA converts them to broker
server time internally.
---
## Input Parameters
### Symbol Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpSymbolName` | `XAUUSD` | Symbol base name — auto-detected from broker (supports XAUUSD, XAUUSD.s, XAUUSD_, etc.) |
### Timeframe Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpOrbTimeframe` | `M15` | Chart timeframe for ORB (M1 / M5 / M15) |
| `InpBreakoutConfBars` | `0` | Breakout confirmation bars — `0` = auto by TF |
### Session Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpUseDailyOpen` | `false` | Enable Daily Open session |
| `InpUseTokyoSession` | `false` | Enable Tokyo session |
| `InpUseLondonSession` | `false` | Enable London session |
| `InpUseNYSession` | `false` | Enable NY session |
| `InpUseNYOrbSession` | `false` | Enable NY ORB session (13:30 UTC) |
| `InpDailyOpenHour` / `InpDailyOpenMin` | `22` / `0` | Daily Open start (UTC) |
| `InpTokyoHour` / `InpTokyoMin` | `0` / `0` | Tokyo start (UTC) |
| `InpLondonHour` / `InpLondonMin` | `8` / `0` | London start (UTC = 8AM GMT) |
| `InpNYHour` / `InpNYMin` | `12` / `0` | NY start (UTC) |
| `InpNYOrbHour` / `InpNYOrbMin` | `13` / `30` | NY ORB start (UTC = 9:30 EDT) |
### Order Block Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpOBPivotLength` | `0` | Pivot window length — `0` = auto by TF |
| `InpOBMaxCount` | `5` | Max active OBs stored per direction |
| `InpOBMitig` | `Wick` | Mitigation method: Wick or Close |
| `InpOBRequireConf` | `false` | Require OB near entry to take trade |
| `InpOBProximityPips` | `50` | Distance in pips to consider OB "nearby" |
### Entry Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpEntryMode` | `Market` | Market order on retest close, or Limit at ORB level |
| `InpUseStrictFilter` | `false` | Strict N-bar breakout filter (`false` = simple close-cross) |
| `InpWaitForRetest` | `true` | Wait for an ORB retest before entering |
| `InpBreakoutExpireBars` | `20` | Bars before an armed breakout expires (`0` = never) |
| `InpUseOBRetestEntry` | `false` | Order Block retest entry add-on (optional, default OFF) |
| `InpMaxRetestsPerSession` | `3` | Max retest entries per session (per breakout) |
| `InpDailyBiasMode` | `Auto` | Daily bias: Auto / Off (no trades) / Long-only / Short-only |
| `InpUseBreakoutVolFilter` | `false` | Require a volume spike on the breakout bar (fakeout filter) |
| `InpBreakoutVolMult` | `1.5` | Breakout bar volume must be ≥ this × average volume |
| `InpBreakoutVolAvgBars` | `20` | Number of bars used for the volume average |
### Session Level Ladder Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpUseSessionLevelLadder` | `false` | Enable level-to-level ladder entries after breakout direction confirmation (optional, default OFF) |
| `InpLadderOnDailyOpen` | `true` | Enable ladder entries on Daily Open session |
| `InpLadderOnTokyo` | `true` | Enable ladder entries on Tokyo session |
| `InpLadderOnLondon` | `true` | Enable ladder entries on London session |
| `InpLadderOnNY` | `true` | Enable ladder entries on NY session |
| `InpLadderOnNYORB` | `true` | Enable ladder entries on NY ORB session |
| `InpUseLadderATRVolCeiling` | `false` | Enable ATR volatility ceiling filter for ladder entries |
| `InpLadderATRMaxPips` | `200.0` | Skip ladder entries when ATR exceeds this pips threshold |
| `InpUseLadderSessionCaps` | `false` | Enable per-session ladder trade caps |
| `InpLadderCapDailyOpen` | `2` | Daily Open ladder cap (`0` = unlimited) |
| `InpLadderCapTokyo` | `2` | Tokyo ladder cap (`0` = unlimited) |
| `InpLadderCapLondon` | `2` | London ladder cap (`0` = unlimited) |
| `InpLadderCapNY` | `2` | NY ladder cap (`0` = unlimited) |
| `InpLadderCapNYORB` | `2` | NY ORB ladder cap (`0` = unlimited) |
| `InpLadderSLMode` | `Fixed Pips` | Ladder SL mode: fixed pips or buffer beyond source level |
| `InpLadderSLBufferPips` | `5.0` | Buffer size when ladder SL mode is level-buffer |
| `InpLadderMaxTradesPerSession` | `2` | Global ladder cap per session (`0` = unlimited); combined with per-session cap using the stricter limit |
### Lot Size & Risk
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpLotMode` | `Risk %` | Fixed lot or auto-calculated from risk % |
| `InpFixedLotSize` | `0.05` | Fixed lot (used when LotMode = Fixed) |
| `InpRiskPercent` | `0.05` | % of balance to risk per trade |
### Stop Loss
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpOrbRiskMethod` | `Boundary 1:2` | Coupled risk method (sets SL + RR together); `Legacy` uses the manual settings below |
| `InpSLMode` | `OB Boundary` | SL placement (Legacy only): OB Boundary / Fixed Pips / ATR-based / ORB Opposite Boundary / ORB Range Midpoint |
| `InpSLPips` | `100.0` | SL in pips (Fixed mode) |
| `InpATRMultiplier` | `1.5` | ATR multiplier for SL (ATR mode) |
| `InpATRPeriod` | `14` | ATR period |
### Take Profit
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpTPMode` | `RR Ratio` | TP by fixed pips or Risk:Reward ratio (Legacy only) |
| `InpTPPips` | `100.0` | TP in pips (Fixed mode) |
| `InpRRRatio` | `2.0` | Risk:Reward ratio (Legacy RR mode) — 2.0 = 1:2 |
### Trade Management
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpBreakevenTrigPips` | `15.0` | Move SL to breakeven when profit reaches this |
| `InpBreakevenOffPips` | `2.0` | Breakeven SL offset above/below entry |
| `InpTrailingStopPips` | `0.0` | Trailing stop distance — `0` = disabled |
| `InpMaxTradesPerDay` | `8` | Max trades opened per calendar day |
| `InpMaxPosPerSession` | `1` | Max simultaneous positions per session |
### Risk Management
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpMaxDailyLossUSD` | `0.0` | Halt trading if daily loss exceeds this USD amount — `0` = off |
| `InpMaxDailyLossPct` | `0.0` | Halt trading if daily loss exceeds this % of equity — `0` = off |
### Display Settings
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpShowDashboard` | `true` | Corner stats panel |
| `InpShowORBLines` | `true` | ORB High/Low/Mid lines on chart |
| `InpShowOBZones` | `true` | Order block rectangles on chart |
| `InpShowTradeLabels` | `true` | Entry arrows and SL/TP lines on chart |
---
## Dashboard
A real-time HUD is drawn in the top-left corner showing:
```
▌ NANDR ORB+OB EA
─────────────────────────
Symbol : XAUUSD TF: M15
OrbTF : M15 BarsNeeded: 1
─────────────────────────
London H:2685.50 L:2672.30 [BULL↑]
NY H:2690.10 L:2681.00 [ARMED]
─────────────────────────
BullOBs: 2 BearOBs: 1
─────────────────────────
Trades : 1 / 3
W/L : 1 / 0 WR: 100%
Today PnL: +48.20 USD
Equity : 10048.20
```
---
## Chart Visuals
| Object | Color | Description |
|--------|-------|-------------|
| ORB High/Low lines | Session color | Solid horizontal lines at ORB levels |
| ORB Mid line | Session color (dotted) | Midpoint of ORB range |
| Bullish OB zone | Green rectangle | Active bull order block |
| Bearish OB zone | Red rectangle | Active bear order block |
| Entry arrow | Green (buy) / Red (sell) | Trade entry marker |
| SL line | Red dashed | Stop loss level |
| TP line | Green dashed | Take profit level |
Session line colors: **Tokyo** = Blue · **London** = Red · **NY / NY ORB** = Gold · **Daily** = Silver
---
## Installation
1. Copy `NANDR_ORB_OB_EA.mq5` to your MetaTrader 5 `MQL5/Experts/` folder
2. Open **MetaEditor** (F4 in MT5) and compile the file (F7) — should produce zero errors
3. In MT5, open a **XAUUSD M15** chart
4. Drag the EA onto the chart, enable **"Allow Algo Trading"**
5. In the inputs dialog, enable at least one session (e.g. `InpUseLondonSession = true`)
6. Click OK — the EA will auto-detect the broker's XAUUSD symbol variant
---
## Requirements
- MetaTrader 5 (build 2755+)
- XAUUSD (or broker equivalent: XAUUSD.s, XAUUSD_, GOLD, etc.)
- Recommended chart timeframe: **M15**
- Account type: any (ECN recommended for tighter spreads on Gold)
---
## Files
| File | Description |
|------|-------------|
| `NANDR_ORB_OB_EA.mq5` | Expert Advisor source code |
| `orb.pine` | Reference Pine Script — ORB indicator (TradingView) |
| `order_block_detector.pine` | Reference Pine Script — LuxAlgo Order Block Detector |
---
## Disclaimer
This EA is provided for educational purposes. Past performance does not guarantee future results. Always test thoroughly on a **demo account** before using on live funds. Trading Gold (XAUUSD) carries significant risk.