---
title: The Geometry Trading Research Report
url: https://share.jotbird.com/speedy-brilliant-javelina
updated_at: 2026-09-21T03:06:11.55639+00:00
---

# The Geometry Trading Research Report
**A Quantitative Audit of Retail Price Action, Smart Money Concepts, and Macro Regime Gating**

---

## Executive Summary

Over the course of intensive backtesting and algorithmic vetting, every mainstream retail trading concept—including **Smart Money Concepts (SMC), ICT Fair Value Gaps, Order Blocks, Asian Session Breakouts/Sweeps, VWAP Reversion/Momentum, Round Numbers, and Oscillator Divergences**—was subjected to strict institutional quantitative testing standards.

Using direct tick data from MetaTrader 5 (MT5) with institutional broker friction modeling (raw spreads and commissions), each concept was tested across **100,000 to 200,000 continuous tick candles (2 to 4+ years)**.

The research yielded two profound discoveries:
1. **The Retail Geometry Manifesto (Continuous Failure):** When executed as static, always-on single-asset strategies, **all intraday chart geometry mathematically collapses into a random walk**. The market efficiently counter-balances the Win Rate against the Risk/Reward ratio, ensuring that total Expectancy converges to `0.0 - Broker Spread`.
2. **The Regime Gating Breakthrough (Conditional Alpha):** When tested across discrete **rolling 3-month blocks over 3 to 5 years**, intraday geometry strategies were proven **not to be fundamentally useless, but strictly regime-dependent**. Certain geometric patterns (like FVG mitigations or Inside Bar breakouts) yield massive positive expectancy, but *only* when gated by macro-environmental filters (e.g., ADX > 40 or extreme distance from the 200 SMA).

---

## 1. Quantitative Vetting Standards Applied

To eliminate heuristic bias and curve-fitting, all strategies were coded into a standardized `StrategyCore` interface and executed via a vectorized simulation engine (`FastEngine`):

* **Sample Depth:** Intraday M5 and M15 timeframes required a minimum of 50,000 to 100,000 continuous candles (~2 to 4.5 years).
* **Sample Count ($N$):** A minimum of $N \ge 300$ executed trades to satisfy the Law of Large Numbers.
* **Expectancy Metric ($EV$):** Calculated in R-multiples:
  $$\text{Expectancy } (R) = (\text{Win Rate} \times \text{Avg Win } R) - (\text{Loss Rate} \times \text{Avg Loss } R)$$
  *Pass threshold:* Minimum $+0.15\text{ R}$ to $+0.20\text{ R}$ after full friction deduction.
* **Profit Factor ($PF$):** Minimum $PF \ge 1.40$.
* **Risk Modeling:** Full raw spread matrix, latency buffer, and commission modeling.

---

## 2. Continuous Macro Test Results (The Falsification)

### A. ICT Fair Value Gaps & Order Block Mitigation
* **Module:** `fvg_order_block_core.py`
* **Timeframe:** M15 (100,000 candles, ~4 Years)
* **Mechanics:** Identified 3-candle price voids where Candle 1 High and Candle 3 Low did not overlap. Required Candle 2 body to exceed 1.5x ATR (institutional displacement). Placed limit orders at the gap retest with a 2:1 RR (Stop Loss below origin candle).
* **Macro Results:**
  * **EURUSD:** 1,208 Trades | Win Rate: 32.70% | **Expectancy: -0.09 R** | PF: 0.97
  * **GBPUSD:** 1,265 Trades | Win Rate: 31.94% | **Expectancy: -0.12 R** | PF: 0.94
  * **USDJPY:** 1,271 Trades | Win Rate: 34.38% | **Expectancy: -0.02 R** | PF: 1.05
* **Macro Filter Test:** Adding an H4 200 EMA directional filter reduced trade count from ~1,250 down to ~750, but expectancy remained negative (**EURUSD: -0.06 R**, **GBPUSD: -0.10 R**).
* **Conclusion:** Mechanically catching pullbacks into visual price voids holds zero standalone statistical edge.

### B. Asian Session Volatility Breakout
* **Module:** `volatility_breakout_core.py`
* **Timeframe:** M15 (100,000 candles)
* **Mechanics:** Measured Asian session range (00:00–08:00 UTC). Entered on London open breakout if today's range was 10% tighter than the 20-day rolling average (volatility compression).
* **Macro Results:**
  * *Wide Stop (Bottom of Asian Range):* Generated a 42% Win Rate, but Expectancy was **-0.05 R**.
  * *Midpoint Stop (Tighter SL to double R:R):* Win Rate immediately fell from 42% to 32% (GBPJPY 32.69% WR, -0.10 R; GBPUSD 26.02% WR, -0.05 R; EURUSD 24.45% WR, -0.15 R).
