All-in-One SMC: CHOCH | BOS | FVG | OB | LiquidityThis script combines:
BOS (Break of Structure)
CHOCH (Change of Character)
Bullish & Bearish FVGs
Mitigation Order Blocks
Liquidity grabs (equal highs/lows)
Discount / Premium zones (relative to equilibrium)
Formacje wykresów
Sizing Coach HUD Long and Short This HUD is designed as a systematic execution layer to bridge the gap between technical analysis and mechanical risk management. Its primary purpose is to eliminate the "discretionary gap"—the moment where a trader’s "feeling" about volatility or spreads causes hesitation.
By using this tool, you are not just watching price; you are managing a business where Risk is a constant and Size is a variable.
Core Functionality: The Position Sizing Engine
The HUD automates the math of "Capital-Based Tiers". Instead of choosing an arbitrary share size, the system calculates your position based on three predefined levels of conviction:
Tier 1 (1% Notional): Low-confidence or high-volatility "tester" positions.
Tier 2 (3% Notional): Standard, high-probability setups.
Tier 3 (5% Notional): High-conviction trades where multiple timeframes and factors align.
Execution Workflow (The Poka-Yoke)
To use this HUD effectively and eliminate the "hesitation" identified in the Five Whys analysis, follow this workflow:
Toggle Direction: Set the HUD to Long or Short based on your setup (e.g., NEMA Continuation).
Define Invalidation: Identify your technical stop (default is High/Low of Day +/- 5%). The HUD will automatically calculate the distance to this level.
Check Risk $: Observe the Risk $ row. This tells you exactly how much you will lose in dollars if the stop is hit. If the volatility is extreme (like the NASDAQ:SNDK 14% plunge), the HUD will automatically shrink your Shares count to keep this dollar amount constant.
Execute via HUD: Transmit the order using the Shares provided in your selected Tier. Do not manually adjust the size based on "gut feeling".
Trade Management: The "R" Focus
The bottom half of the HUD displays your Targets (PnL / R).
VWAP & Fibonacci Levels: Automatically plots and calculates profit targets at key institutional levels (VWAP, 0.618, 0.786, 0.886).
Binary Exit Logic: The color-coded logic flags any target that yields less than 1R (Reward-to-Risk) as a warning.
Systematic Holding: Ride the trade to the targets or until your technical exit (e.g., 1M candle close above/below NEMA) is triggered, ignoring the fluctuating P&L.
TJR asia session sweep//@version=5
strategy("TJR asia session sweep", "TJR Asia Sweep", overlay=true, max_lines_count=500, max_labels_count=500)
// Input settings
show_asian = input.bool(true, "Show Asian Session", group="Visual Settings")
show_london = input.bool(true, "Show London Session", group="Visual Settings")
show_swing_points = input.bool(true, "Show Asian Swing Points", group="Visual Settings")
show_market_structure = input.bool(true, "Show Market Structure", group="Visual Settings")
show_bos = input.bool(true, "Show Break of Structure", group="Visual Settings")
// Session Time Settings
asian_start_hour_input = input.int(22, "Asian Session Start Hour", minval=0, maxval=23, group="Session Times")
asian_end_hour_input = input.int(3, "Asian Session End Hour", minval=0, maxval=23, group="Session Times")
london_start_hour_input = input.int(3, "London Session Start Hour", minval=0, maxval=23, group="Session Times")
london_end_hour_input = input.int(8, "London Session End Hour", minval=0, maxval=23, group="Session Times")
session_timezone = input.string("America/New_York", "Session Timezone", options= , group="Session Times")
// Risk Management Settings
use_atr_sl = input.bool(false, "Use ATR Multiplier for Stop Loss", group="Risk Management")
atr_length = input.int(14, "ATR Length", minval=1, maxval=50, group="Risk Management")
atr_multiplier = input.float(2.0, "ATR Multiplier for Stop Loss", minval=0.5, maxval=10.0, group="Risk Management")
force_london_close = input.bool(true, "Force Close at London Session End", group="Risk Management")
cutoff_minutes = input.int(60, "Minutes Before Session End to Stop New Trades", minval=0, maxval=300, group="Risk Management")
// Position Sizing Settings
position_sizing_method = input.string("USD Risk", "Position Sizing Method", options= , group="Position Sizing")
usd_risk_per_trade = input.float(100.0, "USD Risk Per Trade", minval=1.0, maxval=10000.0, group="Position Sizing")
fixed_contracts = input.float(1.0, "Fixed Number of Contracts", minval=0.01, maxval=1000.0, step=0.01, group="Position Sizing")
// Color settings
asian_color = input.color(color.red, "Asian Session Color")
london_color = input.color(color.blue, "London Session Color")
swing_high_color = input.color(color.orange, "Swing High Color")
swing_low_color = input.color(color.lime, "Swing Low Color")
bullish_structure_color = input.color(color.green, "Bullish Structure Color")
bearish_structure_color = input.color(color.red, "Bearish Structure Color")
bos_color = input.color(color.orange, "Break of Structure Color")
// Line settings
line_width = input.int(2, "Line Width", minval=1, maxval=5)
// ATR calculation for stop loss
atr = ta.atr(atr_length)
// Position size calculation function
calculate_position_size(entry_price, stop_loss_price) =>
var float position_size = na
if position_sizing_method == "Fixed Contracts"
position_size := fixed_contracts
else // USD Risk method
stop_distance = math.abs(entry_price - stop_loss_price)
if stop_distance > 0
// Calculate position size based on USD risk per trade
// For forex: position_size = risk_amount / (stop_distance * point_value)
// For most forex pairs, point value = 1 (since we're dealing with price differences directly)
position_size := usd_risk_per_trade / stop_distance
else
position_size := fixed_contracts // Fallback to fixed contracts if stop distance is 0
position_size
// Session time definitions (using input variables)
asian_start_hour = asian_start_hour_input
asian_end_hour = asian_end_hour_input
london_start_hour = london_start_hour_input
london_end_hour = london_end_hour_input
// Get current hour using selected timezone
current_hour = hour(time, session_timezone)
// Previous hour for transition detection
prev_hour = hour(time , session_timezone)
// Session transition detection
asian_start = current_hour == asian_start_hour and prev_hour != asian_start_hour
asian_end = current_hour == asian_end_hour and prev_hour != asian_end_hour
london_start = current_hour == london_start_hour and prev_hour != london_start_hour
london_end = current_hour == london_end_hour and prev_hour != london_end_hour
// Session activity detection
asian_active = (current_hour >= asian_start_hour) or (current_hour < asian_end_hour)
london_active = (current_hour >= london_start_hour) and (current_hour < london_end_hour)
// Session boxes - keep previous sessions visible
var box asian_session_box = na
var box london_session_box = na
// Create Asian session box
if show_asian and asian_start
// Create new box at session start (previous box remains visible)
asian_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=asian_color, bgcolor=color.new(asian_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate session highs and lows for consistency
asian_session_length = asian_active and not na(asian_session_box) ? bar_index - box.get_left(asian_session_box) + 1 : 1
current_asian_high = ta.highest(high, asian_session_length)
current_asian_low = ta.lowest(low, asian_session_length)
// Update Asian session box continuously during session
if show_asian and asian_active and not na(asian_session_box)
box.set_right(asian_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(asian_session_box, current_asian_high)
box.set_bottom(asian_session_box, current_asian_low)
// Create London session box
if show_london and london_start
// Create new box at session start (previous box remains visible)
london_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=london_color, bgcolor=color.new(london_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate London session highs and lows for consistency
london_session_length = london_active and not na(london_session_box) ? bar_index - box.get_left(london_session_box) + 1 : 1
current_london_high = ta.highest(high, london_session_length)
current_london_low = ta.lowest(low, london_session_length)
// Update London session box continuously during session
if show_london and london_active and not na(london_session_box)
box.set_right(london_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(london_session_box, current_london_high)
box.set_bottom(london_session_box, current_london_low)
// Asian Session Swing Points Detection
var float asian_session_high = na
var float asian_session_low = na
var int asian_high_bar = na
var int asian_low_bar = na
// Asian Session Absolute High/Low for TP levels
var float asian_absolute_high = na
var float asian_absolute_low = na
var line asian_high_line = na
var line asian_low_line = na
var label asian_high_label = na
var label asian_low_label = na
var bool high_broken = false
var bool low_broken = false
// London Session High/Low tracking for stop loss
var float london_session_high = na
var float london_session_low = na
// Market structure tracking variables
var string breakout_direction = na // "bullish" or "bearish"
var float last_hh_level = na // Last Higher High level
var float last_hl_level = na // Last Higher Low level
var float last_ll_level = na // Last Lower Low level
var float last_lh_level = na // Last Lower High level
var int structure_count = 0
var string last_structure_type = na // "HH", "HL", "LL", "LH"
// Legacy variables for compatibility
var float last_swing_high = na
var float last_swing_low = na
var int last_high_bar = na
var int last_low_bar = na
// Market structure state tracking
var float pending_high = na
var float pending_low = na
var int pending_high_bar = na
var int pending_low_bar = na
var bool waiting_for_confirmation = false
// Break of Structure tracking variables
var float most_recent_hl = na
var float most_recent_lh = na
var int most_recent_hl_bar = na
var int most_recent_lh_bar = na
var bool bos_detected = false
// Trading variables
var bool trade_taken = false
// Trade visualization boxes (based on Casper strategy approach)
var box current_profit_box = na
var box current_sl_box = na
// Update swing points during Asian session
if asian_active and show_swing_points
// Always track absolute high/low for both TP levels and breakout detection
if na(asian_absolute_high) or high > asian_absolute_high
asian_absolute_high := high
if na(asian_absolute_low) or low < asian_absolute_low
asian_absolute_low := low
// Use absolute high/low for breakout levels (simplified logic)
if na(asian_session_high) or high > asian_session_high
asian_session_high := high
asian_high_bar := bar_index
if na(asian_session_low) or low < asian_session_low
asian_session_low := low
asian_low_bar := bar_index
// Track London session high/low for stop loss levels
if london_active
if na(london_session_high) or high > london_session_high
london_session_high := high
if na(london_session_low) or low < london_session_low
london_session_low := low
// Draw initial lines when Asian session ends
if asian_end and show_swing_points
if not na(asian_session_high) and not na(asian_high_bar)
// Draw extending line for high
asian_high_line := line.new(asian_high_bar, asian_session_high, bar_index + 200, asian_session_high,
color=swing_high_color, width=2, style=line.style_dashed, extend=extend.right)
asian_high_label := label.new(bar_index + 5, asian_session_high, "Asian High: " + str.tostring(asian_session_high, "#.####"), style=label.style_label_left, color=swing_high_color, textcolor=color.white, size=size.small)
if not na(asian_session_low) and not na(asian_low_bar)
// Draw extending line for low
asian_low_line := line.new(asian_low_bar, asian_session_low, bar_index + 200, asian_session_low,
color=swing_low_color, width=2, style=line.style_dashed, extend=extend.right)
asian_low_label := label.new(bar_index + 5, asian_session_low, "Asian Low: " + str.tostring(asian_session_low, "#.####"), style=label.style_label_left, color=swing_low_color, textcolor=color.white, size=size.small)
// Reset break flags for new session
high_broken := false
low_broken := false
// Check for breakouts during London session
if london_active and show_swing_points and not na(asian_session_high) and not na(asian_session_low)
// Check if Asian high is broken
if not high_broken and not low_broken and high > asian_session_high
high_broken := true
// Update high line to end at break point
if not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
// Remove the low line (first break wins)
if not na(asian_low_line)
line.delete(asian_low_line)
if not na(asian_low_label)
label.delete(asian_low_label)
// Add break marker
label.new(bar_index, asian_session_high * 1.001, "HIGH BREAK!",
style=label.style_label_down, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bullish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_high_bar := bar_index
structure_count := 0
// Check if Asian low is broken
if not low_broken and not high_broken and low < asian_session_low
low_broken := true
// Update low line to end at break point
if not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Remove the high line (first break wins)
if not na(asian_high_line)
line.delete(asian_high_line)
if not na(asian_high_label)
label.delete(asian_high_label)
// Add break marker
label.new(bar_index, asian_session_low * 0.999, "LOW BREAK!",
style=label.style_label_up, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bearish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_low_bar := bar_index
structure_count := 0
// Stop extending lines when London session ends (if not already broken)
if london_end and show_swing_points
if not high_broken and not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
if not low_broken and not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Force close all trades at London session end (if enabled)
if london_end and force_london_close
if strategy.position_size != 0
// Extend boxes immediately before session close to prevent timing issues
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
strategy.close_all(comment="London Close")
trade_taken := false // Reset trade flag for next session
// Market structure detection after breakout (only during London session and before first BoS)
if show_market_structure and not na(breakout_direction) and london_active and not bos_detected
// Bullish structure tracking (HH, HL alternating)
if breakout_direction == "bullish"
// Check for Higher High pattern: Bullish candle followed by bearish candle
pattern_high = math.max(high , high)
prev_hh = na(last_hh_level) ? last_swing_high : last_hh_level
// HH Detection: Only if we expect HH next (no last structure or last was HL)
if (na(last_structure_type) or last_structure_type == "HL") and close > open and close < open and pattern_high > prev_hh and close > prev_hh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_hh = true
if is_too_close and structure_count > 0 and pattern_high <= last_hh_level
should_create_hh := false
if should_create_hh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "HH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hh_level := pattern_high
last_swing_high := pattern_high
last_high_bar := bar_index
last_structure_type := "HH"
// HL Detection: Only if we expect HL next (last was HH)
pattern_low = math.min(low , low)
prev_hl = na(last_hl_level) ? last_swing_low : last_hl_level
if last_structure_type == "HH" and close < open and close > open and pattern_low > prev_hl and close > prev_hl
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_hl = true
if is_too_close and pattern_low <= last_hl_level
should_create_hl := false
if should_create_hl
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "HL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hl_level := pattern_low
most_recent_hl := pattern_low // Update most recent HL for BoS detection
most_recent_hl_bar := bar_index - 1 // Store HL bar position
last_low_bar := bar_index
last_structure_type := "HL"
// Bearish structure tracking (LL, LH alternating)
if breakout_direction == "bearish"
// Check for Lower Low pattern: Bearish candle followed by bullish candle
pattern_low = math.min(low , low)
prev_ll = na(last_ll_level) ? last_swing_low : last_ll_level
// LL Detection: Only if we expect LL next (no last structure or last was LH)
if (na(last_structure_type) or last_structure_type == "LH") and close < open and close > open and pattern_low < prev_ll and close < prev_ll
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_ll = true
if is_too_close and structure_count > 0 and pattern_low >= last_ll_level
should_create_ll := false
if should_create_ll
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "LL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_ll_level := pattern_low
last_swing_low := pattern_low
last_low_bar := bar_index
last_structure_type := "LL"
// LH Detection: Only if we expect LH next (last was LL)
pattern_high = math.max(high , high)
prev_lh = na(last_lh_level) ? last_swing_high : last_lh_level
if last_structure_type == "LL" and close > open and close < open and pattern_high < prev_lh and close < prev_lh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_lh = true
if is_too_close and pattern_high >= last_lh_level
should_create_lh := false
if should_create_lh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "LH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_lh_level := pattern_high
most_recent_lh := pattern_high // Update most recent LH for BoS detection
most_recent_lh_bar := bar_index - 1 // Store LH bar position
last_high_bar := bar_index
last_structure_type := "LH"
// Check if we're within the cutoff period before London session end
current_minute = minute(time, session_timezone)
london_end_time_minutes = london_end_hour * 60 // Convert London end hour to minutes
current_time_minutes = current_hour * 60 + current_minute // Current time in minutes
// Calculate minutes remaining in London session
london_session_minutes_remaining = london_end_time_minutes - current_time_minutes
// Handle day rollover case (e.g., if london_end is 8:00 (480 min) and current is 23:30 (1410 min))
if london_session_minutes_remaining < 0
london_session_minutes_remaining := london_session_minutes_remaining + (24 * 60) // Add 24 hours in minutes
// Only allow trades if more than cutoff_minutes remaining in London session
allow_new_trades = london_session_minutes_remaining > cutoff_minutes
// Break of Structure (BoS) Detection and Trading Logic - Only first BoS per London session and outside cutoff period
if show_bos and london_active and show_market_structure and not bos_detected and not trade_taken and allow_new_trades
// Bullish BoS: Price closes below the most recent HL (after bullish breakout) - SELL SIGNAL
if breakout_direction == "bullish" and not na(most_recent_hl) and not na(most_recent_hl_bar)
// Check minimum distance requirement (at least 4 candles between BoS and HL)
if close < most_recent_hl and (bar_index - most_recent_hl_bar) >= 4
// Draw dotted line from HL position to BoS point
line.new(most_recent_hl_bar, most_recent_hl, bar_index, most_recent_hl,
color=bos_color, width=2, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_hl_bar + bar_index) / 2)
// Draw BoS label below the line for HL break
label.new(center_bar, most_recent_hl - (most_recent_hl * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// SELL ENTRY
if not na(london_session_high) and not na(asian_absolute_low)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close + (atr * atr_multiplier) : london_session_high
take_profit_level = asian_absolute_low
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("SELL", strategy.short, qty=position_size, comment="BoS Sell")
strategy.exit("SELL EXIT", "SELL", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=take_profit_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=stop_loss_level,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Bearish BoS: Price closes above the most recent LH (after bearish breakout) - BUY SIGNAL
if breakout_direction == "bearish" and not na(most_recent_lh) and not na(most_recent_lh_bar)
// Check minimum distance requirement (at least 4 candles between BoS and LH)
if close > most_recent_lh and (bar_index - most_recent_lh_bar) >= 4
// Draw dotted line from LH position to BoS point
line.new(most_recent_lh_bar, most_recent_lh, bar_index, most_recent_lh,
color=bos_color, width=1, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_lh_bar + bar_index) / 2)
// Draw BoS label above the line for LH break
label.new(center_bar, most_recent_lh + (most_recent_lh * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// BUY ENTRY
if not na(london_session_low) and not na(asian_absolute_high)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close - (atr * atr_multiplier) : london_session_low
take_profit_level = asian_absolute_high
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("BUY", strategy.long, qty=position_size, comment="BoS Buy")
strategy.exit("BUY EXIT", "BUY", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=take_profit_level,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=stop_loss_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Position close detection for extending boxes (based on Casper strategy)
if barstate.isconfirmed and strategy.position_size == 0 and strategy.position_size != 0
// Extend trade visualization boxes to exact exit point when position closes
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
// Backup safety check - extend boxes if position is closed but boxes still active
if not na(current_profit_box) and strategy.position_size == 0
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na
if not na(current_sl_box) and strategy.position_size == 0
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na
// Reset everything when new Asian session starts
if asian_start and show_swing_points
asian_session_high := na
asian_session_low := na
asian_high_bar := na
asian_low_bar := na
// Reset absolute levels
asian_absolute_high := na
asian_absolute_low := na
asian_high_line := na
asian_low_line := na
asian_high_label := na
asian_low_label := na
high_broken := false
low_broken := false
// Reset London session levels
london_session_high := na
london_session_low := na
// Reset market structure tracking
breakout_direction := na
last_hh_level := na
last_hl_level := na
last_ll_level := na
last_lh_level := na
last_swing_high := na
last_swing_low := na
last_high_bar := na
last_low_bar := na
structure_count := 0
last_structure_type := na
pending_high := na
pending_low := na
pending_high_bar := na
pending_low_bar := na
waiting_for_confirmation := false
// Reset BoS tracking
most_recent_hl := na
most_recent_lh := na
most_recent_hl_bar := na
most_recent_lh_bar := na
bos_detected := false
// Reset trading
trade_taken := false
// Reset current trade boxes
current_profit_box := na
current_sl_box := na
// Debug info (optional)
show_debug = input.bool(false, "Show Debug Info")
if show_debug
var table debug_table = table.new(position.top_right, 2, 3, bgcolor=color.white, border_width=1)
if barstate.islast
table.cell(debug_table, 0, 0, "Current Hour:", text_color=color.black)
table.cell(debug_table, 1, 0, str.tostring(current_hour), text_color=color.black)
table.cell(debug_table, 0, 1, "Asian Active:", text_color=color.black)
table.cell(debug_table, 1, 1, str.tostring((current_hour >= asian_start_hour) or (current_hour < asian_end_hour)), text_color=color.black)
table.cell(debug_table, 0, 2, "London Active:", text_color=color.black)
table.cell(debug_table, 1, 2, str.tostring((current_hour >= london_start_hour) and (current_hour < london_end_hour)), text_color=color.black)
Gold Buy/Sell with BoxesKey Features of This Update
Box-Style Labels: Instead of small icons, this uses label.new to create larger, text-based boxes that provide immediate confirmation ("GOLD BUY CONFIRMED").
Dynamic Positioning: Labels are automatically placed at the high or low of the signal bar to avoid cluttering the price candles.
Multi-Indicator Filter: Signals only trigger when both a Moving Average crossover occurs and momentum (RSI) is in the correct zone, reducing "noise" or false signals in sideways markets.
Alert Ready: You can set mobile or desktop notifications in TradingView by selecting these specific Buy/Sell conditions in the "Create Alert" menu.
Multi TF Volume ATRThis indicator measures volatility using ATR applied to volume across multiple timeframes. It helps identify when real momentum enters the market by showing volume spikes on 1h, 4h, 12h, and Daily charts. When several timeframes spike at the same time, it often signals strong moves, breakouts, or major shifts in volatility.
The script calculates Volume ATR for 1h, 4h, 12h, and 1D. Each timeframe generates its own spike condition. The indicator then checks for alignment between timeframes. The 1h histogram changes color based on the strength of the signal.
Red means multi timeframe alignment. This is the strongest signal and shows that several timeframes are spiking together.
Yellow means a 1h spike only. This is an early warning of local volatility.
Blue means no spike.
The indicator also plots higher timeframe ATR lines for context. These include 4h ATR, 12h ATR, and 1D ATR. When these lines rise together, volatility is building. Spike markers appear at the top of the pane when higher timeframes trigger.
You can choose how strict the alignment should be. Options include all three timeframes (1h, 4h, 12h), at least two timeframes, or including the daily timeframe for even stronger confirmation.
The script includes alert conditions for 1h spikes, multi timeframe alignment spikes, and daily spikes. These alerts help you stay ahead of volatility without watching charts constantly.
This indicator is useful for many trading styles. Breakout traders use red bars to confirm momentum. Mean reversion traders use daily spikes to confirm volatility conditions. Trend traders watch rising 4h and 12h ATR lines. Scalpers use yellow bars as early warnings.
Volume ATR shows how quickly volume is expanding. When several timeframes spike together, it often signals institutional activity, liquidity events, volatility shifts, breakouts, or reversals. This provides information that price alone cannot show.
BULLISH!! Low High Range Options HelperThis indicator is designed for range-based options trading, where price tends to rotate between a defined low and high rather than trend continuously. Its purpose is not to tell you what to trade, but to provide context for timing, specifically answering the question: if price is at a discount here, how much time should an option realistically have?
The script identifies a recent price range and plots three key levels. The range high represents the upper boundary of recent price action and often acts as a take-profit or resistance area. The range mid is the 50 percent equilibrium of the range and is intended as a confirmation level rather than an entry signal. The range low represents the discount zone, where risk is best defined for bullish options trades. This is the only area where options guidance is displayed.
When price touches the range low, the indicator calculates how long similar range rotations have taken in the past, adjusts that timing to the current chart timeframe, and applies a safety factor to reduce the risk of under-timing an options position. It then displays a suggested days-to-expiration label, such as 3 DTE, 4 DTE, 5 DTE, 6 DTE, 7 DTE, 10 DTE, or 14 plus. Shorter DTE values reflect faster expected rotations, while longer DTE values reflect slower, choppier, or more uncertain conditions. The goal is to help avoid the common mistake of buying options that do not have enough time to work.
A typical way to use this tool is to identify a clearly defined range, wait for price to reach the range low, note the DTE guidance shown on the chart, then wait for confirmation such as a reclaim of the range midpoint before considering a trade. Risk can then be managed with the range structure in mind, often targeting the range high in rotational environments. The indicator is most effective in sideways or mean-reverting markets rather than strong trends.
This script does not place trades, predict direction, or guarantee outcomes. It does not account for news events, earnings, implied volatility changes, or broader macro conditions. It is intended as a contextual tool to support disciplined decision-making, not as a standalone trading system.
Always trade smart. Manage position size, define risk before entering a trade, and avoid over-leveraging short-dated options. The objective is not to predict the market, but to consistently align price structure with realistic time expectations.
30d Rolling TWAP (Hourly)code:
//@version=5
indicator("30d Rolling TWAP (Hourly)", overlay=true)
// Calculation: (High + Low + Close) / 3
typicalPrice = hlc3
// 30 days * 24 hours = 720 bars
length = 720
twap30 = ta.sma(typicalPrice, length)
// Plotting
plot(twap30, color=color.new(#2962FF, 0), title="30d Hourly TWAP", linewidth=2)
// Optional: Background highlight
fillColor = close > twap30 ? color.new(color.green, 90) : color.new(color.red, 90)
bgcolor(fillColor)
SA Range Rank WMT DAY 1.13.2026 PM SESSIONDAILY — PREPARE / POSITION MODE
Developer Note: Bias & Position Framing
This daily view is preparatory, not executable.
The purpose of the Daily timeframe is to define directional bias, not entries.
It helps frame which side of the market deserves attention and which activity should be ignored.
The goal here is context, not action.
________________________________________
Purpose on Daily
The Daily timeframe is used to:
• Define directional bias for the week
• Prepare position-building zones
• Identify environments where participation is unnecessary or elevated-risk
• Reduce overtrading by narrowing focus
Daily charts answer one question only:
“If I participate this week, which side makes sense?”
________________________________________
What Matters Most (Public View)
SA Range Indicator (RI):
→ Is the market transitioning or trending?
→ Is energy building, releasing, or rotating?
SA ZoneEngine (visual context only):
→ Are daily moves aligned with higher-timeframe structure?
→ Is price operating with or against dominant bias?
These visuals explain environment, not decisions.
________________________________________
How to Interpret Public Daily Posts
• Daily is not timing
• Daily is not execution
• Daily is not a signal
Daily charts prepare the trader mentally and structurally by clarifying:
• what deserves patience
• what deserves caution
• what deserves no attention at all
________________________________________
Messaging Line
“Daily charts prepare the trade — they don’t execute it.”
________________________________________
SEO Intent
daily equity bias, position preparation, market structure analysis
________________________________________
🤝 For Those Who Find Value
If these daily posts help you see the market more clearly:
• Follow, boost, and share my scripts, Ideas, and MINDS posts
• Feel free to message me directly with questions or build requests
• Constructive feedback and collaboration are always welcome
For traders who want to go deeper, optional memberships may include:
• Additional signal access
• Early previews
• Occasional free tools and upgrades
🔗 Membership & Signals
trianchor.gumroad.com
________________________________________
________________________________________
⏱ 15-MIN — PREPARE / POSITION MODE
Developer Note: Setup Formation Phase
The 15-minute timeframe is where setups begin to form, not where they are acted on.
This view exists to separate developing structure from noise.
________________________________________
Purpose on 15-Minute
The 15-minute timeframe is used to:
• Spot trap-prone conditions
• Identify developing structure
• Observe compression, rotation, or early expansion
• Prepare for execution — without acting
This timeframe answers a different question:
“Is something forming — or is this noise?”
________________________________________
What Matters Most (Public View)
SA Range Indicator (RI):
→ Compression → expansion transitions
→ Energy buildup vs premature release
SA CloudRegimes (visual only):
→ Whether price behavior reflects continuation, pullback, or contraction
→ Whether movement is controlled or impulsive
These visuals describe behavior, not entries.
________________________________________
How to Interpret Public 15-Minute Posts
• 15m is setup formation
• 15m is environmental awareness
• 15m is not execution
Most errors occur when traders act before structure has finished forming.
This timeframe exists to slow that impulse down.
________________________________________
Messaging Line
“Preparation happens before the move — not during it.”
________________________________________
SEO Intent
15 minute futures setup, market preparation, stop hunt behavior
________________________________________
🤝 For Those Who Find Value
If these posts help you better recognize developing structure:
• Follow, boost, and share my scripts, Ideas, and MINDS posts
• Feel free to message me directly with questions or build requests
• Constructive feedback and collaboration are always welcome
For traders who want to go deeper, optional memberships may include:
• Additional signal access
• Early previews
• Occasional free tools and upgrades
🔗 Membership & Signals
trianchor.gumroad.com
Daily (D) — Swing Bias / “This is the side that has permission”
Goal: Define swing participation: are we in a supported trend or mean-revert risk?
How to use:
• Daily RECLAIM = “permission restored” after a shock move / trend resumption.
• Use it to decide:
Hold adds / reduce hedges / stop fighting direction.
Best use case:
• After earnings/news displacement days
• After large liquidation candles
• After a major gap day
Settings:
• dispMult 1.1–1.5
• reclaimWindow 12–25
• cooldown 6–12
🔵 DAILY — Swing Environment & Risk Framing
1️⃣ Range Indicator (RI)
• Compression → swing expansion likely
• Expansion → continuation or exhaustion
Use:
Tells you whether to expect patience or momentum.
________________________________________
2️⃣ ZoneEngine (Structure)
• Confirms whether daily swings align with higher bias
• Filters false daily breakouts
Use:
Only trust daily moves that occur inside structure.
________________________________________
3️⃣ Cloud / Reclaim (Behavior)
• Trend Clouds → continuation environment
• Pullback Clouds → reload or fade zones
• Reclaim shows acceptance back into value
Use:
Distinguishes real pullbacks from traps.
________________________________________
4️⃣ Stop-Hunt Proxy
• Clears weak swing participants
• Often precedes continuation when aligned
Use:
Stop-hunt + compression + trend cloud = swing continuation context.
SA Range Rank NQ 1.13.2026 PM SESSION15 MINUTE — PREPARE / POSITION MODE
Developer Note: Bias & Position Framing
This daily view is preparatory, not executable.
The purpose of the Daily timeframe is to define directional bias, not entries.
It helps frame which side of the market deserves attention and which activity should be ignored.
The goal here is context, not action.
________________________________________
Purpose on Daily
The Daily timeframe is used to:
• Define directional bias for the week
• Prepare position-building zones
• Identify environments where participation is unnecessary or elevated-risk
• Reduce overtrading by narrowing focus
Daily charts answer one question only:
“If I participate this week, which side makes sense?”
________________________________________
What Matters Most (Public View)
SA Range Indicator (RI):
→ Is the market transitioning or trending?
→ Is energy building, releasing, or rotating?
SA ZoneEngine (visual context only):
→ Are daily moves aligned with higher-timeframe structure?
→ Is price operating with or against dominant bias?
These visuals explain environment, not decisions.
________________________________________
How to Interpret Public Daily Posts
• Daily is not timing
• Daily is not execution
• Daily is not a signal
Daily charts prepare the trader mentally and structurally by clarifying:
• what deserves patience
• what deserves caution
• what deserves no attention at all
________________________________________
Messaging Line
“Daily charts prepare the trade — they don’t execute it.”
________________________________________
SEO Intent
daily equity bias, position preparation, market structure analysis
________________________________________
🤝 For Those Who Find Value
If these daily posts help you see the market more clearly:
• Follow, boost, and share my scripts, Ideas, and MINDS posts
• Feel free to message me directly with questions or build requests
• Constructive feedback and collaboration are always welcome
For traders who want to go deeper, optional memberships may include:
• Additional signal access
• Early previews
• Occasional free tools and upgrades
🔗 Membership & Signals
trianchor.gumroad.com
________________________________________
________________________________________
⏱ 15-MIN — PREPARE / POSITION MODE
Developer Note: Setup Formation Phase
The 15-minute timeframe is where setups begin to form, not where they are acted on.
This view exists to separate developing structure from noise.
________________________________________
Purpose on 15-Minute
The 15-minute timeframe is used to:
• Spot trap-prone conditions
• Identify developing structure
• Observe compression, rotation, or early expansion
• Prepare for execution — without acting
This timeframe answers a different question:
“Is something forming — or is this noise?”
________________________________________
What Matters Most (Public View)
SA Range Indicator (RI):
→ Compression → expansion transitions
→ Energy buildup vs premature release
SA CloudRegimes (visual only):
→ Whether price behavior reflects continuation, pullback, or contraction
→ Whether movement is controlled or impulsive
These visuals describe behavior, not entries.
________________________________________
How to Interpret Public 15-Minute Posts
• 15m is setup formation
• 15m is environmental awareness
• 15m is not execution
Most errors occur when traders act before structure has finished forming.
This timeframe exists to slow that impulse down.
________________________________________
Messaging Line
“Preparation happens before the move — not during it.”
________________________________________
________________________________________
🤝 For Those Who Find Value
If these posts help you better recognize developing structure:
• Follow, boost, and share my scripts, Ideas, and MINDS posts
• Feel free to message me directly with questions or build requests
• Constructive feedback and collaboration are always welcome
For traders who want to go deeper, optional memberships may include:
• Additional signal access
• Early previews
• Occasional free tools and upgrades
🔗 Membership & Signals
trianchor.gumroad.com
15 Minute (15m) — Tactical Entry Alignment / “Permission + Timing”
Goal: Convert higher-timeframe permission into tradable timing.
How to use:
• Trade the first clean reclaim after a pullback.
• Avoid taking a reclaim if price is already extended far beyond the wake edge (late reclaim).
Best conditions:
• Works extremely well when:
o 1H agrees
o session structure is active (open/close windows)
o reclaim occurs near VWAP or a key level you already respect
Settings:
• dispMult 0.75–1.05
• reclaimWindow 6–14
• cooldown 3–6
🟠 15-MINUTE — Intraday Structure & Session Logic
1️⃣ Range Indicator (RI)
• Session compression → impulse likely
• Expansion → follow, don’t fade
Use:
Defines session behavior.
________________________________________
2️⃣ ZoneEngine (Structure)
• Filters session traps
• Explains failed breakouts
Use:
Keeps you aligned with real participation.
________________________________________
3️⃣ Cloud / Reclaim (Behavior)
• Identifies pullback vs continuation
• Reclaim confirms acceptance
Use:
Contextual confirmation.
________________________________________
4️⃣ Stop-Hunt Proxy
• Session liquidity sweeps
• Common near opens and transitions
Use:
Stop-hunt + compression = likely session impulse.
Google Trends: Keyword "Altcoin" (Cryptollica)Google Trends: Keyword "Altcoin"
2013-2026 Google Trend
CRYPTOLLICA
ICT 1st Pres. FVGs & RTH Open Gaps version 13/01/2026
ICT 1st Pres. FVGs & RTH Open Gaps
By Timo Haapsaari (@hqtimppa) based on ICT (Inner Circle Trader / Michael J.
Huddleston) teachings.
This indicator identifies and displays:
• First Presented Fair Value Gaps (FVGs) after Midnight Open (00:00 NY)
• First Presented FVGs after NY Open (09:30 NY)
• Regular Trading Hours (RTH) Opening Gaps (16:14 close vs 09:30 open)
All detections are based on 1-minute data for accuracy across any timeframe.
Special thanks to cephxs (https:x.com/dyk_ceph) for inspiration on settings
structure and visual appearance.
Happy trading! 📈
eBacktesting - Learning: PD ArrayseBacktesting - Learning: PD Arrays helps you practice one of the most important “Smart Money” ideas: price tends to react from specific delivery areas (PD Arrays) like Imbalances (FVGs), Order Blocks, and Breakers.
Use this to train your eyes to:
- Spot where an imbalance/OB is created (often after displacement)
- Wait for price to return into that area
- Study the reaction (hold, reject, or slice through) and what that implies next
These indicators are built to pair perfectly with the eBacktesting extension, where traders can practice these concepts step-by-step. Backtesting concepts visually like this is one of the fastest ways to learn, build confidence, and improve trading performance.
Educational use only. Not financial advice.
Daily Upside LinePlots an intraday upside line.
Uses proprietary breakout score logic to show when intraday setups are ripe for continuation.
Finds the average of these lines to plot the upside line
Heikin Ashi Swing Setup DailyTFHeikin Ashi Swing Setup is a trend-following swing trading indicator designed for Daily timeframe traders.
This indicator combines:
Heikin Ashi candle strength
EMA-based trend confirmation
RSI momentum filter
ATR-based price expansion logic
The goal is to capture strong directional swing moves while avoiding sideways and noisy markets.
BUY Signal Logic
Strong bullish Heikin Ashi candle (no lower wick)
Price above EMA 50
EMA slope upward (trend confirmation)
RSI between 50–70
Price sufficiently away from EMA (ATR filter)
SELL Signal Logic
Strong bearish Heikin Ashi candle (no upper wick)
Price below EMA 50
EMA slope downward
RSI between 30–50
ATR-based price expansion confirmed
Recommended Usage
Timeframe: Daily
Markets: Stocks & Indices
Holding Period: 5–20 trading days
Best used with:
Weekly trend analysis
Supply & Demand zones
Previous swing highs/lows
MES ORB Fakeout Alert - No RSIVWAP Integration: In 2025/2026 trading, price action often "reverses" to the VWAP. If the MES breaks the ORB High but stays below the VWAP, it’s a high-probability fakeout. This script catches that.
Relative Volume (Effort vs. Result): Instead of RSI, it looks at the Volume SMA. If the market tries to break a level with less volume than the 20-candle average, the "effort" isn't there, and the "result" (the breakout) is likely a lie.
Automatic Session Handling: It specifically looks at America/New_York time to ensure the 9:30 AM open is captured correctly regardless of where you are located.
QUARTERS THEORY XAUUSDThe “Quarter Theory XAUUSD” indicator on TradingView is designed to automatically plot horizontal price levels in $25 increments on your chart, providing traders with a clear visual representation of key psychological and technical price points. These levels are particularly useful for instruments like XAU/USD, where price often reacts to round numbers, forming support and resistance zones that can be leveraged for both scalping and swing trading strategies. By showing all $25 increments as horizontal white lines, the indicator ensures that traders can quickly identify potential entry and exit points, without the need for manual drawing or repeated calculations.
The indicator works by calculating the nearest $25 multiple relative to the current market price and then drawing horizontal lines across the chart for all increments within a defined range. This range can be customized to suit the instrument being traded; for example, for gold (XAU/USD), a typical range might extend from 0 to 5000, covering all practical price levels that could be relevant in both high and low market conditions. By using Pine Script’s persistent variables, the indicator efficiently creates these lines only once at the start of the chart, avoiding unnecessary resource usage and preventing TradingView from slowing down, which can happen if lines are redrawn every bar.
From a trading perspective, these levels serve multiple purposes. For scalpers, the $25 increments act as micro support and resistance points, helping to determine short-term price reactions and potential breakout zones. Scalpers can use these levels to enter positions with tight stop-loss orders just beyond a level and take profits near the next $25 increment, which aligns with common price behavior patterns in highly liquid instruments. For swing traders, the same levels provide broader context, allowing them to identify areas where price might pause or reverse over several days. Swing traders can use these levels to align trades with the prevailing trend, particularly when combined with other indicators such as moving averages or trendlines.
Another key advantage of the Quarterly Levels indicator is its simplicity and visual clarity. By plotting lines in a uniform white color and extending them to the right, the chart remains clean and easy to read, allowing traders to focus on price action and market dynamics rather than cluttered technical drawings. This visual consistency also helps in backtesting and strategy development, as traders can quickly see how price interacts with each level over time. Additionally, the use of round-number increments leverages the psychological tendencies of market participants, as many traders place stop orders or entry points near these levels, making them natural zones of interest.
Overall, the Quarterly Levels indicator combines efficiency, clarity, and practical trading utility into a single tool. It streamlines chart analysis, highlights meaningful price zones, and supports both scalping and swing trading approaches, making it an essential addition to a trader’s toolkit. By understanding how to integrate these levels into trading strategies, traders can make more informed decisions, manage risk effectively, and identify high-probability trade setups across various market conditions.
EMA and DEMA CrossesCombined crosses for EMA and Double EMA
Gives Buy and Sell signals basis all 3 conditions
Supply & Demand Sniper369Indicator Philosophy: The Convergence of Structure and Liquidity
The Supply & Demand Sniper369 is not just another signal generator; it is a professional-grade execution framework built on the principles of Institutional Order Flow and Liquidity Engineering. While standard indicators often lag or provide signals in "no-man's land," this script is designed to identify high-probability reversal points by combining macro-structural zones with micro-execution triggers.
What Makes This Script Original?
Most scripts treat Supply/Demand and Entry Triggers as separate entities. The originality of the Sniper369 lies in its Strict Hierarchical Logic. It employs a "Two-Factor Authentication" system for trades:
1. Structural Validation: Identifying where "Smart Money" has historically left unfilled orders.
2. Liquidity Sweep Confirmation: Using the Enigma 369 logic to detect a specific manipulation pattern (a stop-run or "sweep") that occurs exclusively within those structural zones.
By using Pine Script v6 Object-Oriented Programming, the script manages dynamic arrays of boxes and lines that auto-delete upon mitigation, ensuring your chart remains a clean, actionable workspace.
Underlying Concepts & Calculations
1. Macro: Structural Supply & Demand
The indicator calculates zones based on Pivot Strength and Volatility Scaling.
Calculations: It scans for major structural pivots ( and ). Once a pivot is confirmed, it doesn't just draw a line; it calculates a zone width based on the Average True Range (ATR).
Why it works: Institutions do not enter at a single price; they enter in "pockets" of liquidity. Using ATR-based zones ensures that on high-volatility pairs (like Gold or GBP/JPY), your zones are appropriately wide, while on lower-volatility pairs, they remain tight and precise.
2. Micro: The Enigma 369 Sniper Logic
Once price enters a zone, the "Sniper" logic activates. This is based on the Institutional Wick-Liquidity concept.
The Sweep: The script looks for a candle that breaks the high/low of the previous candle (trapping "breakout" traders) but fails to hold that level.
The Mean Threshold (50% Wick): A core calculation of the Enigma logic is the midpoint of the rejection wick.
Calculation: for Sells.
Logic: Institutions often re-test the 50% level of a long wick to fill the remaining orders before the real move starts.
How to Use the Indicator
Step 1: Wait for Structural Alignment
Observe the Teal (Demand) and Red (Supply) boxes. These are your "Points of Interest" (POI). Do not take any trades until the price is physically touching or inside these boxes.
Step 2: Monitor for the Sniper Trigger
When the price is inside a zone, look for the appearance of the Solid and Dotted lines.
The Solid Line: This is the extreme of the manipulation candle. It serves as your structural invalidation level (Stop Loss).
The Dotted Line: This is the 50% Wick level. It is your "Sniper Entry" target.
Step 3: Execution & Alerts
The script features a built-in alert system that notifies you the moment a Sniper activation occurs inside a zone.
Conservative Entry: Place a Limit Order at the Dotted Line.
Aggressive Entry: Market enter on the close of the Sniper candle if the price has already reacted strongly.
Exit: Target the opposing Supply or Demand zone for a high Risk-to-Reward ratio.
Technical Summary for Traders
Trend Detection: Uses an EMA-50 Filter to ensure Snipers only fire in the direction of the dominant trend (optional).
Scalping/Day Trading: Optimized for the 1m, 5m, and 15m timeframes, but functions perfectly on 4H/Daily for swing traders.
Dynamic Cleanup: The script automatically deletes lines if the price closes past them, signaling that the "Liquidity Grab" was actually a breakout, thus preventing you from entering a losing trade.
Breaker Blocks Finder | Gold | ProjectSyndicateProjectSyndicate Breaker Blocks Finder
📊 Overview
The ProjectSyndicate Breaker Blocks Finder (PS BB Finder) is a professional-grade Pine Script indicator designed to detect and display Bullish and Bearish Breaker Blocks based on Smart Money Concepts (SMC) methodology. This indicator is specifically optimized for XAUUSD (Gold) trading but works reliably across all symbols and timeframes.
Key Features
✅ Non-Repainting: Breaker blocks never change position after formation
✅ Multi-Timeframe Support: Optimized for M5, M10, M15, M20, M30, and H1
✅ Highly Customizable: 10+ user-configurable settings
✅ Visual Clarity: Color-coded boxes and labels for easy identification
✅ Performance Optimized: Handles 1000+ candles without lag
✅ Cross-Symbol Compatible: Works on Forex, Crypto, Stocks, Indices, and Commodities
✅ Displacement Detection: Uses ATR-based displacement to filter false signals
🎯 What are Breaker Blocks?
A Breaker Block is a failed order block that becomes a new support or resistance zone after being invalidated by price. It represents a market structure shift where institutional traders (smart money) have flipped their position.
Bullish Breaker Block
A Bullish Breaker Block forms when:
1 A bearish order block (resistance zone) exists
2 Price breaks ABOVE this zone with strong displacement
3 The former resistance zone now becomes SUPPORT
4 Price may retest this zone before continuing higher
Visual: Green box with "BB ▲" label
Bearish Breaker Block
A Bearish Breaker Block forms when:
5 A bullish order block (support zone) exists
6 Price breaks BELOW this zone with strong displacement
7 The former support zone now becomes RESISTANCE
8 Price may retest this zone before continuing lower
Visual: Red box with "BB ▼" label
⚙️ Default Settings
Setting Default Range Description
Lookback Period 1000 100-5000 Number of historical candles to analyze
Max Breaker Blocks 5 1-50 Maximum number of breaker blocks to display
Swing Detection Length 10 2-20 Bars on each side to confirm swing high/low. Higher = more significant swings
Use Displacement Filter true true/false Enable to filter breaker blocks by displacement size
Displacement Multiplier 2.0 0.5-5.0 Minimum move size as multiple of ATR. Higher = stricter detection
Invalidation Method Close Close/Wick Close = Conservative (candle must close beyond zone)Wick = Aggressive (wick touch is enough)
📈 Recommended Timeframes & Settings
This indicator is optimized for the following timeframes. Use these settings as a starting point.
Lower Timeframes (M5, M10, M15, M20)
These settings are designed to capture faster price movements and are the default settings for the indicator.
Setting Recommended Value
Lookback Period 1000
Max Breaker Blocks 5
Swing Detection Length 10
Use Displacement Filter true
Displacement Multiplier 2.0
Invalidation Method Close
Higher Timeframes (M30, H1)
For these timeframes, a less strict displacement filter is recommended to capture more significant, but less frequent, breaker blocks.
Setting Recommended Value
Lookback Period 1000
Max Breaker Blocks 5
Swing Detection Length 10
Use Displacement Filter true
Displacement Multiplier 1.0
Invalidation Method Close
🎓 How to Use
Step 1: Identify Breaker Blocks
Once the indicator is loaded, breaker blocks will automatically appear on your chart:
• Green boxes = Bullish breaker blocks (former resistance, now support)
• Red boxes = Bearish breaker blocks (former support, now resistance)
Step 2: Wait for Retest
The most reliable trading opportunities occur when price retests the breaker block zone:
• For bullish breaker blocks, wait for price to come back down to the green zone
• For bearish breaker blocks, wait for price to come back up to the red zone
Step 3: Look for Confluence
Combine breaker blocks with other SMC concepts for higher probability setups:
• Fair Value Gaps (FVG) within the breaker block zone
• Liquidity grabs before the retest
• Break of Structure (BoS) or Change of Character (ChoCH) confirmation
Step 4: Enter the Trade
Bullish Setup:
• Entry: At or near the bullish breaker block zone
• Stop Loss: Below the breaker block
• Take Profit: Previous swing high or higher
Bearish Setup:
• Entry: At or near the bearish breaker block zone
• Stop Loss: Above the breaker block
• Take Profit: Previous swing low or lower
🛡️ Non-Repainting Guarantee
This indicator is 100% non-repainting, meaning:
✅ Breaker blocks never change position after formation
✅ Historical breaker blocks remain in the exact same location indefinitely
✅ Backtesting results are reliable and consistent
🐛 Troubleshooting
Issue: No Breaker Blocks Appearing
Solutions:
• Ensure "Use Displacement Filter" is enabled.
• On M30/H1, try lowering the "Displacement Multiplier" to 1.0.
• Scroll back in history; blocks may not be present on the most recent bars.
Issue: Too Many Breaker Blocks
Solutions:
• Increase "Displacement Multiplier" to 2.5 or 3.0.
• Increase "Swing Detection Length" to 12-15.
• Decrease "Max Breaker Blocks" to 3-4.
Long + Short + Signal//@version=6
indicator("Long + Short + Signal", overlay=true)
Buy = input.bool(false, "Buy ")
Sell = input.bool(false, "Sell ")
// ================= INPUTS =================
// ---- LONG ----
periodK_Long = 50
smoothK_Long = 3
periodD_Long = 3
// ---- SHORT ----
periodK_Short = 14
smoothK_Short = 3
periodD_Short = 3
// ================= FUNCTIONS =================
f_stoch_long(tf) =>
k = request.security(syminfo.tickerid, tf,
ta.sma(ta.stoch(close, high, low, periodK_Long), smoothK_Long))
d = request.security(syminfo.tickerid, tf,
ta.sma(k, periodD_Long))
k > 50 and d > 50 ? color.green : k < 40 and d < 40 ? color.red : color.gray
f_stoch_short(tf) =>
k = request.security(syminfo.tickerid, tf,
ta.sma(ta.stoch(close, high, low, periodK_Short), smoothK_Short))
d = request.security(syminfo.tickerid, tf,
ta.sma(k, periodD_Short))
k > 60 and d > 60 ? color.green : k < 40 and d < 40 ? color.red : color.gray
// ================= TABLE =================
// 2 rows × 8 columns
var table t = table.new(position.top_right, 8, 2, border_width=3)
if barstate.islast
// ===== HEADINGS (BIGGER) =====
table.cell(
t, 0, 0, "Short",
bgcolor=color.black,
text_color=color.white,
text_size=size.large,
text_halign=text.align_center
)
table.cell(
t, 0, 1, "Long",
bgcolor=color.black,
text_color=color.white,
text_size=size.large,
text_halign=text.align_center
)
// ===== LONG ROW =====
table.cell(t, 1, 0, "1m", bgcolor=f_stoch_short("1"), text_color=color.white, text_size=size.normal)
table.cell(t, 2, 0, "5m", bgcolor=f_stoch_short("5"), text_color=color.white, text_size=size.normal)
table.cell(t, 3, 0, "15m", bgcolor=f_stoch_short("15"), text_color=color.white, text_size=size.normal)
table.cell(t, 4, 0, "60m", bgcolor=f_stoch_short("60"), text_color=color.white, text_size=size.normal)
table.cell(t, 5, 0, "D", bgcolor=f_stoch_short("D"), text_color=color.white, text_size=size.normal)
table.cell(t, 6, 0, "W", bgcolor=f_stoch_short("W"), text_color=color.white, text_size=size.normal)
table.cell(t, 7, 0, "M", bgcolor=f_stoch_short("M"), text_color=color.white, text_size=size.normal)
// ===== SHORT ROW =====
table.cell(t, 1, 1, "1m", bgcolor=f_stoch_long("1"), text_color=color.white, text_size=size.normal)
table.cell(t, 2, 1, "5m", bgcolor=f_stoch_long("5"), text_color=color.white, text_size=size.normal)
table.cell(t, 3, 1, "15m", bgcolor=f_stoch_long("15"), text_color=color.white, text_size=size.normal)
table.cell(t, 4, 1, "60m", bgcolor=f_stoch_long("60"), text_color=color.white, text_size=size.normal)
table.cell(t, 5, 1, "D", bgcolor=f_stoch_long("D"), text_color=color.white, text_size=size.normal)
table.cell(t, 6, 1, "W", bgcolor=f_stoch_long("W"), text_color=color.white, text_size=size.normal)
table.cell(t, 7, 1, "M", bgcolor=f_stoch_long("M"), text_color=color.white, text_size=size.normal)
lengthK = 14
lengthD = 3
lengthEMA = 3
emaEma(source, length) => ta.ema(ta.ema(source, length), length)
highestHigh = ta.highest(lengthK)
lowestLow = ta.lowest(lengthK)
highestLowestRange = highestHigh - lowestLow
relativeRange = close - (highestHigh + lowestLow) / 2
smi = 200 * (emaEma(relativeRange, lengthD) / emaEma(highestLowestRange, lengthD))
// ===== BUY / SELL CONDITIONS =====
buyEntry = ta.crossover(smi, 50)
buyExit = ta.crossunder(smi, 50)
sellEntry = ta.crossunder(smi, -40)
sellExit = ta.crossover(smi, -40)
// ===== PLOTS =====
plotshape( Buy and buyEntry, title="BUY", style=shape.triangleup,location=location.belowbar, color=color.green,size=size.small, text="BUY")
plotshape( Buy and buyExit, title="EXIT BUY", style=shape.triangledown, location=location.abovebar, color=color.lime,size=size.tiny, text="EXIT")
plotshape( Sell and sellEntry,title="SELL", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, text="SELL")
plotshape( Sell and sellExit, title="EXIT SELL", style=shape.triangleup, location=location.belowbar, color=color.orange, size=size.tiny, text="EXIT")
shortest = ta.ema(close, 9)
shortEMA = ta.ema(close, 21)
longer = ta.ema(close, 50)
longest = ta.ema(close, 200)
plot(shortest, color=color.red, title="EMA 9")
plot(shortEMA, color=color.orange, title="EMA 21")
plot(longer, color=color.aqua, title="EMA 50")
plot(longest, color=color.blue, title="EMA 200")
First Candle Session Levels. Sessions custom timeframes settingsFirst Candle Rule – Scalping Itinerary
Chart Setup
Use two charts at the same time: the five-minute chart and the one-minute chart. This double-chart approach allows you to define structure on the higher timeframe and execute with precision on the lower timeframe.
The First Candle
Focus on the first five-minute candle of the session. Once this candle has fully closed, mark its high and its low. These two price levels form the operating range for the setup.
Execution Phase
After the range is marked, wait for price to return into or react around the first candle range. Execution is carried out on the one-minute chart, using price reaction at the high or low of the first five-minute candle.
Conceptual Framework
This method is built around Smart Money Concepts and Inner Circle Trader principles. It aligns closely with first candle theory and candle range theory. If you understand ICT concepts, the logic behind this setup will be immediately familiar.
Strategy Type
This is a scalping system designed to be simple, repeatable, and effective on a daily basis. It is not about prediction, but about reacting to price within a clearly defined range.
Learning Path
To fully understand the background of this approach, study first candle theory and related ICT material on YouTube. This will help you see how and why the setup works across different market conditions.
Final Purpose
This algorithm was built to be accessible to everyone. The objective is consistency, discipline, and structure, with the long-term goal of helping traders work toward financial freedom through a clear and repeatable process.
Crypto Camp Day Key LevelsDaily key levels Daily key levels Daily key levels Daily key levels Daily key levels Daily key levels
Range Marker by Vinay SinghThis indicator marks back and forth range on given timeframes. good indicator to test range breakout.






















