Price Power for Binary Option (BO) by MrTuanDoanIdea was developed from Price's Power (inno14).
This indicator is only used for Binary Option (BO).
Rules for Signal Candle:
- Close to Bollinger's Band
- Price Power is losing its strength (compare with previous powers)
- Price Power is about crossing down/up middle line
- DMI Extension show SELL signal
How to enter:
- Enter the next candle.
- Expiration: the length of current time frame.
- Rollover once if needed
Note:
- Always use it as an extra confirmations from your setup
- Always use it with risk management
Good luck and happy trading.
Search in scripts for "BOS"
BOS/CHoCH Impulsive Move Detector #12Updated exit logic to measure at candle close vs candle wicks. Added session PnL/hr and implemented a FAST identifier that tracks impulse moves >= 10% <=3 hrs.
BOS INDICATOR )Good for breaking structures. tells you where a break in structure occurs by outlining the break in structure in a red or green candle
BO - Bar M15 Signal* This script show the signal base on volatility of previous bar M15 to trade Binary Option.
* Rule of Signal is below:
A. Rule 1: Wait for prices created temporary peak and bottom
Row 18: 10 minutes till close
B. Rule 2: Reversal previous bar's direction
1. Put Signal - Row 22 - 25:
- Delay 5' after bar M15 open
- previous bar's direction is upward
- price less than previous close
- temporary bottom greater than previous open
2. Call Signal - Row 29 - 32:
- Delay 5' after bar M15 open
- previous bar's direction is downward
- price greater than previous close
- temporary peak less than previous open
C. Rule 3: Follow previous bar's direction
1. Put Signal - Row 37 - 40:
- Delay 5' after bar M15 open
- previous bar's direction is downward
- price greater than previous open
- temporary peak less than previous peak
2. Call Signal - Row 43 - 46:
- Delay 5' after bar M15 open
- previous bar's direction is upward
- price less than previous open
- temporary bottom greater than previous bottom
BO ADX Binary Option strategy based on ADX/DI cross, Put or Call at the beginning of the next candle, expire 5m for 5m candle.
BO Swing Finder R0.6 by JustUncleLThis indicator alert study attempts to detect confirmed Swing points. It uses Bollinger Band centre line crosses as the main signal. The main detection occurs by looking for the first BB centre line cross that was initiated from outside the Bollinger Channel (alternatively KC channel can be used).
The optional HullMA (any any other MA pair) are used to confirm the swing direction. The indicator also plots the two KitKat Support and Resistance lines with optional High/Low labelling on KitKat1 lines.
This indicator tool is suitable for any time frame and can be traded with Binary Option (even 1min) orders (2-3 candle expiry) or as Forex trade orders. It is suitable for Currencies, Cryptocurrencies and Metals. May also be useful on other markets as well.
The MA filtering options, each MA line can be a different type, with an optional offset:
SMA = Simple Moving Average.
EMA = Exponential Moving Average.
WMA = Weighted Moving Average
VWMA = Volume Weighted Moving Average
SMMA = Smoothed Simple Moving Average.
DEMA = Double Exponential Moving Average
TEMA = Triple Exponential Moving Average.
HullMA = Hull Moving Average, fast moving MA.
SSMA = Ehlers Super Smoother Moving average, similar results to HullMA.
ZEMA = Near Zero Lag Exponential Moving Average.
TMA = Triangular (smoothed) Simple Moving Average.
NOTE: The signal calculations do occur on the current candle, so the state of the signal may re-build until the current candle is closed. I have designed the script to behave this way on purpose. This gives traders the option of
preparing their trade early or even taking the trade early if they want. Otherwise the trader can be more conservative and wait for signal candle to close, to give them a confirmed signal. (This is NOT re-painting as the historical signal states are fixed and will not change, unless you change some setup options.)
Hints:
1) As with all indicator and alerting tools, not all signals will yield a tradable successful swing. You need to apply you own analysis on each signal to determine the probability of success.
2) When using the MA to filter the signals you should use it for two types of filtering:
Supportive that confirm swing like fast moving MAs with fairly short lengths, eg HullMA(21,25).
Long Term Direction with smoother longer length MAs like SMMA(180,220) to show up swings back into direction of the longer term trends.
Inspiration: @Lyiness
References:
Momentum VMA KITKAT CROSS v2.1 by vdubus (- Vdubus_Channel www.vdubus.co.uk)
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)
SMC Structures and FVGสวัสดีครับ! ผมจะอธิบายอินดิเคเตอร์ "SMC Structures and FVG + MACD" ที่คุณให้มาอย่างละเอียดในแต่ละส่วน เพื่อให้คุณเข้าใจการทำงานของมันอย่างถ่องแท้ครับ
อินดิเคเตอร์นี้เป็นการผสมผสานแนวคิดของ Smart Money Concept (SMC) ซึ่งเน้นการวิเคราะห์โครงสร้างตลาด (Market Structure) และ Fair Value Gap (FVG) เข้ากับอินดิเคเตอร์ MACD เพื่อใช้เป็นตัวกรองหรือตัวยืนยันสัญญาณ Choch/BoS (Change of Character / Break of Structure)
1. ภาพรวมอินดิเคเตอร์ (Overall Purpose)
อินดิเคเตอร์นี้มีจุดประสงค์หลักคือ:
ระบุโครงสร้างตลาด: ตีเส้นและป้ายกำกับ Choch (Change of Character) และ BoS (Break of Structure) บนกราฟโดยอัตโนมัติ
ผสานการยืนยันด้วย MACD: สัญญาณ Choch/BoS จะถูกพิจารณาก็ต่อเมื่อ MACD Histogram เกิดการตัดขึ้นหรือลง (Zero Cross) ในทิศทางที่สอดคล้องกัน
แสดง Fair Value Gap (FVG): หากเปิดใช้งาน จะมีการตีกล่อง FVG บนกราฟ
แสดงระดับ Fibonacci: คำนวณและแสดงระดับ Fibonacci ที่สำคัญตามโครงสร้างตลาดปัจจุบัน
ปรับตาม Timeframe: การคำนวณและการแสดงผลทั้งหมดจะปรับตาม Timeframe ที่คุณกำลังใช้งานอยู่โดยอัตโนมัติ
2. ส่วนประกอบหลักของโค้ด (Code Breakdown)
โค้ดนี้สามารถแบ่งออกเป็นส่วนหลัก ๆ ได้ดังนี้:
2.1 Inputs (การตั้งค่า)
ส่วนนี้คือตัวแปรที่คุณสามารถปรับแต่งได้ในหน้าต่างการตั้งค่าของอินดิเคเตอร์ (คลิกที่รูปฟันเฟืองข้างชื่ออินดิเคเตอร์บนกราฟ)
MACD Settings (ตั้งค่า MACD):
fast_len: ความยาวของ Fast EMA สำหรับ MACD (ค่าเริ่มต้น 12)
slow_len: ความยาวของ Slow EMA สำหรับ MACD (ค่าเริ่มต้น 26)
signal_len: ความยาวของ Signal Line สำหรับ MACD (ค่าเริ่มต้น 9)
= ta.macd(close, fast_len, slow_len, signal_len): คำนวณค่า MACD Line, Signal Line และ Histogram โดยใช้ราคาปิด (close) และค่าความยาวที่กำหนด
is_bullish_macd_cross: ตรวจสอบว่า MACD Histogram ตัดขึ้นเหนือเส้น 0 (จากค่าลบเป็นบวก)
is_bearish_macd_cross: ตรวจสอบว่า MACD Histogram ตัดลงใต้เส้น 0 (จากค่าบวกเป็นลบ)
Fear Value Gap (FVG) Settings:
isFvgToShow: (Boolean) เปิด/ปิดการแสดง FVG บนกราฟ
bullishFvgColor: สีสำหรับ Bullish FVG
bearishFvgColor: สีสำหรับ Bearish FVG
mitigatedFvgColor: สีสำหรับ FVG ที่ถูก Mitigate (ลดทอน) แล้ว
fvgHistoryNbr: จำนวน FVG ย้อนหลังที่จะแสดง
isMitigatedFvgToReduce: (Boolean) เปิด/ปิดการลดขนาด FVG เมื่อถูก Mitigate
Structures (โครงสร้างตลาด) Settings:
isStructBodyCandleBreak: (Boolean) หากเป็น true การ Break จะต้องเกิดขึ้นด้วย เนื้อเทียน ที่ปิดเหนือ/ใต้ Swing High/Low หากเป็น false แค่ไส้เทียนทะลุก็ถือว่า Break
isCurrentStructToShow: (Boolean) เปิด/ปิดการแสดงเส้นโครงสร้างตลาดปัจจุบัน (เส้นสีน้ำเงินในภาพตัวอย่าง)
pivot_len: ความยาวของแท่งเทียนที่ใช้ในการมองหาจุด Pivot (Swing High/Low) ยิ่งค่าน้อยยิ่งจับ Swing เล็กๆ ได้, ยิ่งค่ามากยิ่งจับ Swing ใหญ่ๆ ได้
bullishBosColor, bearishBosColor: สีสำหรับเส้นและป้าย BOS ขาขึ้น/ขาลง
bosLineStyleOption, bosLineWidth: สไตล์ (Solid, Dotted, Dashed) และความหนาของเส้น BOS
bullishChochColor, bearishChochColor: สีสำหรับเส้นและป้าย CHoCH ขาขึ้น/ขาลง
chochLineStyleOption, chochLineWidth: สไตล์ (Solid, Dotted, Dashed) และความหนาของเส้น CHoCH
currentStructColor, currentStructLineStyleOption, currentStructLineWidth: สี, สไตล์ และความหนาของเส้นโครงสร้างตลาดปัจจุบัน
structHistoryNbr: จำนวนการ Break (Choch/BoS) ย้อนหลังที่จะแสดง
Structure Fibonacci (จากโค้ดต้นฉบับ):
เป็นชุด Input สำหรับเปิด/ปิด, กำหนดค่า, สี, สไตล์ และความหนาของเส้น Fibonacci Levels ต่างๆ (0.786, 0.705, 0.618, 0.5, 0.382) ที่จะถูกคำนวณจากโครงสร้างตลาดปัจจุบัน
2.2 Helper Functions (ฟังก์ชันช่วยทำงาน)
getLineStyle(lineOption): ฟังก์ชันนี้ใช้แปลงค่า String ที่เลือกจาก Input (เช่น "─", "┈", "╌") ให้เป็นรูปแบบ line.style_ ที่ Pine Script เข้าใจ
get_structure_highest_bar(lookback): ฟังก์ชันนี้พยายามหา Bar Index ของแท่งเทียนที่ทำ Swing High ภายในช่วง lookback ที่กำหนด
get_structure_lowest_bar(lookback): ฟังก์ชันนี้พยายามหา Bar Index ของแท่งเทียนที่ทำ Swing Low ภายในช่วง lookback ที่กำหนด
is_structure_high_broken(...): ฟังก์ชันนี้ตรวจสอบว่าราคาปัจจุบันได้ Break เหนือ _structureHigh (Swing High) หรือไม่ โดยพิจารณาจาก _highStructBreakPrice (ราคาปิดหรือราคา High ขึ้นอยู่กับการตั้งค่า isStructBodyCandleBreak)
FVGDraw(...): ฟังก์ชันนี้รับ Arrays ของ FVG Boxes, Types, Mitigation Status และ Labels มาประมวลผล เพื่ออัปเดตสถานะของ FVG (เช่น ถูก Mitigate หรือไม่) และปรับขนาด/ตำแหน่งของ FVG Box และ Label บนกราฟ
2.3 Global Variables (ตัวแปรทั่วทั้งอินดิเคเตอร์)
เป็นตัวแปรที่ประกาศด้วย var ซึ่งหมายความว่าค่าของมันจะถูกเก็บไว้และอัปเดตในแต่ละแท่งเทียน (persists across bars)
structureLines, structureLabels: Arrays สำหรับเก็บอ็อบเจกต์ line และ label ของเส้น Choch/BoS ที่วาดบนกราฟ
fvgBoxes, fvgTypes, fvgLabels, isFvgMitigated: Arrays สำหรับเก็บข้อมูลของ FVG Boxes และสถานะต่างๆ
structureHigh, structureLow: เก็บราคาของ Swing High/Low ที่สำคัญของโครงสร้างตลาดปัจจุบัน
structureHighStartIndex, structureLowStartIndex: เก็บ Bar Index ของจุดเริ่มต้นของ Swing High/Low ที่สำคัญ
structureDirection: เก็บสถานะของทิศทางโครงสร้างตลาด (1 = Bullish, 2 = Bearish, 0 = Undefined)
fiboXPrice, fiboXStartIndex, fiboXLine, fiboXLabel: ตัวแปรสำหรับเก็บข้อมูลและอ็อบเจกต์ของเส้น Fibonacci Levels
isBOSAlert, isCHOCHAlert: (Boolean) ใช้สำหรับส่งสัญญาณ Alert (หากมีการตั้งค่า Alert ไว้)
2.4 FVG Processing (การประมวลผล FVG)
ส่วนนี้จะตรวจสอบเงื่อนไขการเกิด FVG (Bullish FVG: high < low , Bearish FVG: low > high )
หากเกิด FVG และ isFvgToShow เป็น true จะมีการสร้าง box และ label ใหม่เพื่อแสดง FVG บนกราฟ
มีการจัดการ fvgBoxes และ fvgLabels เพื่อจำกัดจำนวน FVG ที่แสดงตาม fvgHistoryNbr และลบ FVG เก่าออก
ฟังก์ชัน FVGDraw จะถูกเรียกเพื่ออัปเดตสถานะของ FVG (เช่น การถูก Mitigate) และปรับการแสดงผล
2.5 Structures Processing (การประมวลผลโครงสร้างตลาด)
Initialization: ที่ bar_index == 0 (แท่งเทียนแรกของกราฟ) จะมีการกำหนดค่าเริ่มต้นให้กับ structureHigh, structureLow, structureHighStartIndex, structureLowStartIndex
Finding Current High/Low: highest, highestBar, lowest, lowestBar ถูกใช้เพื่อหา High/Low ที่สุดและ Bar Index ของมันใน 10 แท่งล่าสุด (หรือทั้งหมดหากกราฟสั้นกว่า 10 แท่ง)
Calculating Structure Max/Min Bar: structureMaxBar และ structureMinBar ใช้ฟังก์ชัน get_structure_highest_bar และ get_structure_lowest_bar เพื่อหา Bar Index ของ Swing High/Low ที่แท้จริง (ไม่ใช่แค่ High/Low ที่สุดใน lookback แต่เป็นจุด Pivot ที่สมบูรณ์)
Break Price: lowStructBreakPrice และ highStructBreakPrice จะเป็นราคาปิด (close) หรือราคา Low/High ขึ้นอยู่กับ isStructBodyCandleBreak
isStuctureLowBroken / isStructureHighBroken: เงื่อนไขเหล่านี้ตรวจสอบว่าราคาได้ทำลาย structureLow หรือ structureHigh หรือไม่ โดยพิจารณาจากราคา Break, ราคาแท่งก่อนหน้า และ Bar Index ของจุดเริ่มต้นโครงสร้าง
Choch/BoS Logic (ส่วนสำคัญที่ถูกผสานกับ MACD):
if(isStuctureLowBroken and is_bearish_macd_cross): นี่คือจุดที่ MACD เข้ามามีบทบาท หากราคาทำลาย structureLow (สัญญาณขาลง) และ MACD Histogram เกิด Bearish Zero Cross (is_bearish_macd_cross เป็น true) อินดิเคเตอร์จะพิจารณาว่าเป็น Choch หรือ BoS
หาก structureDirection == 1 (เดิมเป็นขาขึ้น) หรือ 0 (ยังไม่กำหนด) จะตีเป็น "CHoCH" (เปลี่ยนทิศทางโครงสร้างเป็นขาลง)
หาก structureDirection == 2 (เดิมเป็นขาลง) จะตีเป็น "BOS" (ยืนยันโครงสร้างขาลง)
มีการสร้าง line.new และ label.new เพื่อวาดเส้นและป้ายกำกับ
structureDirection จะถูกอัปเดตเป็น 1 (Bullish)
structureHighStartIndex, structureLowStartIndex, structureHigh, structureLow จะถูกอัปเดตเพื่อกำหนดโครงสร้างใหม่
else if(isStructureHighBroken and is_bullish_macd_cross): เช่นกันสำหรับขาขึ้น หากราคาทำลาย structureHigh (สัญญาณขาขึ้น) และ MACD Histogram เกิด Bullish Zero Cross (is_bullish_macd_cross เป็น true) อินดิเคเตอร์จะพิจารณาว่าเป็น Choch หรือ BoS
หาก structureDirection == 2 (เดิมเป็นขาลง) หรือ 0 (ยังไม่กำหนด) จะตีเป็น "CHoCH" (เปลี่ยนทิศทางโครงสร้างเป็นขาขึ้น)
หาก structureDirection == 1 (เดิมเป็นขาขึ้น) จะตีเป็น "BOS" (ยืนยันโครงสร้างขาขึ้น)
มีการสร้าง line.new และ label.new เพื่อวาดเส้นและป้ายกำกับ
structureDirection จะถูกอัปเดตเป็น 2 (Bearish)
structureHighStartIndex, structureLowStartIndex, structureHigh, structureLow จะถูกอัปเดตเพื่อกำหนดโครงสร้างใหม่
การลบเส้นเก่า: d.delete_line (หากไลบรารีทำงาน) จะถูกเรียกเพื่อลบเส้นและป้ายกำกับเก่าออกเมื่อจำนวนเกิน structHistoryNbr
Updating Structure High/Low (else block): หากไม่มีการ Break เกิดขึ้น แต่ราคาปัจจุบันสูงกว่า structureHigh หรือต่ำกว่า structureLow ในทิศทางที่สอดคล้องกัน (เช่น ยังคงเป็นขาขึ้นและทำ High ใหม่) structureHigh หรือ structureLow จะถูกอัปเดตเพื่อติดตาม High/Low ที่สุดของโครงสร้างปัจจุบัน
Current Structure Display:
หาก isCurrentStructToShow เป็น true อินดิเคเตอร์จะวาดเส้น structureHighLine และ structureLowLine เพื่อแสดงขอบเขตของโครงสร้างตลาดปัจจุบัน
Fibonacci Display:
หาก isFiboXToShow เป็น true อินดิเคเตอร์จะคำนวณและวาดเส้น Fibonacci Levels ต่างๆ (0.786, 0.705, 0.618, 0.5, 0.382) โดยอิงจาก structureHigh และ structureLow ของโครงสร้างตลาดปัจจุบัน
Alerts:
alertcondition: ใช้สำหรับตั้งค่า Alert ใน TradingView เมื่อเกิดสัญญาณ BOS หรือ CHOCH
plot(na):
plot(na) เป็นคำสั่งที่สำคัญในอินดิเคเตอร์ที่ไม่ได้ต้องการพล็อต Series ของข้อมูลบนกราฟ (เช่น ไม่ได้พล็อตเส้น EMA หรือ RSI) แต่ใช้วาดอ็อบเจกต์ (Line, Label, Box) โดยตรง
การมี plot(na) ช่วยให้ Pine Script รู้ว่าอินดิเคเตอร์นี้มีเอาต์พุตที่แสดงผลบนกราฟ แม้ว่าจะไม่ได้เป็น Series ที่พล็อตตามปกติก็ตาม
3. วิธีใช้งาน
คัดลอกโค้ดทั้งหมด ที่อยู่ในบล็อก immersive ด้านบน
ไปที่ TradingView และเปิดกราฟที่คุณต้องการ
คลิกที่เมนู "Pine Editor" ที่อยู่ด้านล่างของหน้าจอ
ลบโค้ดเดิมที่มีอยู่ และ วางโค้ดที่คัดลอกมา ลงไปแทน
คลิกที่ปุ่ม "Add to Chart"
อินดิเคเตอร์จะถูกเพิ่มลงในกราฟของคุณโดยอัตโนมัติ คุณสามารถคลิกที่รูปฟันเฟืองข้างชื่ออินดิเคเตอร์บนกราฟเพื่อเข้าถึงหน้าต่างการตั้งค่าและปรับแต่งตามความต้องการของคุณได้
Hello! I will explain the "SMC Structures and FVG + MACD" indicator you provided in detail, section by section, so you can fully understand how it works.This indicator combines the concepts of Smart Money Concept (SMC), which focuses on analyzing Market Structure and Fair Value Gaps (FVG), with the MACD indicator to serve as a filter or confirmation for Choch (Change of Character) and BoS (Break of Structure) signals.1. Overall PurposeThe main purposes of this indicator are:Identify Market Structure: Automatically draw lines and label Choch (Change of Character) and BoS (Break of Structure) on the chart.Integrate MACD Confirmation: Choch/BoS signals will only be considered when the MACD Histogram performs a cross (Zero Cross) in the corresponding direction.Display Fair Value Gap (FVG): If enabled, FVG boxes will be drawn on the chart.Display Fibonacci Levels: Calculate and display important Fibonacci levels based on the current market structure.Adapt to Timeframe: All calculations and displays will automatically adjust to the timeframe you are currently using.2. Code BreakdownThis code can be divided into the following main sections:2.1 Inputs (Settings)This section contains variables that you can adjust in the indicator's settings window (click the gear icon next to the indicator's name on the chart).MACD Settings:fast_len: Length of the Fast EMA for MACD (default 12)slow_len: Length of the Slow EMA for MACD (default 26)signal_len: Length of the Signal Line for MACD (default 9) = ta.macd(close, fast_len, slow_len, signal_len): Calculates the MACD Line, Signal Line, and Histogram using the closing price (close) and the specified lengths.is_bullish_macd_cross: Checks if the MACD Histogram crosses above the 0 line (from negative to positive).is_bearish_macd_cross: Checks if the MACD Histogram crosses below the 0 line (from positive to negative).Fear Value Gap (FVG) Settings:isFvgToShow: (Boolean) Enables/disables the display of FVG on the chart.bullishFvgColor: Color for Bullish FVG.bearishFvgColor: Color for Bearish FVG.mitigatedFvgColor: Color for FVG that has been mitigated.fvgHistoryNbr: Number of historical FVG to display.isMitigatedFvgToReduce: (Boolean) Enables/disables reducing the size of FVG when mitigated.Structures (โครงสร้างตลาด) Settings:isStructBodyCandleBreak: (Boolean) If true, the break must occur with the candle body closing above/below the Swing High/Low. If false, a wick break is sufficient.isCurrentStructToShow: (Boolean) Enables/disables the display of the current market structure lines (blue lines in the example image).pivot_len: Lookback length for identifying Pivot points (Swing High/Low). A smaller value captures smaller, more frequent swings; a larger value captures larger, more significant swings.bullishBosColor, bearishBosColor: Colors for bullish/bearish BOS lines and labels.bosLineStyleOption, bosLineWidth: Style (Solid, Dotted, Dashed) and width of BOS lines.bullishChochColor, bearishChochColor: Colors for bullish/bearish CHoCH lines and labels.chochLineStyleOption, chochLineWidth: Style (Solid, Dotted, Dashed) and width of CHoCH lines.currentStructColor, currentStructLineStyleOption, currentStructLineWidth: Color, style, and width of the current market structure lines.structHistoryNbr: Number of historical breaks (Choch/BoS) to display.Structure Fibonacci (from original code):A set of inputs to enable/disable, define values, colors, styles, and widths for various Fibonacci Levels (0.786, 0.705, 0.618, 0.5, 0.382) that will be calculated from the current market structure.2.2 Helper FunctionsgetLineStyle(lineOption): This function converts the selected string input (e.g., "─", "┈", "╌") into a line.style_ format understood by Pine Script.get_structure_highest_bar(lookback): This function attempts to find the Bar Index of the Swing High within the specified lookback period.get_structure_lowest_bar(lookback): This function attempts to find the Bar Index of the Swing Low within the specified lookback period.is_structure_high_broken(...): This function checks if the current price has broken above _structureHigh (Swing High), considering _highStructBreakPrice (closing price or high price depending on isStructBodyCandleBreak setting).FVGDraw(...): This function takes arrays of FVG Boxes, Types, Mitigation Status, and Labels to process and update the status of FVG (e.g., whether it's mitigated) and adjust the size/position of FVG Boxes and Labels on the chart.2.3 Global VariablesThese are variables declared with var, meaning their values are stored and updated on each bar (persists across bars).structureLines, structureLabels: Arrays to store line and label objects for Choch/BoS lines drawn on the chart.fvgBoxes, fvgTypes, fvgLabels, isFvgMitigated: Arrays to store FVG box data and their respective statuses.structureHigh, structureLow: Stores the price of the significant Swing High/Low of the current market structure.structureHighStartIndex, structureLowStartIndex: Stores the Bar Index of the start point of the significant Swing High/Low.structureDirection: Stores the status of the market structure direction (1 = Bullish, 2 = Bearish, 0 = Undefined).fiboXPrice, fiboXStartIndex, fiboXLine, fiboXLabel: Variables to store data and objects for Fibonacci Levels.isBOSAlert, isCHOCHAlert: (Boolean) Used to trigger alerts in TradingView (if alerts are configured).2.4 FVG ProcessingThis section checks the conditions for FVG formation (Bullish FVG: high < low , Bearish FVG: low > high ).If FVG occurs and isFvgToShow is true, a new box and label are created to display the FVG on the chart.fvgBoxes and fvgLabels are managed to limit the number of FVG displayed according to fvgHistoryNbr and remove older FVG.The FVGDraw function is called to update the FVG status (e.g., whether it's mitigated) and adjust its display.2.5 Structures ProcessingInitialization: At bar_index == 0 (the first bar of the chart), structureHigh, structureLow, structureHighStartIndex, and structureLowStartIndex are initialized.Finding Current High/Low: highest, highestBar, lowest, lowestBar are used to find the highest/lowest price and its Bar Index of it in the last 10 bars (or all bars if the chart is shorter than 10 bars).Calculating Structure Max/Min Bar: structureMaxBar and structureMinBar use get_structure_highest_bar and get_structure_lowest_bar functions to find the Bar Index of the true Swing High/Low (not just the highest/lowest in the lookback but a complete Pivot point).Break Price: lowStructBreakPrice and highStructBreakPrice will be the closing price (close) or the Low/High price, depending on the isStructBodyCandleBreak setting.isStuctureLowBroken / isStructureHighBroken: These conditions check if the price has broken structureLow or structureHigh, considering the break price, previous bar prices, and the Bar Index of the structure's starting point.Choch/BoS Logic (Key Integration with MACD):if(isStuctureLowBroken and is_bearish_macd_cross): This is where MACD plays a role. If the price breaks structureLow (bearish signal) AND the MACD Histogram performs a Bearish Zero Cross (is_bearish_macd_cross is true), the indicator will consider it a Choch or BoS.If structureDirection == 1 (previously bullish) or 0 (undefined), it will be labeled "CHoCH" (changing structure direction to bearish).If structureDirection == 2 (already bearish), it will be labeled "BOS" (confirming bearish structure).line.new and label.new are used to draw the line and label.structureDirection will be updated to 1 (Bullish).structureHighStartIndex, structureLowStartIndex, structureHigh, structureLow will be updated to define the new structure.else if(isStructureHighBroken and is_bullish_macd_cross): Similarly for bullish breaks. If the price breaks structureHigh (bullish signal) AND the MACD Histogram performs a Bullish Zero Cross (is_bullish_macd_cross is true), the indicator will consider it a Choch or BoS.If structureDirection == 2 (previously bearish) or 0 (undefined), it will be labeled "CHoCH" (changing structure direction to bullish).If structureDirection == 1 (already bullish), it will be labeled "BOS" (confirming bullish structure).line.new and label.new are used to draw the line and label.structureDirection will be updated to 2 (Bearish).structureHighStartIndex, structureLowStartIndex, structureHigh, structureLow will be updated to define the new structure.Deleting Old Lines: d.delete_line (if the library works) will be called to delete old lines and labels when their number exceeds structHistoryNbr.Updating Structure High/Low (else block): If no break occurs, but the current price is higher than structureHigh or lower than structureLow in the corresponding direction (e.g., still bullish and making a new high), structureHigh or structureLow will be updated to track the highest/lowest point of the current structure.Current Structure Display:If isCurrentStructToShow is true, the indicator draws structureHighLine and structureLowLine to show the boundaries of the current market structure.Fibonacci Display:If isFiboXToShow is true, the indicator calculates and draws various Fibonacci Levels (0.786, 0.705, 0.618, 0.5, 0.382) based on the structureHigh and structureLow of the current market structure.Alerts:alertcondition: Used to set up alerts in TradingView when BOS or CHOCH signals occur.plot(na):plot(na) is an important statement in indicators that do not plot data series directly on the chart (e.g., not plotting EMA or RSI lines) but instead draw objects (Line, Label, Box).Having plot(na) helps Pine Script recognize that this indicator has an output displayed on the chart, even if it's not a regularly plotted series.3. How to UseCopy all the code in the immersive block above.Go to TradingView and open your desired chart.Click on the "Pine Editor" menu at the bottom of the screen.Delete any existing code and paste the copied code in its place.Click the "Add to Chart" button.The indicator will be added to your chart automatically. You can click the gear icon next to the indicator's name on the chart to access the settings window and customize it to your needs.I hope this explanation helps you understand this indicator in detail. If anything is unclear, or you need further adjustments, please let me know.
Order Blocks Volume Delta 3D | Flux ChartsGENERAL OVERVIEW:
Order Blocks Volume Delta 3D by Flux Charts is a rule-based order block and volume delta visualization tool. It detects bullish and bearish order blocks using a profile-of-price approach: the indicator finds the most actively traded price area (Point of Control, or POC) between a swing high/low and the Break of Structure (BOS), then anchors the order block to the earliest still-valid candle that traded through that POC band. From there, it tracks all candles that continue to interact with that zone and overlays both 2D and 3D volume delta views directly inside the order block.
Unlike traditional order block tools that simply use candle bodies or wicks, this indicator is volume-aware. It lets you optionally pull volume from a lower timeframe feed (for example, using 1-minute data while watching a 5-minute chart) to build a much more accurate picture of how buyers and sellers actually traded inside the zone. This makes every block not just a price box, but a volume story: which side dominated, where, and by how much.
All order blocks printed by this indicator are confirmed: BOS and retests are evaluated strictly on closed candles. Nothing is drawn or alerted on partially formed bars, which helps avoid repaint-style flicker and keeps the signals clean and stable.
What is the theory behind the indicator?:
The core idea behind Order Blocks Volume Delta 3D is that not all price levels inside an order block are equal. Some prices are barely touched, while others act like magnets where candles repeatedly trade and heavy volume passes through.
The indicator first finds a swing high or swing low, waits for a clear Break of Structure (BOS), then scans the candles between the swing point and the BOS to find the price level that was touched the most. That level is treated as the POC.
From all candles in the swing-to-BOS range that interact with this POC band, the indicator looks for the earliest candle that is not already mitigated and uses that as the anchor candle for the order block:
The top of the block equals the anchor candle’s high (for a bearish OB) or the top of its wick zone.
The bottom equals the anchor candle’s low (for a bullish OB) or the bottom of its wick zone.
This “earliest valid POC-touching candle” rule makes it easier to visualize how price and volume developed from the very start of a meaningful zone, while ignoring POC touches that are already fully mitigated by the time the structure is confirmed. On top of that, each candle is split into bullish and bearish volume. If you choose a lower timeframe volume input, the tool aggregates lower timeframe candles into your chart timeframe, giving a more granular bull-versus-bear breakdown for each bar. The result is
an order block that not only shows where price moved but also which side pushed it, how aggressively, and how that balance shifted over time.
ORDER BLOCKS VOLUME DELTA 3D FEATURES:
The Order Blocks Volume Delta 3D indicator includes 4 main features:
1. Order Blocks
2. Volume Delta
3. 3D Visualization
4. Alerts
ORDER BLOCKS:
🔹What is an Order Block
An order block is a price zone where a clear displacement move began after liquidity was taken. It usually forms around the last consolidation or cluster of candles before price breaks structure with a strong move.
In this indicator, order blocks are defined as structured zones that:
Begin at the earliest unmitigated candle that interacted with the most-touched price level (POC) between swing and BOS.
Extend through the full wick range of that anchor candle.
Stretch forward in time, tracking how price continues to trade through, respect, retest, or invalidate the zone.
Are only printed once the BOS is fully confirmed on closed candles (confirmed order blocks only).
Example of bullish and bearish order blocks anchored at the earliest unmitigated candle in the POC zone:
🔹How are Order Blocks detected
The indicator uses a step-by-step, rules-based process to detect bullish and bearish order blocks. The logic is designed to match discretionary Smart Money concepts but with strict, repeatable rules.
Step 1: Detect swing highs and swing lows
Swing High: a candle whose high is higher than the highs of surrounding candles.
Swing Low: a candle whose low is lower than the lows of surrounding candles.
The Swing Length input controls how many candles are checked to the left and right.
Example of swing high and swing low detection:
Step 2: Confirm Break of Structure (BOS)
Once a swing is confirmed, the indicator waits for price to break past that swing:
Bullish BOS: price closes above a previous swing high.
Bearish BOS: price closes below a previous swing low.
To avoid “live” flicker, BOS logic is evaluated based on the previous closed candle. The order block is only confirmed once the BOS candle has fully closed and the next bar has opened. This is one of the reasons the script only shows confirmed, non-repainting order blocks.
Example of bullish BOS and bearish BOS:
Step 3: Build the POC range between swing and BOS
Between the swing candle and the BOS candle, the indicator:
Scans all candles in that range.
Tracks every price level touched using binning (POC bins).
Counts how many times each price band was touched by candle wicks.
The bin with the highest touch count becomes the POC band. This is where price traded most often, not necessarily where volume was highest.
Example of the POC band between swing and BOS.
Step 4 – Anchor the order block to the earliest valid POC candle
From all candles in the swing-to-BOS range, the indicator finds the earliest candle whose high/low overlaps the POC band and whose zone is not already mitigated. That candle becomes the anchor candle for the order block:
For a bearish OB, the block spans the anchor candle’s full wick range, with its top at the high.
For a bullish OB, the block spans the anchor candle’s full wick range, with its bottom at the low.
By requiring the anchor to be the earliest unmitigated interaction with POC, the script avoids building blocks from price action that has already been fully traded through and is less relevant.
Step 5: Extend and manage the order block
Once created, the block:
Extends to the right by a configurable number of candles (Extend Zones).
Continues until it is invalidated by wick or close, depending on the chosen method.
Can show retest labels when price revisits the zone after creation.
Is included or excluded from display depending on the Show Nearest and Hide Invalidated Zones settings.
Example of active and invalidated OB.
🔹Order Block Settings
◇ Swing Length
Swing Length controls how sensitive swing highs and lows are.
Lower Swing Length: Swings form more frequently, which leads to more frequent BOS events and order block formations.
Higher Swing Length: Only larger, more meaningful swings are detected, which leads to less frequent BOS events and less order block formations.
◇ Invalidation
Invalidation determines how an order block is considered “mitigated” or no longer valid.
Wick: For bullish OBs, if price wicks completely through the bottom of the zone, the order block is invalidated. For bearish OBs, if price wicks completely through the top, the order block is invalidated.
Close: For bullish OBs, the block is invalidated only when a candle closes below the bottom. For bearish OBs, it is invalidated only when a candle closes above the top.
Example of wick invalidation:
Example of close invalidation:
◇ Show Nearest
Show Nearest limits how many active order blocks are displayed based on proximity to current price. For example, a value of 2 will display only the two nearest bullish order blocks and two nearest bearish order blocks.
Chart with Show Nearest set to 3:
◇ Extend Zones
Extend Zones define how many candles forward each order block should project beyond the right most candle on the chart.
Chart with Extend Zones set to 10:
◇ Retest Labels
When enabled, the indicator prints labels on every clean retest of an active order block, as long as that block remains valid. Key points:
A retest label is only printed once the retest candle has fully closed – you always see confirmed retests, not intrabar tests.
Retest labels are positioned on the actual retest candle so you can visually see which bar interacted with the zone.
In addition, if multiple retests occur in quick succession, the indicator applies a built-in three-candle buffer between retests. That means only the first valid retest within each three-bar window is labeled (and can trigger an alert), helping to reduce clutter while still highlighting meaningful interactions with the zone.
Example of retest labels on bullish and bearish order blocks.
◇ Hide Invalidated Zones
Hide Invalidated Zones controls whether mitigated/invalidated blocks stay drawn.
Enabled: Only currently valid, unmitigated order blocks are shown (subject to Show Nearest)
Disabled: Both active and invalidated order blocks are displayed.
VOLUME DELTA:
🔹What is Volume Delta
Volume delta measures the difference between buying and selling volume. Instead of only showing “how much volume traded”, it separates volume into bullish and bearish components.
In this indicator:
Bullish volume = volume from candles (or lower timeframe candles) that closed higher.
Bearish volume = volume from candles that closed lower.
Delta % shows how dominant one side was compared to the total.
Example of bullish and bearish order blocks with volume delta and total volume.
🔹How is Volume Delta calculated?
The indicator uses a flexible, timeframe-aware volume engine.
1. Choose a Volume Delta Timeframe.
If the selected timeframe is equal to or higher than the chart timeframe, the indicator simply uses chart-volume per candle.
If the selected timeframe is lower than the chart timeframe (for example, 1‑minute volume on a 5‑minute chart), the indicator pulls all lower timeframe candles for each chart bar and sums them.
2. Split each bar into bull and bear volume.
For each contributing candle:
If close > open → its volume is added to bullish volume.
If close < open → its volume is added to bearish volume.
If close == open → its volume is split evenly between bullish and bearish.
3. Aggregate for each order block.
For each order block:
The indicator loops once from the swing candle to the BOS candle.
It records every candle that touches the POC band.
For each touching candle, it adds its bull and bear volumes (either directly from chart candles or from aggregated lower timeframe candles).
Total volume = bullish volume + bearish volume
Delta % = (bullish volume or bearish volume / total volume ) * 100, depending on which side is dominant.
🔹Volume Delta Settings:
◇ Display Style
Display Style controls how the volume delta is drawn inside each order block:
Horizontal:
Bullish and bearish fills extend horizontally from left to right.
The filled strip sits along the base of the block, with a bull vs bear gradient.
Vertical:
Bullish and bearish fills stretch vertically inside the zone.
The bullish percentage controls how much of the block is filled with the “dominant” color.
Example of Horizontal display style.
Example of Vertical display style.
◇ Volume Delta Timeframe
Volume Delta Timeframe tells the indicator whether to use chart volume or lower timeframe volume. When set to a lower timeframe, the indicator aggregates all lower timeframe candles that fall inside each chart bar, splitting their volume into bullish and bearish components before summing.
Using a lower timeframe:
Increases precision for how volume truly behaved inside each bar.
Helps reveal hidden absorption and aggressive flows that a higher timeframe candle might hide.
Example of volume delta based on chart timeframe.
Example of volume delta based on lower timeframe than chart(same OB as above)
◇ Display Total Volume
When enabled, the indicator prints the total volume for each order block as a label positioned inside the zone, near the bottom-right corner. This total is the sum of bullish and bearish volume used in the delta calculation and gives you a quick sense of how “heavy” the trading was in that block compared to others.
Example of total volume label inside multiple order blocks.
◇ Show Delta %
Show Delta % draws a small text label on the strip of the block that displays the dominant side’s percentage. For example, a bullish block might show “72%” if 72% of all volume inside that POC band came from bullish volume.
Example of Delta %:
3D VISUALIZATION:
The 3D Visualization feature turns each order block into a 3D plot.
🔹What the 3D Visualization does:
Wraps the order block with side faces and a top face to create a 3D bar effect.
Uses delta percentages to tilt the top face toward the dominant side.
Projects blocks into the future using Extend Zones, making the 3D blocks visually stand out.
🔹How it works:
The front face of the OB shows the standard 2D zone.
The side face extends forward in time based on the 3D depth setting.
The top face is angled depending on the Display Style and bull vs bear delta, making strong bullish blocks “rise” and strong bearish blocks “sink”.
🔹How the 3D depth setting affects visuals
Lower 3D depth:
Shorter side faces.
Subtle 3D effect.
Higher 3D depth:
Longer side faces projecting further into the future.
Stronger 3D effect that visually highlights key zones.
Example of lower 3D depth:
Example of higher 3D depth:
ALERTS:
The indicator supports alert conditions through TradingView’s AnyAlert() engine, allowing you to set alerts for the following:
New Bullish Order Block formed
New Bearish Order Block formed
Bullish OB Retest
Bearish OB Retest
Important alert behavior:
Order block alerts only fire when a new block is confirmed (after BOS closes and the next bar opens).
Retest alerts only fire when a retest candle has completely finished, matching the behavior of the visual retest labels.
IMPORTANT NOTES:
3D faces for order blocks are built using polylines. In some situations, especially when an order block’s starting point (its left edge) is beyond the chart’s left-most visible bar, the top 3D face may appear slightly irregular, skewed, or incomplete. This is purely a drawing limitation related to how the chart engine handles off-screen polyline points. Once the starting point of that order block comes into view (by zooming out or scrolling back), the 3D top face corrects itself and the visual becomes fully consistent. This issue affects only the 3D top face drawing, not the actual order-block box itself. The underlying zone, prices, and volume calculations remain accurate at all times.
If all conditions are met to create a new order block but the resulting zone would overlap an existing active order block, the new block is intentionally not created. A built-in guard prevents overlapping active zones to keep the structure clean and easier to interpret.
3D face drawing is implemented using an adaptive polyline method, which can be relatively calculation-heavy on certain symbols, timeframes, or chart histories. In some cases this may lead to calculation timeout error from TradingView.
UNIQUENESS:
This indicator is unique because it:
Anchors each order block to the earliest unmitigated candle that traded through the most-touched POC band between swing and BOS, rather than a generic “last up/down candle” or a random volume spike.
Builds a dedicated volume engine that can pull either chart timeframe volume or aggregated lower timeframe volume, then splits it into bull and bear components.
Adds 3D visualization on top of standard zones, turning each OB into a visually weighted slab rather than a flat rectangle.
Provides clean toggles (Show Nearest, Hide Invalidated Zones, Extend Zones, Display Style, Delta %, and total volume labels) so you can dial the indicator from extremely minimal to fully detailed, depending on your trading workflow.
Combined, these features make the indicator not just an order block plotter, but a complete volume‑informed structure tool tailored for traders who want to see where price actually traded and whether bulls or bears truly controlled the move inside each order block.
Smart Money Concept [TradingFinder] Major OB + FVG + Liquidity🔵 Introduction
"Smart Money" refers to funds under the control of institutional investors, central banks, funds, market makers, and other financial entities. Ordinary people recognize investments made by those who have a deep understanding of market performance and possess information typically inaccessible to regular investors as "Smart Money".
Consequently, when market movements often diverge from expectations, traders identify the footprints of smart money. For example, when a classic pattern forms in the market, traders take short positions. However, the market might move upward instead. They attribute this contradiction to smart money and seek to capitalize on such inconsistencies in their trades.
The "Smart Money Concept" (SMC) is one of the primary styles of technical analysis that falls under the subset of "Price Action". Price action encompasses various subcategories, with one of the most significant being "Supply and Demand", in which SMC is categorized.
The SMC method aims to identify trading opportunities by emphasizing the impact of large traders (Smart Money) on the market, offering specific patterns, techniques, and trading strategies.
🟣 Key Terms of Smart Money Concept (SMC)
• Market Structure (Trend)
• Change of Character (ChoCh)
• Break of Structure (BoS)
• Order Blocks (Supply and Demand)
• Imbalance (IMB)
• Inefficiency (IFC)
• Fair Value Gap (FVG)
• Liquidity
• Premium and Discount
🔵 How Does the "Smart Money Concept Indicator" Work?
🟣 Market Structure
a. Accumulation
b. Market-Up
c. Distribution
d. Market-Down
a) Accumulation Phase : During the accumulation period, typically following a downtrend, smart money enters the market without significantly affecting the pricing trend.
b) Market-Up Phase : In this phase, the price of an asset moves upward from the accumulation range and begins to rise. Usually, the buying by retail investors is the main driver of this trend, and due to positive market sentiment, it continues.
c) Distribution Phase : The distribution phase, unlike the accumulation stage, occurs after an uptrend. In this phase, smart money attempts to exit the market without causing significant price fluctuations.
d) Market-Down Phase : In this stage, the price of an asset moves downward from the distribution phase, initiating a prolonged downtrend. Smart money liquidates all its positions by creating selling pressure, trapping latecomer investors.
The result of these four phases in the market becomes the market trend.
Types of Trends in Financial Markets :
a. Up-Trend
b. Down Trend
c. Range (No Trend)
a) Up-Trend : The market breaks consecutive highs.
b) Down Trend : The market breaks consecutive lows.
c) No Trend or Range : The market oscillates within a range without breaking either highs or lows.
🟣 Change of Character (ChoCh)
The "ChoCh" or "Change of Character" pattern indicates an initial change in order flow in financial markets. This structural change occurs when a major pivot in the opposite direction of the market trend fails. It signals a potential change in the market trend and can serve as a signal for short-term or long-term trend changes in a trading symbol.
🟣 Break of Structure (BoS)
The "BoS" or "Break of Structure" pattern indicates the continuation of the trend in financial markets. This structure forms when, in an uptrend, the price breaks its ceiling or, in a downtrend, the price breaks its floor.
🟣 Order Blocks (Supply and Demand)
Order blocks consist of supply and demand areas where the likelihood of price reversal is higher. There are six order blocks in this indicator, categorized based on their origin and formation reasons.
a. Demand Main Zone, "ChoCh" Origin.
b. Demand Sub Zone, "ChoCh" Origin.
c. Demand All Zone, "BoS" Origin.
d. Supply Main Zone, "ChoCh" Origin.
e. Supply Sub Zone, "ChoCh" Origin.
f. Supply All Zone, "BoS" Origin.
🟣 FVG | Inefficiency | Imbalance
These three terms are almost synonymous. They describe the presence of gaps between consecutive candle shadows. This inefficiency occurs when the market moves rapidly. Primarily, imbalances and these rapid movements stem from the entry of smart money and the imbalance between buyer and seller power. Therefore, identifying these movements is crucial for traders.
These areas are significant because prices often return to fill these gaps or even before they occur to fill price gaps.
🟣 Liquidity
Liquidity zones are areas where there is a likelihood of congestion of stop-loss orders. Liquidity is considered the driving force of the entire market, and market makers may manipulate the market using these zones. However, in many cases, this does not happen because there is insufficient liquidity in some areas.
Types of Liquidity in Financial Markets :
a. Trend Lines
b. Double Tops | Double Bottoms
c. Triple Tops | Triple Bottoms
d. Support Lines | Resistance Lines
All four types of liquidity in this indicator are automatically identified.
🟣 Premium and Discount
Premium and discount zones can assist traders in making better decisions. For instance, they may sell positions in expensive ranges and buy in cheaper ranges. The closer the price is to the major resistance, the more expensive it is, and the closer it is to the major support, the cheaper it is.
🔵 How to Use
🟣 Change of Character (ChoCh) and Break of Structure (BoS)
This indicator detects "ChoCh" and "BoS" in both Minor and Major states. You can turn on the display of these lines by referring to the last part of the settings.
🟣 Order Blocks (Supply and Demand)
Order blocks are Zones where the probability of price reversal is higher. In demand Zones you can buy opportunities and in supply Zones you can check sell opportunities.
The "Refinement" feature allows you to adjust the width of the order block according to your strategy. There are two modes, "Aggressive" and "Defensive," in the "Order Block Refine". The difference between "Aggressive" and "Defensive" lies in the width of the order block.
For risk-averse traders, the "Defensive" mode is suitable as it provides a lower loss limit and a greater reward-to-risk ratio. For risk-taking traders, the "Aggressive" mode is more appropriate. These traders prefer to enter trades at higher prices, and this mode, which has a wider order block width, is more suitable for this group of individuals.
🟣 Fair Value Gap (FVG) | Imbalance (IMB) | Inefficiency (IFC)
In order to identify the "fair value gap" on the chart, it must be analyzed candle by candle. In this process, it is important to pay attention to candles with a large size, and a candle and a candle should be examined before that.
Candles before and after this central candle should have long shadows and their bodies should not overlap with the central candle body. The distance between the shadows of the first and third candles is known as the FVG range.
These areas work in two ways :
• Supply and demand area : In this case, the price reacts to these areas and the trend is reversed.
• Liquidity zone : In this scenario, the price "fills" the zone and then reaches the order block.
Important note : In most cases, the FVG zone of very small width acts as a supply and demand zone, while the zone of significant width acts as a liquidity zone and absorbs price.
When the FVG filter is activated, the FVG regions are filtered based on the specified algorithm.
FVG filter types include the following :
1. Very Aggressive Mode : In addition to the initial condition, an additional condition is considered. For bullish FVG, the maximum price of the last candle must be greater than the maximum price of the middle candle.
Similarly, for a bearish FVG, the minimum price of the last candle must be lower than the minimum price of the middle candle. This mode removes the minimum number of FVGs.
2. Aggressive : In addition to the very aggressive condition, the size of the middle candle is also considered. The size of the center candle should not be small and therefore more FVGs are removed in this case.
3. Defensive : In addition to the conditions of the very aggressive mode, this mode also considers the size of the middle pile, which should be relatively large and make up the majority of the body.
Also, to identify bullish FVGs, the second and third candles must be positive, while for bearish FVGs, the second and third candles must be negative. This mode filters out a significant number of FVGs and keeps only those of good quality.
4. Very Defensive : In addition to the conditions of the defensive mode, in this mode the first and third candles should not be very small-bodied doji candles. This mode filters out most FVGs and only the best quality ones remain.
🟣 Liquidity
These levels are where traders intend to exit their trades. "Market makers" or smart money usually accumulate or distribute their trading positions near these levels, where many retail traders have placed their "stop loss" orders. When liquidity is collected from these losses, the price often reverses.
A "Stop hunt" is a move designed to offset liquidity generated by established stop losses. Banks often use major news events to trigger stop hunts and capture liquidity released into the market. For example, if they intend to execute heavy buy orders, they encourage others to sell through stop-hots.
Consequently, if there is liquidity in the market before reaching the order block area, the validity of that order block is higher. Conversely, if the liquidity is close to the order block, that is, the price reaches the order block before reaching the liquidity limit, the validity of that order block is lower.
🟣 Alert
With the new alert functionality in this indicator, you won't miss any important trading signals. Alerts are activated when the price hits the last order block.
1. It is possible to set alerts for each "symbol" and "time frame". The system will automatically detect both and include them in the warning message.
2. Each alert provides the exact date and time it was triggered. This helps you measure the timeliness of the signal and evaluate its relevance.
3. Alerts include target order block price ranges. The "Proximal" level represents the initial price level strike, while the "Distal" level represents the maximum price gap in the block. These details are included in the warning message.
4. You can customize the alert name through the "Alert Name" entry.
5. Create custom messages for "long" and "short" alerts to be sent with notifications.
🔵 Setting
a. Pivot Period of Order Blocks Detector :
Using this parameter, you can set the zigzag period that is formed based on the pivots.
b. Order Blocks Validity Period (Bar) :
You can set the validity period of each Order Block based on the number of candles that have passed since the origin of the Order Block.
c. Demand Main Zone, "ChoCh" Origin :
You can control the display or not display as well as the color of Demand Main Zone, "ChoCh" Origin.
d. Demand Sub Zone, "ChoCh" Origin :
You can control the display or not display as well as the color of Demand Sub Zone, "ChoCh" Origin.
e. Demand All Zone, "BoS" Origin :
You can control the display or not display as well as the color of Demand All Zone, "BoS" Origin.
f. Supply Main Zone, "ChoCh" Origin :
You can control the display or not display as well as the color of Supply Main Zone, "ChoCh" Origin.
g. Supply Sub Zone, "ChoCh" Origin :
You can control the display or not display as well as the color of Supply Sub Zone, "ChoCh" Origin.
h. Supply All Zone, "BoS" Origin :
You can control the display or not display as well as the color of Supply All Zone, "BoS" Origin.
i. Refine Demand Main : You can choose to be refined or not and also the type of refining.
j. Refine Demand Sub : You can choose to be refined or not and also the type of refining.
k. Refine Demand BoS : You can choose to be refined or not and also the type of refining.
l. Refine Supply Main : You can choose to be refined or not and also the type of refining.
m. Refine Supply Sub : You can choose to be refined or not and also the type of refining.
n. Refine Supply BoS : You can choose to be refined or not and also the type of refining.
o. Show Demand FVG : You can choose to show or not show Demand FVG.
p. Show Supply FVG : You can choose to show or not show Supply FVG
q. FVG Filter : You can choose whether FVG is filtered or not. Also specify the type of filter you want to use.
r. Show Statics High Liquidity Line : Show or not show Statics High Liquidity Line.
s. Show Statics Low Liquidity Line : Show or not show Statics Low Liquidity Line.
t. Show Dynamics High Liquidity Line : Show or not show Dynamics High Liquidity Line.
u. Show Dynamics Low Liquidity Line : Show or not show Dynamics Low Liquidity Line.
v. Statics Period Pivot :
Using this parameter, you can set the Swing period that is formed based on Static Liquidity Lines.
w. Dynamics Period Pivot :
Using this parameter, you can set the Swing period that is formed based Dynamics Liquidity Lines.
x. Statics Liquidity Line Sensitivity :
is a number between 0 and 0.4. Increasing this number decreases the sensitivity of the "Statics Liquidity Line Detection" function and increases the number of lines identified. The default value is 0.3.
y. Dynamics Liquidity Line Sensitivity :
is a number between 0.4 and 1.95. Increasing this number increases the sensitivity of the "Dynamics Liquidity Line Detection" function and decreases the number of lines identified. The default value is 1.
z. Alerts Name : You can customize the alert name using this input and set it to your desired name.
aa. Alert Demand Main Mitigation :
If you want to receive the alert about Demand Main 's mitigation after setting the alerts, leave this tick on. Otherwise, turn it off.
bb. Alert Demand Sub Mitigation :
If you want to receive the alert about Demand Sub's mitigation after setting the alerts, leave this tick on. Otherwise, turn it off.
cc. Alert Demand BoS Mitigation :
If you want to receive the alert about Demand BoS's mitigation after setting the alerts, leave this tick on. Otherwise, turn it off.
dd. Alert Supply Main Mitigation :
If you want to receive the alert about Supply Main's mitigation after setting the alerts, leave this tick on. Otherwise, turn it off.
ee. Alert Supply Sub Mitigation :
If you want to receive the alert about Supply Sub's mitigation after setting the alerts, leave this tick on. Otherwise, turn it off.
ff. Alert Supply BoS Mitigation :
If you want to receive the alert about Supply BoS's mitigation after setting the alerts, leave this tick on. Otherwise, turn it off.
gg. Message Frequency :
This parameter, represented as a string, determines the frequency of announcements. Options include: 'All' (triggers the alert every time the function is called), 'Once Per Bar' (triggers the alert only on the first call within the bar), and 'Once Per Bar Close' (activates the alert only during the final script execution of the real-time bar upon closure). The default setting is 'Once per Bar'.
hh. Show Alert time by Time Zone :
The date, hour, and minute displayed in alert messages can be configured to reflect any chosen time zone. For instance, if you prefer London time, you should input 'UTC+1'. By default, this input is configured to the 'UTC' time zone.
ii. Display More Info : The 'Display More Info' option provides details regarding the price range of the order blocks (Zone Price), along with the date, hour, and minute. If you prefer not to include this information in the alert message, you should set it to 'Off'.
You also have access to display or not to display, choose the Style and Color of all the lines below :
a. Major Bullish "BoS" Lines
b. Major Bearish "BoS" Lines
c. Minor Bullish "BoS" Lines
d. Minor Bearish "BoS" Lines
e. Major Bullish "ChoCh" Lines
f. Major Bearish "ChoCh" Lines
g. Minor Bullish "ChoCh" Lines
h. Minor Bearish "ChoCh" Lines
i. Last Major Support Line
j. Last Major Resistance Line
k. Last Minor Support Line
l. Last Minor Resistance Line
Smart Structure Breaks & Order BlocksOverview (What it does)
The indicator “Smart Structure Breaks & Order Blocks” detects market structure using swing highs and lows, identifies Break of Structure (BOS) events, and automatically draws order blocks (OBs) from the origin candle. These zones extend to the right and change color/outline when mitigated or invalidated. By formalizing and automating part of discretionary analysis, it provides consistent zone recognition.
Main Components
Swing Detection: ta.pivothigh/ta.pivotlow identify confirmed swing points.
BOS Detection: Determines if the recent swing high/low is broken by close (strict mode) or crossover.
OB Creation: After a BOS, the opposite candle (bearish for bullish BOS, bullish for bearish BOS) is used to generate an order block zone.
Zone Management: Limits the number of zones, extends them to the right, and tracks tagged (mitigated) or invalidated states.
Input Parameters
Left/Right Pivot (default 6/6): Number of bars required on each side to confirm a swing. Higher values = smoother swings.
Max Zones (default 4): Maximum zones stored per direction (bull/bear). Oldest zones are overwritten.
Zone Confirmation Lookback (default 3): Ensures OB origin candle validity by checking recent highs/lows.
Show Swing Points (default ON): Displays triangles on swing highs/lows.
Require close for BOS? (default ON): Strict BOS (close required) vs loose BOS (line crossover).
Use candle body for zones (default OFF): Zones drawn from candle body (ON) or wick (OFF).
Signal Definition & Logic
Swing Updates: Latest confirmed pivots update lastHighLevel / lastLowLevel.
BOS (Break of Structure):
Bullish – close breaks last swing high.
Bearish – close breaks last swing low.
Only one valid BOS per swing (avoids duplicates).
OB Detection:
Bullish BOS → previous bearish candle with lowest low forms the OB.
Bearish BOS → previous bullish candle with highest high forms the OB.
Zones: Bull = green, Bear = red, semi-transparent, extended to the right.
Zone States:
Mitigated: Price touches the zone → border highlighted.
Invalidated:
Bull zone → close below → turns red.
Bear zone → close above → turns green.
Chart Appearance
Swing High: red triangle above bar
Swing Low: green triangle below bar
Bull OB: green zone (border highlighted on touch)
Bear OB: red zone (border highlighted on touch)
Invalid Zones: Bull zones turn reddish, Bear zones turn greenish
Practical Use (Trading Assistance)
Trend Following Entries: Buy pullbacks into green OBs in uptrends, sell rallies into red OBs in downtrends.
Focus on First Touch: First mitigation after BOS often has higher reaction probability.
Confluence: Combine with higher timeframe trend, volume, session levels, key price levels (previous highs/lows, VWAP, etc.).
Stops/Targets:
Bull – stop below zone, partial take profit at swing high or resistance.
Bear – stop above zone, partial take profit at swing low or support.
Parameter Tuning (per market/timeframe)
Pivot (6/6 → 4/4/8/8): Lower for scalping (3–5), medium for day trading (5–8), higher for swing trading (8–14). Increase to reduce noise.
Strict Break: ON to reduce false breaks in ranging markets; OFF for earlier signals.
Body Zones: ON for assets with long wicks, OFF for cleaner OBs in liquid instruments.
Zone Confirmation (default 3): Increase for stricter OB origin, fewer zones.
Max Zones (default 4 → 6–10): Increase for higher volatility, decrease to avoid clutter.
Strengths
Standardizes BOS and OB detection that is usually subjective.
Tracks mitigation and invalidation automatically.
Adaptable: allows body/wick zone switching for different instruments.
Limitations
Pivot-based: Signals appear only after pivots confirm (slight lag).
Zones reflect past balance: Can fail after new events (news, earnings, macro data).
Range-heavy markets: More false BOS; consider stricter settings.
Backtesting: This script is for drawing/visual aid; trading rules must be defined separately.
Workflow Example
Identify higher timeframe trend (4H/Daily).
On lower TF (15–60m), wait for BOS and new OB.
Enter on first mitigation with confirmation candle.
Stop beyond zone; targets based on R multiples and swing points.
FAQ
Q: Why are zones invalidated quickly?
A: Flow reversal after BOS. Adjust pivots higher, enable Strict mode, or switch to Body zones to reduce noise.
Q: What does “tagged” mean?
A: Price touched the zone once = mitigated. Implies some orders in that zone may have been filled.
Q: Body or Wick zones?
A: Wick zones are fine in clean markets. For volatile pairs with long wicks, body zones provide more realistic areas.
Customization Tips (Code perspective)
Zone storage: Currently ring buffer ((idx+1) % zoneLimit). Could prioritize keeping unmitigated zones.
Automated testing: Add strategy.entry/exit for rule-based backtests.
Multi-timeframe: Use request.security() for higher timeframe swings/BOS.
Visualization: Add labels for BOS bars, tag zones with IDs, count touches.
Summary
This indicator formalizes the cycle Swing → BOS → OB creation → Mitigation/Invalidation, providing consistent structure analysis and zone tracking. By tuning sensitivity and strictness, and combining with higher timeframe context, it enhances pullback/continuation trading setups. Always combine with proper risk management.
FVG Radar [Mr_Rakun]The FVG Radar indicator is designed to automatically detect Fair Value Gaps (FVG) on your TradingView chart. It visually highlights bullish and bearish gaps with colored boxes and provides alerts when specific conditions are met.
How It Works
Fair Value Gap (FVG) Detection:
The script identifies gaps based on previous price action. A bullish FVG is recognized when there is a gap below a higher low candle, and a bearish FVG when there is a gap above a lower high candle.
Radar Area:
A yellow “Radar Area” box is drawn on the chart using upper and lower bands defined as a percentage above and below the current price. This area helps you visualize where the price is relative to these bands.
Alerts:
Alerts are triggered based on user-defined conditions:
When price crosses half of the gap (if the "Clear FVG When Price Reaches Half" option is enabled).
When price fully fills the gap (if the option is disabled).
The alert will only be activated after waiting a specified number of bars post-gap formation (as set by the "Wait X Bars After FVG Formation" parameter).
Input Parameters
Radar Upper Band (%):
Sets the upper threshold percentage relative to the current price for the radar area.
Radar Lower Band (%):
Sets the lower threshold percentage relative to the current price for the radar area.
Minimum FVG Size (%):
Determines the minimum size (as a percentage) for a gap to be recognized as a valid FVG.
Clear FVG When Price Reaches Half:
If enabled, the FVG will be cleared when the price reaches the midpoint of the gap. If disabled, the entire gap must be filled before it is cleared.
Wait X Bars After FVG Formation:
Specifies the number of bars to wait after an FVG is detected before triggering an alert. This delay helps to avoid premature alerts.
Bullish and Bearish FVG Colors and Opacity:
Customize the appearance of the FVG boxes for bullish (green) and bearish (red) gaps, including the opacity of these visual elements.
How to Use
Add the Indicator:
Load the FVG Radar indicator on your TradingView chart.
Customize Settings:
Adjust the input parameters based on your trading style and the market’s volatility. The radar area settings help you set your own visual reference for price deviations.
Monitor the Chart:
Watch for the colored boxes that represent FVGs. The boxes will display the size of the gap as a percentage.
Respond to Alerts:
When an alert is triggered after the specified number of bars, it indicates that the price has interacted with the gap. Use this information to guide your trading decisions.
Türkçe --------------------------------------------
FVG Radar göstergesi, TradingView grafiğinizde Fair Value Gap (FVG) – yani adil değer boşluklarını – otomatik olarak tespit etmek için tasarlanmıştır. Bu boşluklar, yükseliş ve düşüş boşluklarını farklı renkli kutularla vurgular ve belirli koşullar sağlandığında uyarılar verir.
Nasıl Çalışır
Fair Value Gap (FVG) Tespiti:
Gösterge, önceki fiyat hareketlerine dayalı olarak boşlukları belirler. Yükseliş boşluğu, düşük seviyenin yukarıdaki mumun altındaki boşlukla oluştuğu durumlarda; düşüş boşluğu ise, yüksek seviyenin aşağıdaki mumun üstünde boşluk oluştuğunda tespit edilir.
Radar Alanı:
Grafikte, mevcut fiyata göre belirlenen üst ve alt yüzde bantlarına dayalı olarak sarı renkte “Radar Alanı” kutusu çizilir. Bu alan, fiyatın bu bantlara göre nerede olduğunu görsel olarak anlamanıza yardımcı olur.
Uyarılar:
Kullanıcının belirlediği koşullara göre uyarılar verilir:
Fiyat, boşluğun yarısına ulaştığında (eğer "FVG'nin yarısına ulaştığında temizle" seçeneği etkinse).
Fiyat boşluğu tamamen doldurduğunda (seçenek devre dışı bırakıldığında).
Uyarı, boşluk oluşumundan sonra belirlenen bar sayısı kadar bekledikten sonra tetiklenir ("FVG Oluşumundan Sonra X Bar Bekle" parametresi).
Giriş Parametreleri
Radar Upper Band (%):
Mevcut fiyata göre radar alanı için üst eşik yüzdesini ayarlar.
Radar Lower Band (%):
Mevcut fiyata göre radar alanı için alt eşik yüzdesini ayarlar.
Minimum FVG Size (%):
Bir boşluğun geçerli bir FVG olarak tanınabilmesi için gereken minimum boyutu (yüzde olarak) belirler.
FVG'nin yarısına ulaştığında temizle:
Etkinse, fiyat boşluğun orta noktasına ulaştığında boşluk temizlenir. Devre dışı bırakılırsa, boşluğun tamamen doldurulması gerekir.
FVG Oluşumundan Sonra X Bar Bekle:
Bir FVG tespit edildikten sonra uyarı tetiklenmeden önce beklenmesi gereken bar sayısını belirler. Bu gecikme, erken uyarıların önüne geçmeyi amaçlar.
Yükseliş ve Düşüş FVG Renkleri ve Opaklık:
Yükseliş boşlukları (yeşil) ve düşüş boşlukları (kırmızı) için kutuların görünümünü ve opaklığını özelleştirmenize olanak tanır.
Nasıl Kullanılır
Göstergeyi Ekleyin:
FVG Radar göstergesini TradingView grafiğinize ekleyin.
Ayarları Özelleştirin:
Ticaret tarzınıza ve piyasanın oynaklığına göre giriş parametrelerini ayarlayın. Radar alanı ayarları, fiyat sapmalarını kendi görsel referansınızla tanımlamanıza yardımcı olur.
Grafiği İzleyin:
FVG’leri temsil eden renkli kutuları takip edin. Kutular, boşluğun yüzdelik büyüklüğünü gösterecektir.
Uyarılara Tepki Verin:
Belirlenen bar sayısı sonrasında tetiklenen uyarı, fiyatın boşluk ile etkileşime girdiğini gösterir. Bu bilgiyi, ticaret kararlarınızı yönlendirmek için kullanın.
Smart Money Concept Change of Character Break of StructureSMC Structure
Visualizes Change of Character (CHoCH) and Break of Structure (BoS) - two fundamental Smart Money Concepts for identifying trend reversals and continuations.
This is the 1st version of an implementation of this concept.
It is NOT supposed to be used as a signal but a confirmation. Best use during NYSE hours.
Full Description
Overview
This indicator automatically detects and displays two core Smart Money Concepts (SMC) directly on your chart:
CHoCH (Change of Character) – The first structural break against the prevailing trend, signaling a potential reversal
BoS (Break of Structure) – A structural break in the direction of the current trend, confirming continuation
These concepts are essential building blocks of SMC trading methodology, helping traders identify where institutional players may be entering or exiting positions.
How It Works
The indicator uses pivot-based swing detection to identify significant highs and lows. When price breaks through these levels, it classifies the move as either a CHoCH or BoS based on the current trend context.
CHoCH (Change of Character)
Occurs when price breaks structure AGAINST the current trend
First warning sign that the trend may be reversing
Displayed as a solid horizontal line with "CHoCH" label
Green = Bullish reversal | Red = Bearish reversal
BoS (Break of Structure)
Occurs when price breaks structure IN THE DIRECTION of the current trend
Confirms that the existing trend remains intact
Displayed as a dashed horizontal line with "BoS" label
Teal = Bullish continuation | Maroon = Bearish continuation
Visual Example
Uptrend with BoS (continuation):
HH ◄── BoS (trend continues)
/
HL
/
HH
/
HL
Uptrend → CHoCH → Downtrend (reversal):
HH
/ \
HL \
LL ◄── CHoCH (trend reversal!)
Settings
Pivot Settings
Pivot Lookback: Number of bars used to identify swing highs/lows (default: 5). Higher values = fewer but more significant structure points.
Display Options
Show CHoCH: Toggle CHoCH visualization
Show BoS: Toggle BoS visualization
Show Swing Points: Display SH/SL labels at detected pivots
Extend Lines to Right: Extend structure lines into future bars
Show Info Table: Display current trend and last swing levels
Show Trend Background: Color the chart background based on trend direction
Colors
Fully customizable colors for all elements
How to Use
Identify the trend: Look at the sequence of CHoCH and BoS signals to understand market structure
Watch for CHoCH: A CHoCH signals potential reversal – wait for confirmation before trading against the previous trend
Trade with BoS: BoS confirms trend continuation – look for entries on pullbacks in the direction of the trend
Combine with other SMC concepts: Works great alongside Order Blocks, Fair Value Gaps, and liquidity concepts
Tips
Use higher pivot lookback values on higher timeframes for cleaner signals
A CHoCH doesn't guarantee reversal – it's the first warning sign, not confirmation
Multiple BoS signals in a row indicate a strong, healthy trend
Look for CHoCH occurring at key levels (support/resistance, order blocks) for higher probability setups
Feedback Welcome!
This is an open-source indicator and I'd love to hear your thoughts!
Please comment below if you have:
Feature requests or ideas for improvements
Bug reports or issues
Suggestions for additional SMC concepts to add
Your feedback helps make this indicator better for everyone. Happy trading! 🚀
Sweep2Trade Pro [CHE]Sweep2Trade Pro \ — Liquidity Sweep → Trend → Confirmation
Sweep2Trade Pro \ helps you catch high-probability reversals or continuations that start with a liquidity sweep, align with the T3 trend, and finalize with a structure confirmation (BOS). It’s designed to reduce noise, time your entries, and keep you out of weak, chop-driven signals.
What’s a “sweep”?
A liquidity sweep happens when price briefly breaks a prior swing high/low (where many stops sit), triggers those stops, and then snaps back. This “stop-hunt” creates liquidity for bigger players and often precedes a sharp move in the opposite direction if the break fails, or fuels continuation if structure actually shifts.
What’s a BOS (Break of Structure)?
A BOS is a price action event where the market takes out a recent swing level in the trend’s direction, signaling continuation and confirming that structure has shifted (bullish BOS through a recent swing high, bearish BOS through a recent swing low).
How the indicator works (at a glance)
1. Regime Filter (T3 + R²)
T3 Moving Average: A smoother, faster-responding moving average that aims to reduce lag while filtering noise, so trend direction changes are clearer.
R² (Coefficient of Determination): Measures how “linear” the recent price path is (0→1). Higher values = stronger, cleaner trend; lower values = more chop. Used here to allow trades only when trend quality exceeds a user-set threshold.
2. Sweep Detection
Bullish sweep: price pokes below a prior swing low and closes back above it.
Bearish sweep: price pokes above a prior swing high and closes back below it.
Lookback length is configurable.
3. Sequence Lock (built-in FSM)
The script manages state in phases so you don’t jump the gun:
Phase 1: Sweep detected → wait for T3 to turn in the corresponding direction.
Phase 2: T3 direction confirmed → show “SWEEP OK” and wait for final confirmation.
Trade Signal: Only fires if confirmation arrives before a timeout.
4. Confirmation Layer
BOS via wick or close (you choose),
Strong close toward the signal (top/bottom quartile of the candle),
Optional “close above/below T3” condition.
These checks help avoid weak sweeps that immediately fade.
5. Alerts & Visuals
“SWEEP OK” markers show when the sweep + T3 direction align.
Final BUY/SELL arrows appear only when the confirmation layer passes.
Ready-made alert conditions for automation.
What you can do with it
Time reversals after sweeps: Enter when a stop-hunt fades and structure confirms.
Ride continuations: Use BOS with the T3 trend to pyramid or re-enter with structure on your side.
Filter chop: Let R² gate entries to periods with cleaner directional drift.
Automate: Use the included alerts with your platform or webhook setup.
Inputs (key settings)
Regime Filter
T3 Length / Volume Factor: Controls smoothness and responsiveness. Smaller length → faster, more sensitive; higher volume factor → smoother curve.
R² Lookback & Threshold: Length of the linear fit window and the minimum “trend quality” required. Higher thresholds mean fewer, cleaner signals.
Sweep / Sequence
Swing Lookback: How far back to define the “reference” high/low for sweeps.
Timeout: Maximum bars allowed between phases to keep signals fresh.
Restart timeout on Phase 2: Optional safety so entries don’t go stale.
Confirmation
BOS Lookback: Micro-pivot window for structure breaks.
Wick vs Close BOS: Conservative traders may prefer close.
Require close above/below T3: Tightens confirmation with trend alignment.
Practical guide (quick start)
1. Timeframe & markets: Works across majors, indices, and crypto. Start with 5m–1h intraday or 1h–4h swing; adjust R² threshold upward on noisier pairs.
2. Entry recipe (Long):
Bullish sweep of a prior low → T3 turns up → BOS/strong close.
Optional: enable “close above T3” for extra confirmation.
3. Entry recipe (Short): Mirror the above.
4. Stops: Common choices are just beyond the sweep wick (tighter) or past the BOS invalidation (safer).
5. Targets: Previous structural levels, measured move, or a T3 trail (exit when price closes back through T3).
6. Avoid low-quality contexts: If R² is very low, market is likely ranging erratically—skip or widen filters.
Tips & best practices
Context first: The same sweep means different things in a strong trend vs. flat regime; that’s why the T3+R² filter exists.
BOS choice: Wick-based BOS is earlier but noisier; close-based BOS is slower but cleaner. Tune per market.
Backtest -> Forward test: Validate settings per symbol/timeframe; then paper trade before going live.
Risk: Fixed fractional risk with asymmetric R\:R (e.g., 1:1.5–1:3) generally performs better than “all-in” discretionary sizing.
Behind the scenes (for the curious)
T3 is a multi-stage EMA construction that produces a smooth curve with reduced lag versus simple/standard EMAs.
R² is the square of correlation (0–1). Here it’s used as a moving gauge of how well price aligns to a linear path—our “trend quality” dial.
Stop-hunts / sweeps are a recognized microstructure phenomenon where clustered stops provide the liquidity that fuels the next move.
Disclaimer
No indicator guarantees profits. Sweep2Trade Pro \ is a decision aid; always combine with solid risk management and your own judgment. Backtest, forward test, and size responsibly.
The content provided, including all code and materials, is strictly for educational and informational purposes only. It is not intended as, and should not be interpreted as, financial advice, a recommendation to buy or sell any financial instrument, or an offer of any financial product or service. All strategies, tools, and examples discussed are provided for illustrative purposes to demonstrate coding techniques and the functionality of Pine Script within a trading context.
Any results from strategies or tools provided are hypothetical, and past performance is not indicative of future results. Trading and investing involve high risk, including the potential loss of principal, and may not be suitable for all individuals. Before making any trading decisions, please consult with a qualified financial professional to understand the risks involved.
By using this script, you acknowledge and agree that any trading decisions are made solely at your discretion and risk.
Enhance your trading precision and confidence 🚀
Happy trading
Chervolino
Contrarian 100 MAPairs nicely with Enhanced-Stock-Ticker-with-50MA-vs-200MA located here:
Description
The Contrarian 100 MA is a sophisticated Pine Script v6 indicator designed for traders seeking to identify key market structure shifts and trend reversals using a combination of a 100-period Simple Moving Average (SMA) envelope and Inner Circle Trader (ICT) Break of Structure (BoS) and Market Structure Shift (MSS) logic. By overlaying a semi-transparent SMA-based shadow on the price chart and plotting bullish and bearish structure signals, this indicator helps traders visualize critical price levels and potential trend changes. It leverages higher timeframe (HTF) pivot points and dynamic logic to adapt to various chart timeframes, making it ideal for swing and contrarian trading strategies. Customizable colors, timeframes, and alert conditions enhance its versatility for manual and automated trading setups.
Key Features
SMA Envelope: Plots a 100-period SMA for high and low prices, creating a semi-transparent (50% opacity) purple shadow to highlight the price range and provide context for price movements.
ICT BoS/MSS Logic: Identifies Break of Structure (BoS) and Market Structure Shift (MSS) signals for both bullish and bearish conditions, based on HTF pivot points.
Dynamic Timeframe Support: Adjusts pivot detection based on user-selected HTF (default: 1D) and chart timeframe (1M, 5M, 15M, 30M, 1H, 4H, 1D), ensuring adaptability across markets.
Visual Signals: Draws dotted lines for BoS (bullish/bearish) and MSS (bullish/bearish) signals at pivot levels, with customizable colors for easy identification.
Contrarian Approach: Signals potential reversals by combining SMA context with ICT structure breaks, ideal for traders looking to capitalize on trend shifts.
Alert Conditions: Supports alerts for bullish/bearish BoS and MSS signals, enabling integration with TradingView’s alert system for automated trading.
Performance Optimization: Uses efficient pivot detection and line management to minimize resource usage while maintaining accuracy.
Technical Details
SMA Calculation:
Computes 100-period SMAs for high (smaHigh) and low (smaLow) prices.
Plots invisible SMAs (fully transparent) and fills the area between them with 50% transparent purple for visual context.
Pivot Detection:
Uses ta.pivothigh and ta.pivotlow to identify HTF swing points, with dynamic lookback periods (rlBars: 5 for daily, 2 for intraday).
Tracks pivot highs (pH, nPh) and lows (pL, nPl) using a custom piv type for price and time.
BoS/MSS Logic:
Bullish BoS: Triggered when price breaks above a pivot high in a bullish trend, drawing a line at the pivot level.
Bearish BoS: Triggered when price breaks below a pivot low in a bearish trend.
Bullish MSS: Occurs when price breaks a pivot high in a bearish trend, signaling a potential trend reversal.
Bearish MSS: Occurs when price breaks a pivot low in a bullish trend.
Lines are drawn using line.new with xloc.bar_time for precise alignment, styled as dotted with customizable colors.
HTF Integration: Fetches HTF close prices and pivot data using request.security with lookahead_on for accurate signal timing.
Line Management: Maintains an array of lines (lin), removing outdated lines when new MSS signals occur to keep the chart clean.
Pivot Reset: Clears broken pivots (e.g., when price exceeds a pivot high or falls below a pivot low) to ensure fresh signal generation.
How to Use
Add to Chart:
Copy the script into TradingView’s Pine Editor and apply it to your chart.
Configure Settings:
SMA Length: Adjust the SMA period (default: 100 bars) to suit your trading style.
Structure Timeframe: Set the HTF for pivot detection (default: 1D).
Chart Timeframe: Select the chart timeframe (1M, 5M, 15M, 30M, 1H, 4H, 1D) to adjust pivot sensitivity.
Colors: Customize bullish/bearish BoS and MSS line colors via input settings.
Interpret Signals:
Bullish BoS: White dotted line (default) at a broken pivot high in a bullish trend, indicating trend continuation.
Bearish BoS: White dotted line at a broken pivot low in a bearish trend.
Bullish MSS: White dotted line at a broken pivot high in a bearish trend, suggesting a reversal to bullish.
Bearish MSS: White dotted line at a broken pivot low in a bullish trend, suggesting a reversal to bearish.
Use the SMA shadow to gauge price position within the recent range.
Set Alerts:
Create alerts for bullish/bearish BoS and MSS signals using TradingView’s alert system.
Customize Visuals:
Adjust line colors or SMA fill transparency via TradingView’s settings for better visibility.
Example Use Cases
Swing Trading: Use MSS signals to enter trades at potential trend reversals, with the SMA envelope confirming price extremes.
Contrarian Trading: Capitalize on BoS and MSS signals to trade against prevailing trends, using the SMA shadow for context.
Automated Trading: Integrate BoS/MSS alerts with trading bots for systematic entries and exits.
Multi-Timeframe Analysis: Combine HTF signals (e.g., 1D) with lower timeframe charts (e.g., 1H) for precise entries.
Notes
Testing: Backtest the indicator on your chosen market and timeframe to validate performance.
Compatibility: Built for Pine Script v6 and tested on TradingView as of June 19, 2025.
Limitations: Signals rely on HTF pivot accuracy, which may lag in fast-moving markets. Adjust rlBars or timeframe for sensitivity.
Optional Enhancements: Consider uncommenting or adding a histogram for SMA divergence (e.g., smaHigh - smaLow) for additional insights.
Acknowledgments
This indicator combines ICT’s market structure concepts with a dynamic SMA envelope to provide a unique contrarian trading tool. Share your feedback or suggestions in the TradingView comments, and happy trading!
lib_smcLibrary "lib_smc"
This is an adaptation of LuxAlgo's Smart Money Concepts indicator with numerous changes. Main changes include integration of object based plotting, plenty of performance improvements, live tracking of Order Blocks, integration of volume profiles to refine Order Blocks, and many more.
This is a library for developers, if you want this converted into a working strategy, let me know.
buffer(item, len, force_rotate)
Parameters:
item (float)
len (int)
force_rotate (bool)
buffer(item, len, force_rotate)
Parameters:
item (int)
len (int)
force_rotate (bool)
buffer(item, len, force_rotate)
Parameters:
item (Profile type from robbatt/lib_profile/32)
len (int)
force_rotate (bool)
swings(len)
INTERNAL: detect swing points (HH and LL) in given range
Parameters:
len (simple int) : range to check for new swing points
Returns: values are the price level where and if a new HH or LL was detected, else na
method init(this)
Namespace types: OrderBlockConfig
Parameters:
this (OrderBlockConfig)
method delete(this)
Namespace types: OrderBlock
Parameters:
this (OrderBlock)
method clear_broken(this, broken_buffer)
INTERNAL: delete internal order blocks box coordinates if top/bottom is broken
Namespace types: map
Parameters:
this (map)
broken_buffer (map)
Returns: any_bull_ob_broken, any_bear_ob_broken, broken signals are true if an according order block was broken/mitigated, broken contains the broken block(s)
create_ob(id, mode, start_t, start_i, top, end_t, end_i, bottom, break_price, early_confirmation_price, config, init_plot, force_overlay)
INTERNAL: set internal order block coordinates
Parameters:
id (int)
mode (int) : 1: bullish, -1 bearish block
start_t (int)
start_i (int)
top (float)
end_t (int)
end_i (int)
bottom (float)
break_price (float)
early_confirmation_price (float)
config (OrderBlockConfig)
init_plot (bool)
force_overlay (bool)
Returns: signals are true if an according order block was broken/mitigated
method align_to_profile(block, align_edge, align_break_price)
Namespace types: OrderBlock
Parameters:
block (OrderBlock)
align_edge (bool)
align_break_price (bool)
method create_profile(block, opens, tops, bottoms, closes, values, resolution, vah_pc, val_pc, args, init_calculated, init_plot, force_overlay)
Namespace types: OrderBlock
Parameters:
block (OrderBlock)
opens (array)
tops (array)
bottoms (array)
closes (array)
values (array)
resolution (int)
vah_pc (float)
val_pc (float)
args (ProfileArgs type from robbatt/lib_profile/32)
init_calculated (bool)
init_plot (bool)
force_overlay (bool)
method create_profile(block, resolution, vah_pc, val_pc, args, init_calculated, init_plot, force_overlay)
Namespace types: OrderBlock
Parameters:
block (OrderBlock)
resolution (int)
vah_pc (float)
val_pc (float)
args (ProfileArgs type from robbatt/lib_profile/32)
init_calculated (bool)
init_plot (bool)
force_overlay (bool)
track_obs(swing_len, hh, ll, top, btm, bull_bos_alert, bull_choch_alert, bear_bos_alert, bear_choch_alert, min_block_size, max_block_size, config_bull, config_bear, init_plot, force_overlay, enabled, extend_blocks, clear_broken_buffer_before, align_edge_to_value_area, align_break_price_to_poc, profile_args_bull, profile_args_bear, use_soft_confirm, soft_confirm_offset, use_retracements_with_FVG_out)
Parameters:
swing_len (int)
hh (float)
ll (float)
top (float)
btm (float)
bull_bos_alert (bool)
bull_choch_alert (bool)
bear_bos_alert (bool)
bear_choch_alert (bool)
min_block_size (float)
max_block_size (float)
config_bull (OrderBlockConfig)
config_bear (OrderBlockConfig)
init_plot (bool)
force_overlay (bool)
enabled (bool)
extend_blocks (simple bool)
clear_broken_buffer_before (simple bool)
align_edge_to_value_area (simple bool)
align_break_price_to_poc (simple bool)
profile_args_bull (ProfileArgs type from robbatt/lib_profile/32)
profile_args_bear (ProfileArgs type from robbatt/lib_profile/32)
use_soft_confirm (simple bool)
soft_confirm_offset (float)
use_retracements_with_FVG_out (simple bool)
method draw(this, config, extend_only)
Namespace types: OrderBlock
Parameters:
this (OrderBlock)
config (OrderBlockConfig)
extend_only (bool)
method draw(blocks, config)
INTERNAL: plot order blocks
Namespace types: array
Parameters:
blocks (array)
config (OrderBlockConfig)
method draw(blocks, config)
INTERNAL: plot order blocks
Namespace types: map
Parameters:
blocks (map)
config (OrderBlockConfig)
method cleanup(this, ob_bull, ob_bear)
removes all Profiles that are older than the latest OrderBlock from this profile buffer
Namespace types: array
Parameters:
this (array type from robbatt/lib_profile/32)
ob_bull (OrderBlock)
ob_bear (OrderBlock)
_plot_swing_points(mode, x, y, show_swing_points, linecolor_swings, keep_history, show_latest_swings_levels, trail_x, trail_y, trend)
INTERNAL: plot swing points
Parameters:
mode (int) : 1: bullish, -1 bearish block
x (int) : x-coordingate of swing point to plot (bar_index)
y (float) : y-coordingate of swing point to plot (price)
show_swing_points (bool) : switch to enable/disable plotting of swing point labels
linecolor_swings (color) : color for swing point labels and lates level lines
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
show_latest_swings_levels (bool)
trail_x (int) : x-coordinate for latest swing point (bar_index)
trail_y (float) : y-coordinate for latest swing point (price)
trend (int) : the current trend 1: bullish, -1: bearish, to determine Strong/Weak Low/Highs
_pivot_lvl(mode, trend, hhll_x, hhll, super_hhll, filter_insignificant_internal_breaks)
INTERNAL: detect whether a structural level has been broken and if it was in trend direction (BoS) or against trend direction (ChoCh), also track the latest high and low swing points
Parameters:
mode (simple int) : detect 1: bullish, -1 bearish pivot points
trend (int) : current trend direction
hhll_x (int) : x-coordinate of newly detected hh/ll (bar_index)
hhll (float) : y-coordinate of newly detected hh/ll (price)
super_hhll (float) : level/y-coordinate of superior hhll (if this is an internal structure pivot level)
filter_insignificant_internal_breaks (bool) : if true pivot points / internal structure will be ignored where the wick in trend direction is longer than the opposite (likely to push further in direction of main trend)
Returns: coordinates of internal structure that has been broken (x,y): start of structure, (trail_x, trail_y): tracking hh/ll after structure break, (bos_alert, choch_alert): signal whether a structural level has been broken
_plot_structure(x, y, is_bos, is_choch, line_color, line_style, label_style, label_size, keep_history)
INTERNAL: plot structural breaks (BoS/ChoCh)
Parameters:
x (int) : x-coordinate of newly broken structure (bar_index)
y (float) : y-coordinate of newly broken structure (price)
is_bos (bool) : whether this structural break was in trend direction
is_choch (bool) : whether this structural break was against trend direction
line_color (color) : color for the line connecting the structural level and the breaking candle
line_style (string) : style (line.style_dashed/solid) for the line connecting the structural level and the breaking candle
label_style (string) : style (label.style_label_down/up) for the label above/below the line connecting the structural level and the breaking candle
label_size (string) : size (size.small/tiny) for the label above/below the line connecting the structural level and the breaking candle
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
structure_values(length, super_hh, super_ll, filter_insignificant_internal_breaks)
detect (and plot) structural breaks and the resulting new trend
Parameters:
length (simple int) : lookback period for swing point detection
super_hh (float) : level/y-coordinate of superior hh (for internal structure detection)
super_ll (float) : level/y-coordinate of superior ll (for internal structure detection)
filter_insignificant_internal_breaks (bool) : if true pivot points / internal structure will be ignored where the wick in trend direction is longer than the opposite (likely to push further in direction of main trend)
Returns: trend: direction 1:bullish -1:bearish, (bull_bos_alert, bull_choch_alert, top_x, top_y, trail_up_x, trail_up): whether and which level broke in a bullish direction, trailing high, (bbear_bos_alert, bear_choch_alert, tm_x, btm_y, trail_dn_x, trail_dn): same in bearish direction
structure_plot(trend, bull_bos_alert, bull_choch_alert, top_x, top_y, trail_up_x, trail_up, hh, bear_bos_alert, bear_choch_alert, btm_x, btm_y, trail_dn_x, trail_dn, ll, color_bull, color_bear, show_swing_points, show_latest_swings_levels, show_bos, show_choch, line_style, label_size, keep_history)
detect (and plot) structural breaks and the resulting new trend
Parameters:
trend (int) : crrent trend 1: bullish, -1: bearish
bull_bos_alert (bool) : if there was a bullish bos alert -> plot it
bull_choch_alert (bool) : if there was a bullish choch alert -> plot it
top_x (int) : latest shwing high x
top_y (float) : latest swing high y
trail_up_x (int) : trailing high x
trail_up (float) : trailing high y
hh (float) : if there was a higher high
bear_bos_alert (bool) : if there was a bearish bos alert -> plot it
bear_choch_alert (bool) : if there was a bearish chock alert -> plot it
btm_x (int) : latest swing low x
btm_y (float) : latest swing low y
trail_dn_x (int) : trailing low x
trail_dn (float) : trailing low y
ll (float) : if there was a lower low
color_bull (color) : color for bullish BoS/ChoCh levels
color_bear (color) : color for bearish BoS/ChoCh levels
show_swing_points (bool) : whether to plot swing point labels
show_latest_swings_levels (bool) : whether to track and plot latest swing point levels with lines
show_bos (bool) : whether to plot BoS levels
show_choch (bool) : whether to plot ChoCh levels
line_style (string) : whether to plot BoS levels
label_size (string) : label size of plotted BoS/ChoCh levels
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
structure(length, color_bull, color_bear, super_hh, super_ll, filter_insignificant_internal_breaks, show_swing_points, show_latest_swings_levels, show_bos, show_choch, line_style, label_size, keep_history, enabled)
detect (and plot) structural breaks and the resulting new trend
Parameters:
length (simple int) : lookback period for swing point detection
color_bull (color) : color for bullish BoS/ChoCh levels
color_bear (color) : color for bearish BoS/ChoCh levels
super_hh (float) : level/y-coordinate of superior hh (for internal structure detection)
super_ll (float) : level/y-coordinate of superior ll (for internal structure detection)
filter_insignificant_internal_breaks (bool) : if true pivot points / internal structure will be ignored where the wick in trend direction is longer than the opposite (likely to push further in direction of main trend)
show_swing_points (bool) : whether to plot swing point labels
show_latest_swings_levels (bool) : whether to track and plot latest swing point levels with lines
show_bos (bool) : whether to plot BoS levels
show_choch (bool) : whether to plot ChoCh levels
line_style (string) : whether to plot BoS levels
label_size (string) : label size of plotted BoS/ChoCh levels
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
enabled (bool)
_check_equal_level(mode, len, eq_threshold, enabled)
INTERNAL: detect equal levels (double top/bottom)
Parameters:
mode (int) : detect 1: bullish/high, -1 bearish/low pivot points
len (int) : lookback period for equal level (swing point) detection
eq_threshold (float) : maximum price offset for a level to be considered equal
enabled (bool)
Returns: eq_alert whether an equal level was detected and coordinates of the first and the second level/swing point
_plot_equal_level(show_eq, x1, y1, x2, y2, label_txt, label_style, label_size, line_color, line_style, keep_history)
INTERNAL: plot equal levels (double top/bottom)
Parameters:
show_eq (bool) : whether to plot the level or not
x1 (int) : x-coordinate of the first level / swing point
y1 (float) : y-coordinate of the first level / swing point
x2 (int) : x-coordinate of the second level / swing point
y2 (float) : y-coordinate of the second level / swing point
label_txt (string) : text for the label above/below the line connecting the equal levels
label_style (string) : style (label.style_label_down/up) for the label above/below the line connecting the equal levels
label_size (string) : size (size.tiny) for the label above/below the line connecting the equal levels
line_color (color) : color for the line connecting the equal levels (and it's label)
line_style (string) : style (line.style_dotted) for the line connecting the equal levels
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
equal_levels_values(len, threshold, enabled)
detect (and plot) equal levels (double top/bottom), returns coordinates
Parameters:
len (int) : lookback period for equal level (swing point) detection
threshold (float) : maximum price offset for a level to be considered equal
enabled (bool) : whether detection is enabled
Returns: (eqh_alert, eqh_x1, eqh_y1, eqh_x2, eqh_y2) whether an equal high was detected and coordinates of the first and the second level/swing point, (eql_alert, eql_x1, eql_y1, eql_x2, eql_y2) same for equal lows
equal_levels_plot(eqh_x1, eqh_y1, eqh_x2, eqh_y2, eql_x1, eql_y1, eql_x2, eql_y2, color_eqh, color_eql, show, keep_history)
detect (and plot) equal levels (double top/bottom), returns coordinates
Parameters:
eqh_x1 (int) : coordinates of first point of equal high
eqh_y1 (float) : coordinates of first point of equal high
eqh_x2 (int) : coordinates of second point of equal high
eqh_y2 (float) : coordinates of second point of equal high
eql_x1 (int) : coordinates of first point of equal low
eql_y1 (float) : coordinates of first point of equal low
eql_x2 (int) : coordinates of second point of equal low
eql_y2 (float) : coordinates of second point of equal low
color_eqh (color) : color for the line connecting the equal highs (and it's label)
color_eql (color) : color for the line connecting the equal lows (and it's label)
show (bool) : whether plotting is enabled
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
Returns: (eqh_alert, eqh_x1, eqh_y1, eqh_x2, eqh_y2) whether an equal high was detected and coordinates of the first and the second level/swing point, (eql_alert, eql_x1, eql_y1, eql_x2, eql_y2) same for equal lows
equal_levels(len, threshold, color_eqh, color_eql, enabled, show, keep_history)
detect (and plot) equal levels (double top/bottom)
Parameters:
len (int) : lookback period for equal level (swing point) detection
threshold (float) : maximum price offset for a level to be considered equal
color_eqh (color) : color for the line connecting the equal highs (and it's label)
color_eql (color) : color for the line connecting the equal lows (and it's label)
enabled (bool) : whether detection is enabled
show (bool) : whether plotting is enabled
keep_history (bool) : weater to remove older swing point labels and only keep the most recent
Returns: (eqh_alert) whether an equal high was detected, (eql_alert) same for equal lows
_detect_fvg(mode, enabled, o, h, l, c, filter_insignificant_fvgs, change_tf)
INTERNAL: detect FVG (fair value gap)
Parameters:
mode (int) : detect 1: bullish, -1 bearish gaps
enabled (bool) : whether detection is enabled
o (float) : reference source open
h (float) : reference source high
l (float) : reference source low
c (float) : reference source close
filter_insignificant_fvgs (bool) : whether to calculate and filter small/insignificant gaps
change_tf (bool) : signal when the previous reference timeframe closed, triggers new calculation
Returns: whether a new FVG was detected and its top/mid/bottom levels
_clear_broken_fvg(mode, upper_boxes, lower_boxes)
INTERNAL: clear mitigated FVGs (fair value gaps)
Parameters:
mode (int) : detect 1: bullish, -1 bearish gaps
upper_boxes (array) : array that stores the upper parts of the FVG boxes
lower_boxes (array) : array that stores the lower parts of the FVG boxes
_plot_fvg(mode, show, top, mid, btm, border_color, extend_box)
INTERNAL: plot (and clear broken) FVG (fair value gap)
Parameters:
mode (int) : plot 1: bullish, -1 bearish gap
show (bool) : whether plotting is enabled
top (float) : top level of fvg
mid (float) : center level of fvg
btm (float) : bottom level of fvg
border_color (color) : color for the FVG box
extend_box (int) : how many bars into the future the FVG box should be extended after detection
fvgs_values(o, h, l, c, filter_insignificant_fvgs, change_tf, enabled)
detect (and plot / clear broken) FVGs (fair value gaps), and return alerts and level values
Parameters:
o (float) : reference source open
h (float) : reference source high
l (float) : reference source low
c (float) : reference source close
filter_insignificant_fvgs (bool) : whether to calculate and filter small/insignificant gaps
change_tf (bool) : signal when the previous reference timeframe closed, triggers new calculation
enabled (bool) : whether detection is enabled
Returns: (bullish_fvg_alert, bull_top, bull_mid, bull_btm): whether a new bullish FVG was detected and its top/mid/bottom levels, (bearish_fvg_alert, bear_top, bear_mid, bear_btm): same for bearish FVGs
fvgs_plot(bullish_fvg_alert, bull_top, bull_mid, bull_btm, bearish_fvg_alert, bear_top, bear_mid, bear_btm, color_bull, color_bear, extend_box, show)
Parameters:
bullish_fvg_alert (bool)
bull_top (float)
bull_mid (float)
bull_btm (float)
bearish_fvg_alert (bool)
bear_top (float)
bear_mid (float)
bear_btm (float)
color_bull (color) : color for bullish FVG boxes
color_bear (color) : color for bearish FVG boxes
extend_box (int) : how many bars into the future the FVG box should be extended after detection
show (bool) : whether plotting is enabled
Returns: (bullish_fvg_alert, bull_top, bull_mid, bull_btm): whether a new bullish FVG was detected and its top/mid/bottom levels, (bearish_fvg_alert, bear_top, bear_mid, bear_btm): same for bearish FVGs
fvgs(o, h, l, c, filter_insignificant_fvgs, change_tf, color_bull, color_bear, extend_box, enabled, show)
detect (and plot / clear broken) FVGs (fair value gaps)
Parameters:
o (float) : reference source open
h (float) : reference source high
l (float) : reference source low
c (float) : reference source close
filter_insignificant_fvgs (bool) : whether to calculate and filter small/insignificant gaps
change_tf (bool) : signal when the previous reference timeframe closed, triggers new calculation
color_bull (color) : color for bullish FVG boxes
color_bear (color) : color for bearish FVG boxes
extend_box (int) : how many bars into the future the FVG box should be extended after detection
enabled (bool) : whether detection is enabled
show (bool) : whether plotting is enabled
Returns: (bullish_fvg_alert): whether a new bullish FVG was detected, (bearish_fvg_alert): same for bearish FVGs
OrderBlock
Fields:
id (series int)
dir (series int)
left_top (chart.point)
right_bottom (chart.point)
break_price (series float)
early_confirmation_price (series float)
ltf_high (array)
ltf_low (array)
ltf_volume (array)
plot (Box type from robbatt/lib_plot_objects/49)
profile (Profile type from robbatt/lib_profile/32)
trailing (series bool)
extending (series bool)
awaiting_confirmation (series bool)
touched_break_price_before_confirmation (series bool)
soft_confirmed (series bool)
has_fvg_out (series bool)
hidden (series bool)
broken (series bool)
OrderBlockConfig
Fields:
show (series bool)
show_last (series int)
show_id (series bool)
show_profile (series bool)
args (BoxArgs type from robbatt/lib_plot_objects/49)
txt (series string)
txt_args (BoxTextArgs type from robbatt/lib_plot_objects/49)
delete_when_broken (series bool)
broken_args (BoxArgs type from robbatt/lib_plot_objects/49)
broken_txt (series string)
broken_txt_args (BoxTextArgs type from robbatt/lib_plot_objects/49)
broken_profile_args (ProfileArgs type from robbatt/lib_profile/32)
use_profile (series bool)
profile_args (ProfileArgs type from robbatt/lib_profile/32)
ICT/SMC HUDOverview
This indicator is an ICT/SMC-inspired market structure tool that detects:
Swing Structure (pivot-based)
BOS (Break of Structure) and CHoCH (Change of Character)
Liquidity Sweeps (buy-side & sell-side)
Premium/Discount filter using a simple equilibrium (EQ) midpoint
A Hold Score (0–5) system calculated from a higher timeframe (HTF)
Optional TP/SL visualization box (with TP2 expansion when Hold Score is strong)
⚠️ This is an educational tool, not a guaranteed trading system.
Core Logic (Where signals come from)
This script builds a simplified ICT/SMC framework using 3 layers:
1) Market Structure via Swings (Pivot High/Low)
The script finds swing highs/lows using:
ta.pivothigh(high, swingLen, swingLen)
ta.pivotlow(low, swingLen, swingLen)
These swings become the reference points for structure breaks.
2) BOS / CHoCH Detection
BOS Up = price closes above the last swing high
BOS Down = price closes below the last swing low
trend updates to 1 (bullish) or -1 (bearish) based on BOS
CHoCH triggers when BOS occurs against the current trend
CHoCH Up = trend was bearish, then BOS Up happens
CHoCH Down = trend was bullish, then BOS Down happens
3) Liquidity Sweep + Premium/Discount Filter
Sell-side sweep: low breaks below last swing low, but closes back above it
Buy-side sweep: high breaks above last swing high, but closes back below it
Equilibrium (EQ) midpoint is:
(lastSwingHigh + lastSwingLow) / 2
Discount = price below EQ
Premium = price above EQ
Signal Rules (Buy / Sell)
Buy Signal
Sell-side sweep + (CHoCH Up or BOS Up)
OR
BOS Up while price is in Discount
Sell Signal
Buy-side sweep + (CHoCH Down or BOS Down)
OR
BOS Down while price is in Premium
Hold Score System (0–5) — HTF confirmation
The script calculates a Hold Score from HTF using 5 checks:
HTF EMA Bias
Bullish hold bias: EMA Fast > EMA Mid
Bearish hold bias: EMA Fast < EMA Mid
Volatility Expansion
Uses HTF Bollinger Band width; if width is increasing, expansion is “OK”
Mid Acceptance
HTF close relative to HTF BB basis (SMA)
Follow-through after Entry
Requires N consecutive bars closing in favor of the entry direction
No Opposite Break
Avoid holding if opposite BOS/CHoCH appears
Hold Score = sum of the 5 checks (0–5)
TP/SL Box (Optional)
When a new Buy/Sell signal occurs:
Entry is set at current close
SL uses:
Swing-based stop (lowest/ highest of last N bars)
optional ATR buffer
TP1 and TP2 are set using Risk:Reward ratios
TP2 Expansion (Optional)
If Hold Score ≥ threshold:
TP2 RR increases by extraRRonHold
Can be set to expand only (never shrink)
Auto-hide TP/SL Drawings (Optional)
If enabled, the TP/SL box/lines/labels will automatically disappear after N bars.
This is useful for clean charts while still keeping Hold Score logic running.
Best Use Cases
✅ Works best during liquidity sessions:
London Killzone
New York Killzone
✅ Recommended timeframes:
Structure: 15m / 1h
Entry refinement: 5m / 1m
Hold Score HTF: 1h or 4h
Inputs Guide (Quick)
Swing length (Structure): controls swing sensitivity (higher = fewer swings)
Hold Score HTF: HTF used for Hold Score confirmation
TP/SL Box: visualization tool, not order execution
Auto-hide: removes drawings after N bars for clean charts
TP2 Expand: increases TP2 target when Hold Score is strong
Disclaimer
This indicator does not place trades and does not guarantee profits. Always manage risk, backtest, and validate with your own strategy.
TrendCraft ICT SwiftEdge// The TrendCraft ICT SwiftEdge is a trend-following indicator that combines Simple Moving Averages (SMAs) with Inner Circle Trader (ICT) concepts, specifically Break of Structure (BOS) and Market Structure Shift (MSS), to generate precise buy and sell signals. This unique mashup leverages the strengths of trend confirmation through SMAs and market structure analysis via ICT to help traders identify high-probability trend entries. The indicator is designed to be intuitive, customizable, and suitable for traders of all levels seeking to align with market trends on various timeframes.
//
// ### What It Does
// The indicator plots two SMAs based on the high and low prices of candles to define the trend direction. It colors the SMAs and fills the area between them to visually indicate whether the price is in a bullish (above both SMAs), bearish (below both SMAs), or neutral (between SMAs) state. Simultaneously, it identifies BOS and MSS levels on a user-defined higher timeframe to confirm trend continuation or reversal points. Buy and sell signals are generated when the price closes above/below the latest BOS or MSS level (based on user preference) while also being correctly positioned relative to the SMAs, ensuring alignment with the trend.
//
// ### Why Combine SMAs and ICT?
// SMAs provide a reliable way to gauge trend direction by smoothing price data, but they can lag or generate false signals in choppy markets. ICT's BOS and MSS concepts address this by focusing on key market structure breaks, offering context for significant price movements. By requiring price to close beyond a BOS or MSS level and align with the SMA-defined trend, the TrendCraft ICT SwiftEdge filters out noise and enhances signal reliability. This combination creates a robust system that balances trend-following simplicity with structural market insights, making it ideal for trend traders.
//
// ### How to Use
// 1. **SMA Length**: Adjust the `SMA Length` (default: 20) to control the sensitivity of the SMAs. Shorter lengths react faster to price changes, while longer lengths provide smoother trends.
// 2. **Structure Timeframe**: Set the `Structure Timeframe` to a higher timeframe (e.g., "1H" on a 15M chart) to calculate BOS and MSS levels. This ensures structural signals are based on significant market moves.
// 3. **Chart Timeframe**: Select the `Chart Timeframe` to optimize pivot point calculations for your current chart (e.g., "30M" for a 30-minute chart).
// 4. **Signal Type**: Choose between "BOS" (default) for signals based on trend continuation breaks or "MSS" for signals based on potential reversal points (breakers).
// 5. **Display Options**: Enable/disable `Show Continuation (BOS)` and `Show Breaker (MSS)` to toggle the visibility of BOS and MSS lines. Customize their colors for better chart clarity.
//
// ### Signals
// - **Buy Signal**: Appears when the close price crosses above the latest BOS or MSS level (based on Signal Type) and is above both SMAs, indicating a bullish trend entry. Marked with a green "Buy" label.
// - **Sell Signal**: Appears when the close price crosses below the latest BOS or MSS level (based on Signal Type) and is below both SMAs, indicating a bearish trend entry. Marked with a red "Sell" label.
//
// ### Originality
// The TrendCraft ICT SwiftEdge stands out by integrating the trend-following reliability of SMAs with the structural precision of ICT's BOS and MSS. Unlike standalone SMA or ICT indicators, this script requires both trend alignment and structural confirmation, reducing false signals. The user-selectable Signal Type (BOS or MSS) adds versatility, allowing traders to adapt the indicator to trend-following or counter-trend strategies. Its dynamic timeframe adjustments and visual clarity make it a unique tool for traders seeking to capture trend entries with confidence.
//
// ### Notes
// - Ensure the `Structure Timeframe` is higher than your chart timeframe to avoid calculation issues.
// - Signals are generated only when the trend state changes to avoid redundant signals in the same trend direction.
// - Past performance is not indicative of future results. Always combine this indicator with other analysis and risk management techniques.
Smart Money Oscillator [ChartPrime]The "Smart Money Oscillator " is a premium and discount zone oscillator with BOS and CHoCH built in for further analysis of price action. This indicator works by first determining the the premium and discount zones by using pivot points and high/lows. The top of this oscillator represents the current premium zone while the bottom half of this oscillator represents the discount zone. This oscillator functionally works like a stochastic oscillator with more sophisticated upper and lower bounds generated using smart money concept theories. We have included a moving average to allow the user to visualize the currant momentum in the oscillator. Another key feature we have included lagging divergences to help traders visualize potential reversal conditions.
Understanding the concepts of Premium and Discount zones, as well as Break of Structure (BoS) and Change of Character (CHoCH), is crucial for traders using the Smart Money Oscillator. These concepts are rooted in market structure analysis, which involves studying price levels and movements.
Premium Zone is where the price is considered to be relatively high or 'overbought'. In this zone, prices have risen significantly and may indicate that the asset is becoming overvalued, potentially leading to a reversal or slowdown in the upward trend.
The Discount Zone represents a 'discount' or 'oversold' area. Here, prices have fallen substantially, suggesting that the asset might be undervalued. This could be an indicator of a potential upward reversal or a pause in the downward trend.
Break of Structure (BoS) is about the continuation of a trend. In a bullish trend, a BoS is identified by the break of a recent higher high. In a bearish trend, it's the break of a recent Lower Low. BoS indicates that the trend is strong and likely to continue in its current direction. It's a sign of strength in the prevailing trend, whether up or down.
Change of Character (CHoCH) is an indication of a potential end to a trend. It occurs when there's a significant change in the market's behavior, contradicting the current trend. For example, in an uptrend characterized by higher highs and higher lows, a CHoCH may occur if a new high is formed but then is followed by an impulsive move downwards. This suggests that the bullish trend may be weakening and a bearish reversal could be imminent. CHoCH is essentially a sign of trend exhaustion and potential reversal.
With each consecutive BoS, the signal line of the oscillator will deepen in color. This allows you to visually see the strength of the current trend. The maximum strength of the trend is found by keeping track of the maximum number of consecutive BoS's within a window of 10. This calculation excludes periods without any BoS's to allow for a more stable max.
Quick Update is a feature that implements a more aggressive algorithm to update the highs and lows. Instead of updating the pivot points exclusively to update the range levels, it will attempt to use the current historical highs/lows to update the bounds. This results in a more responsive range at the cost of stability. There are pros and cons for both settings. With Quick Update disabled, the indicator will allow for strong reversals to register without the indicator maxing out. With Quick Update enabled, the indicator will show shorter term extremes with the risk of the signal being pinned to the extremities during strong trends or large movements. With Quick Update disabled, the oscillator prioritizes stability, using a more historical perspective to set its bounds. When Quick Update is enabled, the oscillator becomes more responsive, adjusting its bounds rapidly to reflect the latest market movements.
The Scale Offset feature allows the indicator to break the boundaries of the oscillator. This can be useful when the market is breaking highs or lows allowing the user to identify extremities in price. With Scale Offset disabled the oscillator will always remain inside of the boundaries because the extremities will be updated instantly. When this feature is enabled it will update the boundaries one step behind instead of updating it instantly. This allows the user to more easily see overbought and oversold conditions at the cost of incurring a single bar lag to the boundaries. Generally this is a good idea as this behavior makes the oscillator more sensitive to recent price spikes or drops, reflecting sudden market movements more accurately. It accentuates the extremities of the market conditions, potentially offering a more aggressive analysis. The main trade-off with the Scale Offset feature is between sensitivity and potential overreaction. It offers a more immediate and exaggerated reflection of market conditions but might also lead to misinterpretations in certain scenarios, especially in highly volatile markets.
Divergence is used to predict potential trend reversals. It occurs when the price of an asset and the reading of an oscillator move in opposite directions. This discrepancy can signal a weakening of the current trend and possibly indicate a potential reversal.
Divergence doesn't always lead to a trend reversal, but it's a warning sign that the current trend might be weakening. Divergence can sometimes give false signals, particularly in strongly trending markets where the oscillator may remain in overbought or oversold conditions for extended periods. The lagging nature of using pivot points to calculate divergences means that all divergences are limited by the pivot look forward input. The upside of using a longer look forward is that the divergences will be more accurate. The obvious con here is that it will be more delayed and might be useless by the time it appears. Its recommended to use the built in divergences as a way to learn how these are formed so you can make your own in real time.
By default, the oscillator uses a smoothing of 3 to allow for a more price like behavior while still being rather smooth compared to raw price data. Conversely, you can increase this value to make this indicator behave smoother. Something to keep in mind is that the amount of delay from real time is equal to half of the smoothing period.
We have included a verity of alerts in this indicator. Here is a list of all of the available alerts: Bullish BOS, Bearish BOS, Bullish CHoCH, Bearish CHoCH, Bullish Divergence, Hidden Bullish Divergence, Bearish Divergence, Hidden Bearish Divergence, Cross Over Average, Cross Under Average.
Below are all of the inputs and their tooltips to get you started:
Settings:
Smoothing: Specifies the degree of smoothing applied to the oscillator. Higher values result in smoother but potentially less responsive signals.
Average Length: Sets the length of the moving average applied to the oscillator, affecting its sensitivity and smoothness.
Pivot Length: Specifies the forward-looking length for pivot points, affecting how the oscillator anticipates future price movements. This directly impacts the delay in finding a pivot.
Max Length: Sets the maximum length to consider for calculating the highest values in the oscillator.
Min Length: Defines the minimum length for calculating the lowest values in the oscillator.
Quick Update: Activates a faster update mode for the oscillator's extremities, which may result in less stable range boundaries.
Scale Offset: When enabled, delays updating minimum and maximum values to enhance signal directionality, allowing the signal to occasionally exceed normal bounds.
Candle Color: Enables coloring of candles based on the current directional signal of the oscillator.
Labels:
Enable BOS/CHoCH Labels: Activates the display of BOS (Break of Structure) and CHoCH (Change of Character) labels on the chart.
Visual Padding: Turns on additional visual padding at the top and bottom of the chart to accommodate labels. Determines the amount of visual padding added to the chart for label display.
Divergence:
Divergence Pivot: Defines the number of bars to the right of the pivot in divergence calculations, influencing the oscillator's responsiveness.
Divergence Pivot Forward: Directly impacts latency. Longer periods results in more accurate results at the sacrifice of delay.
Upper Range: Sets the upper range limit for divergence calculations, influencing the oscillator's sensitivity to larger trends.
Lower Range: Determines the lower range limit for divergence calculations, affecting the oscillator's sensitivity to shorter trends.
Symbol: Allows selection of the label style for divergence indicators, with options for text or symbolic representation.
Regular Bullish: Activates the detection and marking of regular bullish divergences in the oscillator.
Hidden Bullish: Enables the identification and display of hidden bullish divergences.
Regular Bearish: Turns on the feature to detect and highlight regular bearish divergences.
Hidden Bearish: Activates the functionality for detecting and displaying hidden bearish divergences.
Color:
Bullish: Determines the minimum/maximum color gradient for bullish signals, impacting the chart's visual appearance.
Bearish: Defines the minimum/maximum color gradient for bearish signals, affecting their visual representation.
Average: Specifies the color for the average line of the oscillator, enhancing chart readability.
CHoCH: Sets the color for bullish/bearish CHoCH (Change of Character) signals.
Premium/Discount: Determines the color for the premium/discount zone in the oscillator's visual representation.
Text Color: Sets the color for the text in BoS/CHoCH labels.
Regular Bullish: Defines the color used to represent regular bullish divergences.
Hidden Bullish: Specifies the color for hidden bullish divergences.
Regular Bearish: Determines the color for hidden bearish divergences.
Divergence Text Color: Specifies the color for the text in divergence labels.
BK AK-King Quazi🦁👑 BK AK–KING QUAZI — MEASURED HAND, CLEAN BLADE. 👑🦁
This is Quasimodo turned into a permissioned process: PROTO → BOS proof → RETEST → CONFIRM → resolve or invalidate — with mapped levels so you execute clean or you stand down.
All glory to the Almighty — the true source of wisdom, restraint, and endurance.
AK is honor — my mentor’s standard: clarity, patience, no shortcuts, no gambling.
🧠 What It Does
King Quazi detects and manages Quasimodo (QM) structures and outputs an execution-ready battlefield:
PROTO detection: identifies developing QM structure early (awareness, not a trade)
BOS validation: requires a displacement break (ATR-based) so you don’t trade fake breaks
RETEST logic: watches the key QM level for the “return to the scene”
CONFIRM stage: only triggers when structure + proof + timing align
INVALIDATION + cleanup: marks failure clearly and manages drawings to keep charts readable
Projections + targets: maps QM / BOS / INV, plus optional T1/T2 so planning is standardized
MTF War Room: reads multiple timeframes and shows who’s in PROTO / CONFIRM / NOW so you stop trading against the higher court
This is not a pattern sticker. It’s a workflow.
What You See On Chart (so it’s usable)
QM level + BOS level + invalidation line
Optional forward projections / extension
Optional target mapping (T1/T2)
Stage-aware labels (PROTO / CONFIRM / invalidation handling)
MTF table showing which timeframe is active and which stage is “live”
🔍 How It Works (So You Know It’s Not Random)
1) Swing Structure → QM Candidate
The script builds swing structure and recognizes valid QM geometry — no guesswork labels without structure.
2) BOS Displacement Filter (Proof of Intent)
Most QM tools fire when the shape appears. King Quazi demands body displacement vs ATR so a “break” has force behind it — not wick theater.
3) Retest + Confirm (Permissioned Entry)
After BOS, it expects retest behavior and confirms only when the market acts right at the level — not in the middle of nowhere.
4) Object Lifecycle (Clean Chart, Honest Outcome)
The script manages lines/labels so your chart stays readable and outcomes are tracked — not hidden.
🧩 Why This Script Is Original (Not Another QM Clone)
The Quasimodo concept is public. The edge here is the integration:
staged event sequencing (PROTO → BOS → RETEST → CONFIRM)
ATR displacement proof to cut false positives
standardized execution mapping (QM/BOS/INV + optional targets)
multi-timeframe stage awareness (so you stop fighting higher structure)
alert routing by event stage (signal control, not spam)
It’s not “more signals.” It’s better permission.
🧭 How To Use It (Execution Rules)
1) Campaign Mode (Trend-Aligned)
Trade only when the MTF posture supports it. PROTO is awareness — BOS/RETEST is proof.
2) Verdict Mode (Turns)
A reversal is not a feeling. It’s testimony failing at the boundary and pressure flipping. Confirm at the level or don’t touch it.
3) Stand-Down Mode (The Feature Tourists Hate)
When the tool goes quiet, it’s telling you the truth:
no permission = no trade.
That’s how capital survives.
⚙️ What You Actually Tune
Zigzag sensitivity (tight vs clean structure)
BOS displacement strictness (how hard price must prove intent)
Retest window + expiration (how strict confirmation is)
Projection visibility (QM/BOS/INV, forward extension)
Targets & entry zone behavior (T1/T2 + buffers)
MTF table + alerts (what you want surfaced)
🧑🏫 BK / AK / Faith
BK is the mark I’m building.
AK is honor — discipline, patience, clean execution.
All glory to the Almighty — the true source of wisdom and endurance.
🗡️ King David Lens (Deep — Discipline Under Fire)
David’s power wasn’t impulse. It was governed force — strength that answers to law.
He learned early that the most dangerous trap is moving before you’re sent.
That’s why his life is full of the same pattern traders ignore:
He was anointed long before he was crowned.
Meaning: truth can be real before it’s allowed to manifest.
He fought Goliath with a weapon people mocked — not because it was flashy, but because it was mastered.
Meaning: edge isn’t what looks impressive — it’s what’s trained and repeatable.
He had Saul in his hands and still refused the shortcut.
Meaning: opportunity is not permission; proximity is not assignment.
He waited through wilderness seasons where nothing “looked like progress.”
Meaning: silence isn’t rejection — sometimes it’s preparation.
That is the trader’s war.
Price will always offer motion.
But motion without permission is bait.
David didn’t survive by chasing what was available.
He survived by waiting until the moment was proved, the ground was chosen, and the strike was clean.
That’s what King Quazi enforces:
PROTO is the rumor.
BOS displacement is the proof.
Retest is the test of legitimacy.
Confirm is permission to strike.
Invalidation is humility — stand down immediately.
A lion doesn’t chase every shadow.
A lion waits until the prey is committed — then ends it.
🦁👑 BK AK–KING QUAZI — execute with proof. 👑🦁
Gd bless. 🙏
🔥 SMC Reversal Engine v3.5 – Clean FVG + DashboardSMC Reversal Engine v3.5 – Clean FVG + Dashboard
The SMC Reversal Engine is a precision-built Smart Money Concepts tool designed to help traders understand market structure the single most important foundation in reading price action. It reveals how institutions move liquidity, where structure shifts occur, and how Fair Value Gaps (FVGs) align with these changes to signal potential reversals or continuations.
Understanding How It Works
At its core, the script detects CHoCH (Change of Character) and BOS (Break of Structure)—the two key turning points in institutional order flow. A CHoCH shows that the market has reversed intent (for example, from bearish to bullish), while a BOS confirms a continuation of the current trend. Together, they form the backbone of structure-based trading.
To refine this logic, the engine uses fractal pivots clusters of candles that confirm swing highs and lows. Fractals filter out noise, identifying points where price truly changes direction. The script lets you set this sensitivity manually or automatically adapts it depending on the timeframe. Lower fractal sensitivity captures smaller intraday swings for scalpers, while higher sensitivity locks onto major swing structures for swing and position traders.
The dashboard gives you a real-time reading of the trend, the last high and low, and what the market is likely to do next—for example, “Expect HL” or “Wait for LH.” It even tracks the accuracy of these structure predictions over time, giving an educational feedback loop to help you learn price behavior.
Fair Value Gaps and Tap Entries
Fair Value Gaps (FVGs) mark moments when price moves too quickly, leaving inefficiencies that institutions often revisit. When price taps into an FVG, it often acts as a high-probability entry zone for reversals or continuations. The script automatically detects, extends, and deletes old FVGs, keeping only relevant zones visible for a clean chart.
Traders can enable markTapEntry to visually confirm when an FVG gets filled. This is a simple but powerful trigger that often aligns with CHoCH or BOS moments.
Recommended Settings for Different Traders
For Scalpers, use a lower HTF structure such as 1 minute or 5 minutes. Keep Auto Fractals on for faster reaction, and limit FVG zones to 2–3. This gives you a clean, real-time reflection of order flow.
For Intraday Traders, 15-minute to 1-hour structure gives the perfect balance between reactivity and stability. Fractal sensitivity around 3–5 captures the most actionable levels without excessive noise.
For Swing Traders, use 4-hour, 1-day, or even 3-day structure. The chart becomes smoother, showing higher-order CHoCH and BOS that define true institutional transitions. Combine this with EMA confirmation for higher conviction.
For Position or Macro Traders, select Weekly or Monthly structure. The dynamic label system expands automatically to keep more historical BOS/CHoCH points visible, allowing you to see long-term shifts clearly.
Educational Value
This indicator is built to teach traders how to see structure the way professionals and smart money do. You’ll learn to recognize how markets transition from one phase to another from accumulation to manipulation to expansion. Each CHoCH or BOS helps you decode where liquidity is being taken and where new intent begins.
The included SMC Quick Guide explains each structural cue right on your chart. Within days of using it, you’ll start noticing patterns that reveal how price really moves, instead of guessing based on indicators.
Settings and How to Use Them
Everything in the SMC Reversal Engine is designed to adapt to your trading style and help you read structure like a professional.
When you open the Inputs Panel, you’ll see sections like Fractal Settings, FVG Settings, Buy/Sell Confirmation, and Educational Tools.
Under Fractal Settings, you can choose the higher timeframe (HTF) that defines structure—from minutes to weeks. The Auto Fractal Sensitivity option automatically adjusts how tight or wide swing points are detected. Lower sensitivity captures short-term fluctuations (great for scalpers), while higher values filter noise and isolate major swing highs and lows (perfect for swing traders).
The Fair Value Gap (FVG) options manage imbalance zones—the footprints of institutional orders. You can show or hide these zones, extend them into the future, and control how long they remain before auto-deletion. The Mark Entry When FVG is Tapped option places a small label when price revisits the gap—a potential entry signal that aligns with smart money logic.
EMA Confirmation adds a layer of confluence. The script can automatically scale EMA lengths based on timeframe, or you can input your preferred values (for example, 9/21 for intraday, 50/200 for swing). Require EMA Crossover Confirmation helps filter false moves, keeping you trading only with aligned momentum.
The Educational section gives traders visual reinforcement. When enabled, you’ll see tags like HH (Higher High), HL (Higher Low), LH (Lower High), and LL (Lower Low). These show structure shifts in real time, helping you learn visually what market structure really means. The Cheat Sheet panel summarizes each term, always visible in the corner for quick reference.
Early Top Warnings use wick size and RSI divergence to signal when price may be overextended—a useful heads-up before potential CHoCH formations.
Finally, the Narrative and Accuracy System translates structure into simple English—messages like Trend Bullish → Wait for HL or BOS Bearish → Expect LL. Over time, you can monitor how accurate these expectations have been, training your pattern recognition and confidence.
Pro Tips for Getting the Most Out of the SMC Reversal Engine
1. Start on Higher Timeframes First: Begin on the 4H or Daily chart where structure is cleaner and signals have more weight. Then scale down for entries once you grasp directional intent.
2. Use FVGs for Context, Not Just Entries: Observe how price behaves around unfilled FVGs—they often act as magnets or barriers, offering insight into where liquidity lies.
3. Combine With HTF Bias: Always trade in the direction of your higher timeframe trend. A bullish weekly BOS means lower timeframes should ideally align bullishly for optimal setups.
4. Clean Charts = Clear Mind: Use Minimal Mode when focusing on price action, then toggle the educational tools back on to review structure for learning.
5. Don’t Chase Every CHoCH or BOS: Focus on significant breaks that align with broader context and liquidity sweeps, not minor fluctuations.
6. Accuracy Rate Is a Feedback Tool: Use the accuracy stat as a reflection of consistency—not a trade trigger.
7. Build Narrative Awareness: Read the on-chart narrative messages to reinforce structured thinking and stay disciplined.
8. Practice Replay Mode: Step through past structures to visually connect CHoCH, BOS, and FVG behavior. It’s one of the best ways to train pattern recognition.
Summary
* Detects CHoCH and BOS automatically with fractal precision
* Identifies and manages Fair Value Gaps (FVGs) in real time
* Displays a smart dashboard with accuracy tracking
* Adapts label visibility dynamically by timeframe
* Perfect for both learning and trading with institutional clarity
This tool isn’t about predicting the market—it’s about understanding it. Once you can read structure, everything else in trading becomes secondary.






