* **Conclusion:** The market dynamically neutralizes risk/reward adjustments. Compressing stop losses simply increases stop-out frequency at an identical mathematical ratio.

### C. London Stop Hunt (Asian Sweep / Judas Swing)
* **Module:** `asian_sweep_core.py`
* **Timeframe:** M15 (100,000 candles, ~4 Years)
* **Mechanics:** Waited for price to break beyond the Asian session high/low during London open, then entered a fade if the M15 candle closed back inside the range (false breakout/liquidity run).
* **Macro Results:**
  * **EURUSD:** 855 Trades | Win Rate: 30.64% | **Expectancy: 0.00 R**
  * **GBPUSD:** 868 Trades | Win Rate: 26.38% | **Expectancy: -0.16 R**
  * **GBPJPY:** 780 Trades | Win Rate: 23.85% | **Expectancy: -0.16 R**
* **Conclusion:** Over 855 trades on EURUSD, the expectancy flatlined at exactly 0.00 R before spread. Stop-run fades are efficiently counter-balanced by high-frequency market-making algorithms.

### D. VWAP Mean Reversion & Inversion
* **Modules:** `vwap_reversion_core.py`, `vwap_momentum_core.py`
* **Timeframe:** M5 (200,000 candles, ~2.6 Years)
* **Mean Reversion (Fading 2.5 SD Bands):**
  * EURUSD: 344 Trades | Win Rate: 29.65% | **Expectancy: -0.07 R**
  * GBPUSD: 360 Trades | Win Rate: 30.56% | **Expectancy: -0.10 R**
  * USDJPY: 336 Trades | Win Rate: 22.02% | **Expectancy: -0.26 R**
  * *Diagnosis:* Fading standard deviation bands on intraday timeframes is stepping in front of institutional trends.
* **Momentum Inversion (Buying 2.5 SD Breakout with 2:1 RR):**
  * EURUSD: 669 Trades | Win Rate: 32.44% | **Expectancy: -0.08 R**
  * *Diagnosis:* Inverting a losing strategy does not produce a winning strategy. Because forex ranges ~70% of the time, breakout entries trigger on wicks and get chopped up by spread and variance.

### E. Daily-Anchored M15 Momentum
* **Module:** `daily_anchor_momentum_core.py`
* **Timeframe:** M15
* **Mechanics:** Evaluated M15 VWAP pullbacks strictly in the direction of the Daily 50 SMA.
* **Macro Results:**
  * *With 16:00 London close exit:* Win rate was ~40%, but expectancy was **-0.03 R to -0.07 R** because time-stops truncated runners while taking full 20-pip losses.
  * *With 4:1 RR (80-pip TP / 20-pip SL):* EURUSD produced 355 trades, 19.44% Win Rate, **-0.07 R Expectancy**. Moving averages are lagging indicators; by the time the Daily trend is confirmed, M15 pullbacks frequently align with macro trend exhaustion.

### F. The Timeframe Paradox (Bollinger Double Bounce)
* **Module:** `bb_double_bounce_core.py`
* **H4 Timeframe:** Generated verified alpha (**+0.22 R**, PF ~1.50).
* **H1 Timeframe:** Tested over 8 years (1,600+ trades) to increase frequency. The edge immediately evaporated to **-0.05 R**.
* **The Law of Timeframe Physics:** A 2.5 Standard Deviation extension on H4 represents global macroeconomic liquidity exhaustion (central bank level re-balancing). A 2.5 SD extension on H1 or M15 represents localized retail stop runs (random noise). High frequency and standalone structural geometry are fundamentally incompatible.

### G. Other Quarantined Intraday Concepts
* **Round Number Bounce (M1/M5):** 24 trades in 100,000 candles (-0.12 R). Excessive constraint stacking and negative expectancy.
* **RSI Divergence Reversal (M5):** -0.09 R on EURUSD, -0.18 R on GBPJPY. Oscillators fail to predict the duration of institutional blow-off tops.
* **London Close Trap (M15):** Profitable over 8 months (favorable regime), but collapsed to -0.09 R to -0.22 R across a full 3-year multi-regime sample (220,000 candles).

---

## 3. The Regime Orchestrator Breakthrough

Rather than discarding all failed geometry strategies, we tested the hypothesis: **"Do these strategies work consistently under specific, identifiable market weather?"**

All 18 strategies were re-evaluated across **rolling 3-month blocks over 3 to 5 years**, tracking four macro sensors:
1. **ADX (14):** Trend strength and momentum velocity.
2. **ATR (14):** Realized market volatility.
3. **Dist200 (%):** Absolute percentage distance between price and the 200 SMA (Macro Extension).
4. **Bollinger Squeeze (20):** Volatility compression.

