Files
NANDR_BOT/README.md
T

256 lines
11 KiB
Markdown
Raw 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** using a strict N-bar filter (no false breaks)
3. Wait for price to **retest** the broken ORB level
4. Enter on the retest
### 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 — configurable).
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 (New)
- 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` | `true` | Strict N-bar breakout filter (recommended) |
| `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` | `true` | Enable level-to-level ladder entries after breakout direction confirmation |
| `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.01` | Fixed lot (used when LotMode = Fixed) |
| `InpRiskPercent` | `1.0` | % of balance to risk per trade |
### Stop Loss
| Parameter | Default | Description |
|-----------|---------|-------------|
| `InpSLMode` | `OB Boundary` | SL placement: OB Boundary / Fixed Pips / ATR-based / ORB Opposite Boundary (buy=ORL, sell=ORH) / ORB Range Midpoint |
| `InpSLPips` | `20.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 |
| `InpTPPips` | `40.0` | TP in pips (Fixed mode) |
| `InpRRRatio` | `2.0` | Risk:Reward ratio (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` | `3` | 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.