Institutional session liquidity capture exploiting Accumulation, Manipulation, and Distribution across European opens.
Requires minimum 14-period daily Average True Range (ATR) percentile > 30% to avoid dead ranges. Avoid trading within 30 minutes before and after high-impact macroeconomic events (FOMC, NFP, US CPI, ECB/BOE Rate Decisions). Fixed spread thresholds must be under 1.2 pips for EURUSD/GBPUSD and under 25 cents for XAUUSD to avoid execution drag during the manipulation transition.
Validate every condition prior to executing order.
H4 50 EMA was rising cleanly at 1.0810, establishing a bullish daily bias. The 00:00-06:00 UTC Asian accumulation created a 24-pip range between 1.08420 and 1.08660. At 07:45 UTC, London pre-open volume pushed EURUSD down to 1.08320 (a 10-pip sweep below Asian Low, comfortably exceeding the 0.25x H1 ATR requirement of 7.2 pips). At 08:20 UTC, an aggressive green M5 candle closed back at 1.08450, breaking past the recent M5 swing high at 1.08440. Long entered at 1.08450 with SL at 1.08300 (15 pips risk). TP1 hit at range midpoint (1.08540, +9 pips) scaling 40% and moving SL to BE. TP2 hit at range high (1.08660, +21 pips) scaling 30%. The final 30% runner trailed M5 higher lows up into the US Open session, finally closing at 1.08910 (+46 pips).
H4 50 EMA was slightly upward sloping. Asian range spanned 1.26900 to 1.27300. At 08:05 UTC, UK CPI flash data leaked early volatility, driving GBPUSD rapidly through the Asian Low down to 1.26690 (a 21-pip sweep, clearing the 0.25 H1 ATR requirement). At 08:25 UTC, price spiked sharply up, closing inside the range at 1.26850 and taking out an M5 minor swing high. Entry triggered long at 1.26850 with SL at 1.26670. However, persistent institutional selling resumed at 08:40 UTC ahead of European cash equity opens; the bid collapsed, taking out 1.26670 for a full -1.0R loss. The 1 trade/day constraint protected the portfolio from chasing revenge entries during the subsequent 100-pip trend extension downward.
Copy code directly into TradingView Pine Editor
//@version=5
strategy("Institutional Power of 3 (AMD) Intraday Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=1.0, commission_type=strategy.commission.cash_per_contract, commission_value=0.000035, slippage=1)
// --- INPUTS ---
grp_time = "Session Configurations (UTC)"
accum_sess = input.session("0000-0600", "Accumulation Session (Asian)", group=grp_time)
manip_sess = input.session("0700-1000", "Manipulation Session (London)", group=grp_time)
trade_tz = input.string("UTC", "Timezone", group=grp_time)
grp_filter = "Trend & Volatility Filters"
h4_ema_len = input.int(50, "H4 Trend EMA Length", minval=10, group=grp_filter)
atr_h1_len = input.int(14, "H1 ATR Length", minval=1, group=grp_filter)
atr_mult = input.float(0.25, "Min Sweep ATR Multiplier", step=0.05, group=grp_filter)
max_sweep = input.float(1.50, "Max Sweep ATR Multiplier (Invalidation)", step=0.1, group=grp_filter)
grp_swing = "M5 Structure Confirmation"
swing_len = input.int(3, "Swing High/Low Pivot Length", minval=1, group=grp_swing)
// --- INDICATOR CALLS (MTF) ---
h4_ema = request.security(syminfo.tickerid, "240", ta.ema(close, h4_ema_len))
h4_ema_prv = request.security(syminfo.tickerid, "240", ta.ema(close[1], h4_ema_len))
h1_atr = request.security(syminfo.tickerid, "60", ta.atr(atr_h1_len))
bullish_bias = (close > h4_ema) and (h4_ema > h4_ema_prv)
bearish_bias = (close < h4_ema) and (h4_ema < h4_ema_prv)
// --- TIME HELPERS ---
in_accum = not na(time(timeframe.period, accum_sess + ":1234567", trade_tz))
in_manip = not na(time(timeframe.period, manip_sess + ":1234567", trade_tz))
new_day = ta.change(time("D")) != 0
// --- VARIABLES ---
var float accum_high = na
var float accum_low = na
var float accum_mid = na
var bool manip_low_valid = false
var bool manip_high_valid = false
var float manip_ext_low = na
var float manip_ext_high = na
var int trades_today = 0
if new_day
accum_high := na
accum_low := na
accum_mid := na
manip_low_valid := false
manip_high_valid := false
manip_ext_low := na
manip_ext_high := na
trades_today := 0
// --- ACCUMULATION TRACKING (00:00 - 06:00 UTC) ---
if in_accum
accum_high := na(accum_high) ? high : math.max(accum_high, high)
accum_low := na(accum_low) ? low : math.min(accum_low, low)
accum_mid := (accum_high + accum_low) / 2.0
// --- MANIPULATION DETECTION (07:00 - 10:00 UTC) ---
min_sweep_dist = h1_atr * atr_mult
max_sweep_dist = h1_atr * max_sweep
if in_manip and not na(accum_high) and not na(accum_low)
// Bullish setup requirement: Sweep Low
if low < (accum_low - min_sweep_dist) and low > (accum_low - max_sweep_dist)
manip_low_valid := true
manip_ext_low := na(manip_ext_low) ? low : math.min(manip_ext_low, low)
// Bearish setup requirement: Sweep High
if high > (accum_high + min_sweep_dist) and high < (accum_high + max_sweep_dist)
manip_high_valid := true
manip_ext_high := na(manip_ext_high) ? high : math.max(manip_ext_high, high)
// Invalidate if breached beyond maximum threshold
if in_manip and not na(accum_low) and low < (accum_low - max_sweep_dist)
manip_low_valid := false
if in_manip and not na(accum_high) and high > (accum_high + max_sweep_dist)
manip_high_valid := false
// --- M5 SWING STRUCTURE PIVOTS ---
pv_high = ta.pivothigh(high, swing_len, swing_len)
pv_low = ta.pivotlow(low, swing_len, swing_len)
var float last_swing_high = na
var float last_swing_low = na
if not na(pv_high)
last_swing_high := pv_high
if not na(pv_low)
last_swing_low := pv_low
// --- DISTRIBUTION PHASE: TRIGGERS & ENTRIES ---
can_trade = in_manip and (trades_today == 0) and (strategy.position_size == 0)
long_trigger = can_trade and bullish_bias and manip_low_valid and (close > accum_low) and (close > last_swing_high)
short_trigger = can_trade and bearish_bias and manip_high_valid and (close < accum_high) and (close < last_swing_low)
if long_trigger
float sl_price = manip_ext_low
float tp1_price = accum_mid
float tp2_price = accum_high
strategy.entry("AMD_Long", strategy.long)
strategy.exit("TP1_L", from_entry="AMD_Long", qty_percent=40, limit=tp1_price, stop=sl_price)
strategy.exit("TP2_L", from_entry="AMD_Long", qty_percent=30, limit=tp2_price, stop=sl_price)
strategy.exit("Trail_L", from_entry="AMD_Long", stop=sl_price, trail_points=ta.atr(14)*1.5, trail_offset=ta.atr(14)*0.5)
trades_today := trades_today + 1
manip_low_valid := false
if short_trigger
float sl_price = manip_ext_high
float tp1_price = accum_mid
float tp2_price = accum_low
strategy.entry("AMD_Short", strategy.short)
strategy.exit("TP1_S", from_entry="AMD_Short", qty_percent=40, limit=tp1_price, stop=sl_price)
strategy.exit("TP2_S", from_entry="AMD_Short", qty_percent=30, limit=tp2_price, stop=sl_price)
strategy.exit("Trail_S", from_entry="AMD_Short", stop=sl_price, trail_points=ta.atr(14)*1.5, trail_offset=ta.atr(14)*0.5)
trades_today := trades_today + 1
manip_high_valid := false
// --- VISUALIZATION / PLOTTING ---
plot(accum_high, "Asian Range High", color=color.new(color.red, 20), style=plot.style_linebr, linewidth=2)
plot(accum_low, "Asian Range Low", color=color.new(color.green, 20), style=plot.style_linebr, linewidth=2)
plot(accum_mid, "Asian Midpoint", color=color.new(color.gray, 40), style=plot.style_linebr, linewidth=1)
bg_color = in_accum ? color.new(color.blue, 92) : in_manip ? color.new(color.orange, 92) : na
bgcolor(bg_color, title="Phase Backgrounds")
plotshape(long_trigger, title="Long Entry Signal", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(short_trigger, title="Short Entry Signal", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
alertcondition(long_trigger, title="AMD Long Execution Alert", message="AMD Bullish Distribution Triggered on {{ticker}} at {{close}}")
alertcondition(short_trigger, title="AMD Short Execution Alert", message="AMD Bearish Distribution Triggered on {{ticker}} at {{close}}")
If price sweeps both boundaries during the Manipulation session (07:00-10:00 UTC), a state of high-volatility expansion or choppy uncommitted flow is flagged, and the setup is invalidated for the rest of the day.
Intraday manipulation patterns frequently morph into multi-day breakout trend pulses when trading counter to higher-timeframe order flow. Filtering entries strictly by the H4 EMA slope ensures manipulation is exploited as a discount/premium pullback rather than catching a falling knife.
Yes, but the accumulation and manipulation session hours must be recalibrated. For Crypto, the Asian open cycle applies (00:00 UTC), whereas for US Equities, the overnight globex range (00:00-09:30 EST) replaces the Asian phase, and the Opening Bell (09:30-10:30 EST) serves as the manipulation phase.
The core edge of the Power of 3 (AMD) Intraday Cycle Strategy model relies on the structural imbalance created when large market participants (commercial banks, liquidity providers, and central clearing desks) aggregate retail stop orders. Rather than anticipating trend continuation from arbitrary retail indicators, this systematic model identifies pre-existing liquidity pools—such as session highs/lows, Asian range extremes, or equal highs/lows (EQH/EQL)—where retail stop losses are heavily clustered.
Once a targeted liquidity sweep occurs and price aggressively rejects back inside the defined equilibrium range, an order flow displacement is confirmed through a Market Structure Break (MSB) or Change of Character (CHoCH). This sequence establishes asymmetric risk-to-reward parameters, allowing traders to enter with tight structural stops positioned outside the invalidated sweep candle.
Higher timeframe (H4/Daily) structural bias must always govern lower timeframe (M15/M5/M1) execution. Trading with the prevailing institutional order flow drastically reduces whipsaws during choppy session opens.
Always factor in spread expansion during high-impact news releases (CPI, NFP, FOMC) and daily 5:00 PM EST session rollover. Never enter within 15 minutes before Tier-1 macroeconomic events.
Move stop loss to break-even once price reaches 1.0R–1.5R target expansion or mitigates an opposing Fair Value Gap (FVG), neutralizing risk on active positions.
To successfully navigate proprietary trading evaluation stages without breaching maximum daily drawdown (typically 4%–5%) or maximum overall loss limits (8%–10%), this model must be deployed with disciplined position sizing:
On a $100,000 challenge account, limit single trade exposure to $500. This ensures you can survive a theoretical 6-trade drawdown streak while consuming less than 3% of your daily buffer.
If two consecutive setups trigger stop-loss invalidations within the same trading session, trading must be suspended for the remainder of that session to avoid revenge trading and emotional capital destruction.
Discretionary traders can execute this system manually using our pre-trade checklist above, while quantitative and algorithmic traders can deploy the Pine Script logic or connect directly to automated trading software:
Discover compiled MT4/MT5 Expert Advisors executing systematic order blocks around the clock.
Mirror institutional setups automatically into your MT4/MT5 broker account with zero latency.
Access 20+ verified institutional systems across Asian, London, and New York trading sessions.
Quant Note: Backtested on EURUSD, GBPUSD, and XAUUSD using institutional tick data. Simulated with 0.8 pip average spread on EURUSD, 1.2 pips on GBPUSD, and $0.20 on XAUUSD, plus $3.50 commission per round lot. Slippage modeled at 0.5 pip per fill on sweeps. Strict adherence to 1 trade per day per asset significantly suppressed maximum drawdown duration.
Download a clean, printer-friendly 1-page cheatsheet containing all entry/exit rules and the checklist for your trading desk.
Open Print / PDF ViewSubscribe to receive verified Pine Script algorithms, quantified backtests, and fresh pre-trade checklists directly to your inbox every week.
Download the complete quantitative guide: Position Sizing Formulas, Prop Firm Drawdown Rules, and MQL5 Parameter Cheat Sheets.