### The Findings: Regime Separation

| Strategy | Profitable Block Conditions (PF > 1.2) | Failed Block Conditions (PF < 1.0) | Quantitative Takeaway |
| :--- | :--- | :--- | :--- |
| **Inside Bar Momentum (M15)** | ADX: **38.84**, Dist200: **5.81%** | ADX: **35.01**, Dist200: **1.95%** | Only works when the market is severely extended and moving forcefully. Hugging the 200 SMA causes false breakouts. |
| **FVG Order Block (M15)** | ADX: **41.13**, Dist200: **3.11%** | ADX: **32.13**, Dist200: **1.40%** | Order blocks only hold during peak institutional liquidity injection (ADX > 40). Slow markets slice right through them. |
| **Daily Anchor Momentum (M15)** | ADX: **42.98**, Dist200: **1.60%** | ADX: **32.14**, Dist200: **2.66%** | Requires massive trend velocity (ADX > 40) but price must be close to the mean (Dist200 < 2%). Fails if already extended. |
| **Asian Sweep / Stop Hunt (M15)** | ADX: **33.63**, Dist200: **2.74%** | ADX: **37.19**, Dist200: **2.12%** | Stop-hunting works best in contained momentum (ADX < 35). In strong trends (ADX > 37), the sweep does not revert—it breaks out. |
| **London ORB (M5)** | Dist200: **0.80%**, ADX: **33.81** | Dist200: **4.24%**, ADX: **34.17** | Breakouts require price to be near the macro mean (room to expand). Fails when already extended into macro exhaustion. |
| **RSI Divergence (M5)** | Dist200: **1.83%**, ADX: **35.62** | Dist200: **4.70%**, ADX: **33.08** | Intraday divergence requires a flat macro base (< 2.5%). Fading divergence in a trending market is suicidal. |
| **BB Double Bounce (H4)** | Dist200: **1.21%** | Dist200: **3.09%** | Mean reversion works in consolidating markets. When secular trends push Dist200 > 3%, the bands ride the trend. |
| **Weekend Gap Fill (H1)** | Dist200: **3.58%**, ADX: **30.49** | Dist200: **5.27%**, ADX: **33.51** | Highly robust (won 8 of 9 blocks). Only fails during extreme macro extensions (> 5%), where gaps represent runaway breaks. |

---

## 4. The Universal Failures (Permanently Quarantined)

Four strategies failed to generate a single profitable 3-month block across the multi-year history, regardless of market conditions:
1. **Round Number Bounce (M5):** 0 for 5 blocks profitable. Psychological round numbers offer no quantifiable edge over spread.
2. **ATR Trend Follower (D1):** Flawed ATR trailing-stop logic caused unrecoverable equity drawdowns.
3. **ATR Fade (M15):** 0 for 10 blocks profitable. Intraday fading based on ATR bands bleeds capital continuously.
4. **VWAP Reversion (M5):** 0 for 4 blocks profitable. Mean-reverting to VWAP intraday is mathematically negative across all regimes.

---

## 5. Architectural Implementation & Strategy Portfolio

These findings led to the construction of a dynamic **Regime Orchestrator**, establishing a two-tier portfolio architecture:

### Tier 1: Universal / Global Strategies (Always-On)
Strategies that do not rely on intraday chart patterns and are immune to single-asset regime collapse:
* **Statistical Arbitrage (Pairs Cointegration):** H1/D1 mean-reversion between cointegrated assets (`EURUSD/GBPUSD`, `SPGI/MCO`, `GS/MS`). Market neutral.
* **Connors RSI-2 Mean Reversion:** D1 equity pullbacks on S&P 500 / Nasdaq stocks above the 200 SMA.
* **Macro Carry Trades:** EOD central bank interest rate differential harvesting with a Daily 200 EMA trend filter.

### Tier 2: Regime-Gated Geometry Strategies
Intraday strategies dynamically toggled by the Orchestrator via real-time macro telemetry:
* **London ORB:** Active only when `Dist200 < 1.5%`
* **Inside Bar Momentum:** Active only when `ADX > 35.0` AND `Dist200 > 4.0%`
* **Asian Sweep:** Active only when `ADX < 35.0`
* **FVG Order Block:** Active only when `ADX > 40.0`
* **Daily Anchor Momentum:** Active only when `ADX > 40.0` AND `Dist200 < 2.0%`
* **RSI Divergence:** Active only when `Dist200 < 2.5%`
* **BB Double Bounce:** Active only when `Dist200 < 2.0%`
* **Weekend Gap Fill:** Active only when `Dist200 < 4.0%`
