OPEN-SOURCE SCRIPT
Atualizado ICT Auto-Validated SMC

ICT Validated SMC v1 — "Don't just label. Validate."
Most SMC indicators slap labels on your chart and call it a day. Every Order Block gets drawn. Every FVG gets highlighted. No filtering, no context, no idea whether what you're looking at is actually worth trading or just noise.
This indicator takes a different approach. Every concept has to earn its place on your chart.
Why this indicator is different:
Market Structure — BOS and CHoCH on both swing and internal levels, with optional HTF structure overlay so you can see if you're trading with the current or against it
Order Blocks — only drawn when they pass validation: liquidity sweep before the OB, displacement (FVG) after it, premium/discount alignment, and killzone timing. Each OB gets a confluence score (★ to ★★★★★) so you can tell at a glance which ones are worth watching
Breaker Blocks — when an OB fails and gets traded through, it flips into a breaker. Valid on first retest, then expires. One of the cleanest levels you'll find
Fair Value Gaps — displacement-filtered (minimum ATR multiple on the middle candle body, not just any gap), with Consequent Encroachment at 50%
Inversion FVGs — mitigated FVGs that flip direction. Bullish FVG gets run → becomes bearish IFVG resistance, and vice versa
Balanced Price Range — where a bullish FVG and bearish FVG overlap. Rare, but when they show up, pay attention
OTE Zones — Fibonacci 61.8%–78.6% retracement of the displacement leg after a structure break, with automatic detection of OB and FVG overlap inside the zone (triple confluence)
Liquidity — Equal Highs / Equal Lows detection with configurable tolerance, plus live sweep markers when price takes out a level and closes back inside
Premium / Discount — visual overlay of the current swing range with equilibrium line
Killzones — Asian, London, NY AM, NY PM session highlighting in EST
Signal engine
Optional trade signals that only fire when multiple factors align — you set the minimum confluence score. Signals require price to actually be touching a validated zone (OB, FVG, OTE, or Breaker), and you can enforce HTF alignment and killzone timing on top. Built-in cooldown prevents the same signal from firing repeatedly while price sits in a zone. SL and TP levels are plotted automatically.
Info panel
Top-right dashboard shows you everything at a glance: current structure, HTF alignment status, active zone counts, session info, validation settings, and the current signal state with score.
SETTINGS GUIDE
Market Structure
Swing Length (default 10) — how many bars on each side to confirm a swing high or low. Lower values catch more swings but pick up noise. Higher values give you cleaner structure but lag more. 10 is a solid middle ground for 15M–1H charts. On 5M you might drop to 7, on 4H you might push to 14.
Internal Structure Length (default 5) — same idea but for sub-structure. Only matters if you turn on "Show Internal Structure." Useful for seeing the BOS/CHoCH happening inside a larger swing, but it does add visual clutter. I leave it off by default.
Show Swing Points — the small ▲/▼ markers at confirmed pivots. Helpful when you're learning to read structure, easy to turn off once you don't need them.
Higher Timeframe Alignment
Enable HTF Structure Check (default on) — pulls structure direction from a higher timeframe so you can see whether your current-TF setup trades with or against the bigger picture. No repainting — uses confirmed bars only (lookahead off).
HTF Timeframe (default 240 = 4H) — which timeframe to check. Standard pairings: 5M→1H, 15M→4H, 1H→D, 4H→W. Don't go more than ~4x your chart TF or the alignment signal gets too slow to be useful.
HTF Swing Length (default 10) — swing detection sensitivity on the HTF. Usually fine to leave at 10 unless your HTF is very high (Weekly/Monthly) where you might want 5–7.
Show HTF Structure on Chart — draws dashed lines for the current HTF swing high and low directly on your chart. Nice visual anchor for where the big-picture range sits.
Order Blocks
Max Visible OBs (default 5) — how many OB boxes stay on chart at once. Old ones get cleaned up automatically. 5 keeps the chart readable without losing important levels.
Require Liquidity Sweep (default on) — the OB candle has to have swept the prior candle's low (for bullish) or high (for bearish) before it qualifies. This is ICT's concept of the market grabbing liquidity before reversing. Turning this off gives you more OBs but weaker ones.
Require Displacement (default on) — the move off the OB has to leave a Fair Value Gap within the next few candles. This confirms the move was institutional and impulsive, not just a drift. Again, turning it off = more OBs, lower average quality.
Show Mitigated OBs — when price trades through an OB and it expires, should the ghost of the box stay on chart (grayed out) or disappear? Off by default to keep things clean.
Breaker Blocks
Max Visible Breakers (default 5) — same cap logic as OBs.
Bullish/Bearish Breaker Fill — color pickers. Breakers use dashed borders to visually distinguish them from active OBs.
Breakers are automatically created when an OB gets mitigated — you don't configure their detection separately. They activate on the first retest (border thickens) and expire if price trades through them a second time. This lifecycle is hardcoded because that's how they work — a breaker that's been retested twice isn't a breaker anymore.
Fair Value Gaps
Max Visible FVGs (default 5) — caps active FVG boxes on chart.
Min Displacement (ATR Multiple) (default 1.0) — this is the filter that separates real FVGs from noise. The middle candle's body (close minus open, not the wick range) has to be at least this many times the 14-period ATR. At 1.0 you get FVGs that represent genuinely impulsive moves. Push it to 1.5 or 2.0 if you only want to see the really aggressive displacements. Drop to 0.5 if you want more gaps and don't mind weaker ones.
Show Consequent Encroachment (default on) — draws a dotted line at the 50% midpoint of each FVG. This is the level ICT identifies as the point where smart money has been "partially filled" — price often reacts here rather than filling the entire gap.
Show Mitigated FVGs — same idea as mitigated OBs. Off by default.
Show Inversion FVGs (default on) — when a FVG gets fully traded through, it can flip direction and act as S/R from the other side. A bullish FVG that gets broken to the downside becomes a bearish IFVG (resistance). These are drawn with dashed yellow boxes. They expire after being retested once and then traded through.
Balanced Price Range
Show BPR Zones (default on) — when a bullish FVG and a bearish FVG overlap, the overlapping area is a BPR. These are genuinely rare, and when price returns to one it tends to get a strong reaction. Drawn with a solid purple box and ◆ marker.
BPRs mitigate when price closes decisively beyond the zone (by more than the zone's own height in either direction). No additional settings needed — the detection is automatic based on your active FVGs.
Liquidity
Show Liquidity Levels (default on) — master toggle for the liquidity features.
Show Equal Highs / Lows (default on) — scans recent swing pivots for prices that are nearly identical. These clusters are where stop losses accumulate and smart money targets them.
EQH/EQL Tolerance (default 0.15%) — how close two swing points need to be (as a percentage of price) to count as "equal." 0.15% works well for most crypto and forex pairs. For indices you might tighten to 0.08–0.10%. If you're getting too many false EQH/EQL markings, lower this. If you're missing obvious clusters, raise it.
Show Liquidity Sweeps (default on) — plots a ⚡ marker when a candle wicks above a recent swing high (or below a swing low) but closes back inside. This is the "sweep and reject" — one of the most actionable things on any chart.
Premium / Discount
Show Premium/Discount Zones (default on) — shades the area above equilibrium as premium (bearish color) and below as discount (bullish color), based on the current swing range. Bullish setups should ideally trigger in discount, bearish in premium.
Show Equilibrium Line (default on) — the 50% midpoint of the range. Drawn as a dotted gray line. In ranging markets, price tends to gravitate here. In trending markets, it acts as a line in the sand for directional bias.
Killzones
Asian KZ (20:00–00:00 EST, default off) — the Asian range is more of a reference for the London open to target than a session to trade in. Included for context but off by default.
London KZ (02:00–05:00 EST, default on) — the first high-probability session. London open displacement sets up the day.
NY AM KZ (08:30–11:00 EST, default on) — the second major window. 08:30 aligns with US economic releases, 09:30 with the equity open. This is where the biggest moves tend to happen.
NY PM KZ (13:00–16:00 EST, default off) — afternoon session. Can produce setups but less reliable. Off by default.
Killzone Transparency (default 92) — how visible the background shading is. 92 is barely there, which is the point — you want to know you're in a killzone without it competing with your zones and levels. Lower the number if you want it more obvious.
All times are EST (New York) regardless of your chart timezone.
Optimal Trade Entry (OTE)
Upper Fib Level (default 0.786) — the deeper boundary of the OTE zone. 78.6% retracement means price has pulled back significantly into the prior leg.
Lower Fib Level (default 0.618) — the shallower boundary. Together with 78.6% this defines the "sweet spot" ICT teaches as the optimal entry area.
Show 50% / 61.8% / 78.6% Lines (default on) — draws the individual fib levels as dotted lines inside the OTE box. The 50% (equilibrium of the leg) is especially useful as a decision point.
Max Visible OTE Zones (default 3) — OTE zones are transient by nature, so you don't need many on screen. They activate when price enters the zone (border thickens) and invalidate if price blows through the leg's origin.
OTE zones automatically check whether an active Order Block or FVG sits inside them. When they overlap you get labels like "OTE + OB" or "OTE + OB + FVG" — that triple confluence is one of the highest-probability setups in this entire framework.
Signal Generation
Enable Trade Signals (default on) — master toggle for the ▲/▼ arrows. Everything else in this section is irrelevant when this is off.
Min Confluence Score (default 4) — the threshold before a signal fires. The scoring works like this: touching an OB = +2, touching an OTE = +2, touching an FVG = +1, touching a Breaker = +1, HTF alignment = +1, in killzone = +1, correct premium/discount zone = +1, structure direction agrees = +1. Max theoretical score is 10. At the default of 4, you need at least two meaningful factors lining up. Raise it to 5–6 if you want fewer, stronger signals. Drop to 3 if you're using this more as an alert system and want to evaluate setups yourself.
Require HTF Alignment (default on) — long signals only fire when the HTF is bullish, shorts only when HTF is bearish. This alone filters out a huge number of counter-trend traps.
Require Active Killzone (default off) — when on, signals only fire during London or NY sessions. Aggressive filter, but it keeps you out of the low-volume chop.
Show Stop Loss / Take Profit (default on for both) — SL is placed at the bottom of the zone that triggered the signal (OB low, FVG low, OTE leg origin). TP targets the opposite swing (swing high for longs, swing low for shorts). These are starting points, not gospel — you should manage the trade based on what price does at the next level.
Signal Cooldown (default 10 bars) — minimum bars between signals in the same direction. Without this, you'd get repeated long arrows every bar while price sits inside a bullish OB. 10 bars is enough to prevent spam without missing a genuine re-entry. On lower timeframes (1M–5M) you might drop to 5. On higher timeframes (4H+) you could push to 15–20.
Confluence Scoring
Show Confluence Score (default on) — enables the scoring system that rates each OB.
Minimum Score to Display Setup (default 3) — OBs scoring below this are hidden entirely. This is separate from the signal threshold — this filters which OBs appear on chart at all, while the signal threshold filters which setups generate trade arrows. You might show OBs at score 3+ but only signal at score 5+, for example.
Colors & Display
Bullish / Bearish — master colors used across the indicator for directional elements.
FVG, OB, Sweep fills — individual color pickers for each element type. The defaults use distinct colors (blue for OBs, green/red for FVGs, yellow for sweeps, purple for BPR) so nothing blends together.
Show Info Panel — the dashboard in the top right. Shows structure state, HTF alignment, active zone counts, session info, validation settings, best OB score, and current signal status. Turn it off if you already know what you're looking at and want the screen space back.
Chart Label Size / Panel Text Size — tiny, small, normal, or large. Small works on most screen sizes. Use tiny on mobile or if you're running a lot of chart panels.
What makes this different from the 500 other SMC indicators out there:
OBs require a liquidity sweep AND displacement — not just "last red candle before green." Both filters are toggleable if you want to relax them, but the defaults are strict on purpose.
Every OB is scored based on how many factors align (sweep, displacement, killzone, premium/discount, HTF direction). Low-scoring setups get filtered out entirely.
FVGs require actual displacement — the middle candle body has to move at least 1x ATR. No more tiny gaps on ranging candles cluttering your chart.
IFVGs and Breaker Blocks have proper lifecycle management — they activate on retest and expire when traded through. They don't just sit there forever.
OTE zones automatically check for OB and FVG overlap, flagging triple confluence setups.
HTF structure is pulled from a configurable higher timeframe with no repainting (lookahead off).
Recommended setup:
Start on the 15M with HTF set to 4H, or 1H with HTF set to Daily. Keep both validation filters on (sweep + displacement) and minimum score at 3. Turn off internal structure unless you need it — it gets noisy. Enable London + NY AM killzones for the cleanest setups.
Defaults are opinionated. I'd rather show you 3 high-quality setups than 30 mediocre ones. Adjust the filters to your style, but if you're turning everything to minimum just to see more signals, you're missing the point.
Most SMC indicators slap labels on your chart and call it a day. Every Order Block gets drawn. Every FVG gets highlighted. No filtering, no context, no idea whether what you're looking at is actually worth trading or just noise.
This indicator takes a different approach. Every concept has to earn its place on your chart.
Why this indicator is different:
Market Structure — BOS and CHoCH on both swing and internal levels, with optional HTF structure overlay so you can see if you're trading with the current or against it
Order Blocks — only drawn when they pass validation: liquidity sweep before the OB, displacement (FVG) after it, premium/discount alignment, and killzone timing. Each OB gets a confluence score (★ to ★★★★★) so you can tell at a glance which ones are worth watching
Breaker Blocks — when an OB fails and gets traded through, it flips into a breaker. Valid on first retest, then expires. One of the cleanest levels you'll find
Fair Value Gaps — displacement-filtered (minimum ATR multiple on the middle candle body, not just any gap), with Consequent Encroachment at 50%
Inversion FVGs — mitigated FVGs that flip direction. Bullish FVG gets run → becomes bearish IFVG resistance, and vice versa
Balanced Price Range — where a bullish FVG and bearish FVG overlap. Rare, but when they show up, pay attention
OTE Zones — Fibonacci 61.8%–78.6% retracement of the displacement leg after a structure break, with automatic detection of OB and FVG overlap inside the zone (triple confluence)
Liquidity — Equal Highs / Equal Lows detection with configurable tolerance, plus live sweep markers when price takes out a level and closes back inside
Premium / Discount — visual overlay of the current swing range with equilibrium line
Killzones — Asian, London, NY AM, NY PM session highlighting in EST
Signal engine
Optional trade signals that only fire when multiple factors align — you set the minimum confluence score. Signals require price to actually be touching a validated zone (OB, FVG, OTE, or Breaker), and you can enforce HTF alignment and killzone timing on top. Built-in cooldown prevents the same signal from firing repeatedly while price sits in a zone. SL and TP levels are plotted automatically.
Info panel
Top-right dashboard shows you everything at a glance: current structure, HTF alignment status, active zone counts, session info, validation settings, and the current signal state with score.
SETTINGS GUIDE
Market Structure
Swing Length (default 10) — how many bars on each side to confirm a swing high or low. Lower values catch more swings but pick up noise. Higher values give you cleaner structure but lag more. 10 is a solid middle ground for 15M–1H charts. On 5M you might drop to 7, on 4H you might push to 14.
Internal Structure Length (default 5) — same idea but for sub-structure. Only matters if you turn on "Show Internal Structure." Useful for seeing the BOS/CHoCH happening inside a larger swing, but it does add visual clutter. I leave it off by default.
Show Swing Points — the small ▲/▼ markers at confirmed pivots. Helpful when you're learning to read structure, easy to turn off once you don't need them.
Higher Timeframe Alignment
Enable HTF Structure Check (default on) — pulls structure direction from a higher timeframe so you can see whether your current-TF setup trades with or against the bigger picture. No repainting — uses confirmed bars only (lookahead off).
HTF Timeframe (default 240 = 4H) — which timeframe to check. Standard pairings: 5M→1H, 15M→4H, 1H→D, 4H→W. Don't go more than ~4x your chart TF or the alignment signal gets too slow to be useful.
HTF Swing Length (default 10) — swing detection sensitivity on the HTF. Usually fine to leave at 10 unless your HTF is very high (Weekly/Monthly) where you might want 5–7.
Show HTF Structure on Chart — draws dashed lines for the current HTF swing high and low directly on your chart. Nice visual anchor for where the big-picture range sits.
Order Blocks
Max Visible OBs (default 5) — how many OB boxes stay on chart at once. Old ones get cleaned up automatically. 5 keeps the chart readable without losing important levels.
Require Liquidity Sweep (default on) — the OB candle has to have swept the prior candle's low (for bullish) or high (for bearish) before it qualifies. This is ICT's concept of the market grabbing liquidity before reversing. Turning this off gives you more OBs but weaker ones.
Require Displacement (default on) — the move off the OB has to leave a Fair Value Gap within the next few candles. This confirms the move was institutional and impulsive, not just a drift. Again, turning it off = more OBs, lower average quality.
Show Mitigated OBs — when price trades through an OB and it expires, should the ghost of the box stay on chart (grayed out) or disappear? Off by default to keep things clean.
Breaker Blocks
Max Visible Breakers (default 5) — same cap logic as OBs.
Bullish/Bearish Breaker Fill — color pickers. Breakers use dashed borders to visually distinguish them from active OBs.
Breakers are automatically created when an OB gets mitigated — you don't configure their detection separately. They activate on the first retest (border thickens) and expire if price trades through them a second time. This lifecycle is hardcoded because that's how they work — a breaker that's been retested twice isn't a breaker anymore.
Fair Value Gaps
Max Visible FVGs (default 5) — caps active FVG boxes on chart.
Min Displacement (ATR Multiple) (default 1.0) — this is the filter that separates real FVGs from noise. The middle candle's body (close minus open, not the wick range) has to be at least this many times the 14-period ATR. At 1.0 you get FVGs that represent genuinely impulsive moves. Push it to 1.5 or 2.0 if you only want to see the really aggressive displacements. Drop to 0.5 if you want more gaps and don't mind weaker ones.
Show Consequent Encroachment (default on) — draws a dotted line at the 50% midpoint of each FVG. This is the level ICT identifies as the point where smart money has been "partially filled" — price often reacts here rather than filling the entire gap.
Show Mitigated FVGs — same idea as mitigated OBs. Off by default.
Show Inversion FVGs (default on) — when a FVG gets fully traded through, it can flip direction and act as S/R from the other side. A bullish FVG that gets broken to the downside becomes a bearish IFVG (resistance). These are drawn with dashed yellow boxes. They expire after being retested once and then traded through.
Balanced Price Range
Show BPR Zones (default on) — when a bullish FVG and a bearish FVG overlap, the overlapping area is a BPR. These are genuinely rare, and when price returns to one it tends to get a strong reaction. Drawn with a solid purple box and ◆ marker.
BPRs mitigate when price closes decisively beyond the zone (by more than the zone's own height in either direction). No additional settings needed — the detection is automatic based on your active FVGs.
Liquidity
Show Liquidity Levels (default on) — master toggle for the liquidity features.
Show Equal Highs / Lows (default on) — scans recent swing pivots for prices that are nearly identical. These clusters are where stop losses accumulate and smart money targets them.
EQH/EQL Tolerance (default 0.15%) — how close two swing points need to be (as a percentage of price) to count as "equal." 0.15% works well for most crypto and forex pairs. For indices you might tighten to 0.08–0.10%. If you're getting too many false EQH/EQL markings, lower this. If you're missing obvious clusters, raise it.
Show Liquidity Sweeps (default on) — plots a ⚡ marker when a candle wicks above a recent swing high (or below a swing low) but closes back inside. This is the "sweep and reject" — one of the most actionable things on any chart.
Premium / Discount
Show Premium/Discount Zones (default on) — shades the area above equilibrium as premium (bearish color) and below as discount (bullish color), based on the current swing range. Bullish setups should ideally trigger in discount, bearish in premium.
Show Equilibrium Line (default on) — the 50% midpoint of the range. Drawn as a dotted gray line. In ranging markets, price tends to gravitate here. In trending markets, it acts as a line in the sand for directional bias.
Killzones
Asian KZ (20:00–00:00 EST, default off) — the Asian range is more of a reference for the London open to target than a session to trade in. Included for context but off by default.
London KZ (02:00–05:00 EST, default on) — the first high-probability session. London open displacement sets up the day.
NY AM KZ (08:30–11:00 EST, default on) — the second major window. 08:30 aligns with US economic releases, 09:30 with the equity open. This is where the biggest moves tend to happen.
NY PM KZ (13:00–16:00 EST, default off) — afternoon session. Can produce setups but less reliable. Off by default.
Killzone Transparency (default 92) — how visible the background shading is. 92 is barely there, which is the point — you want to know you're in a killzone without it competing with your zones and levels. Lower the number if you want it more obvious.
All times are EST (New York) regardless of your chart timezone.
Optimal Trade Entry (OTE)
Upper Fib Level (default 0.786) — the deeper boundary of the OTE zone. 78.6% retracement means price has pulled back significantly into the prior leg.
Lower Fib Level (default 0.618) — the shallower boundary. Together with 78.6% this defines the "sweet spot" ICT teaches as the optimal entry area.
Show 50% / 61.8% / 78.6% Lines (default on) — draws the individual fib levels as dotted lines inside the OTE box. The 50% (equilibrium of the leg) is especially useful as a decision point.
Max Visible OTE Zones (default 3) — OTE zones are transient by nature, so you don't need many on screen. They activate when price enters the zone (border thickens) and invalidate if price blows through the leg's origin.
OTE zones automatically check whether an active Order Block or FVG sits inside them. When they overlap you get labels like "OTE + OB" or "OTE + OB + FVG" — that triple confluence is one of the highest-probability setups in this entire framework.
Signal Generation
Enable Trade Signals (default on) — master toggle for the ▲/▼ arrows. Everything else in this section is irrelevant when this is off.
Min Confluence Score (default 4) — the threshold before a signal fires. The scoring works like this: touching an OB = +2, touching an OTE = +2, touching an FVG = +1, touching a Breaker = +1, HTF alignment = +1, in killzone = +1, correct premium/discount zone = +1, structure direction agrees = +1. Max theoretical score is 10. At the default of 4, you need at least two meaningful factors lining up. Raise it to 5–6 if you want fewer, stronger signals. Drop to 3 if you're using this more as an alert system and want to evaluate setups yourself.
Require HTF Alignment (default on) — long signals only fire when the HTF is bullish, shorts only when HTF is bearish. This alone filters out a huge number of counter-trend traps.
Require Active Killzone (default off) — when on, signals only fire during London or NY sessions. Aggressive filter, but it keeps you out of the low-volume chop.
Show Stop Loss / Take Profit (default on for both) — SL is placed at the bottom of the zone that triggered the signal (OB low, FVG low, OTE leg origin). TP targets the opposite swing (swing high for longs, swing low for shorts). These are starting points, not gospel — you should manage the trade based on what price does at the next level.
Signal Cooldown (default 10 bars) — minimum bars between signals in the same direction. Without this, you'd get repeated long arrows every bar while price sits inside a bullish OB. 10 bars is enough to prevent spam without missing a genuine re-entry. On lower timeframes (1M–5M) you might drop to 5. On higher timeframes (4H+) you could push to 15–20.
Confluence Scoring
Show Confluence Score (default on) — enables the scoring system that rates each OB.
Minimum Score to Display Setup (default 3) — OBs scoring below this are hidden entirely. This is separate from the signal threshold — this filters which OBs appear on chart at all, while the signal threshold filters which setups generate trade arrows. You might show OBs at score 3+ but only signal at score 5+, for example.
Colors & Display
Bullish / Bearish — master colors used across the indicator for directional elements.
FVG, OB, Sweep fills — individual color pickers for each element type. The defaults use distinct colors (blue for OBs, green/red for FVGs, yellow for sweeps, purple for BPR) so nothing blends together.
Show Info Panel — the dashboard in the top right. Shows structure state, HTF alignment, active zone counts, session info, validation settings, best OB score, and current signal status. Turn it off if you already know what you're looking at and want the screen space back.
Chart Label Size / Panel Text Size — tiny, small, normal, or large. Small works on most screen sizes. Use tiny on mobile or if you're running a lot of chart panels.
What makes this different from the 500 other SMC indicators out there:
OBs require a liquidity sweep AND displacement — not just "last red candle before green." Both filters are toggleable if you want to relax them, but the defaults are strict on purpose.
Every OB is scored based on how many factors align (sweep, displacement, killzone, premium/discount, HTF direction). Low-scoring setups get filtered out entirely.
FVGs require actual displacement — the middle candle body has to move at least 1x ATR. No more tiny gaps on ranging candles cluttering your chart.
IFVGs and Breaker Blocks have proper lifecycle management — they activate on retest and expire when traded through. They don't just sit there forever.
OTE zones automatically check for OB and FVG overlap, flagging triple confluence setups.
HTF structure is pulled from a configurable higher timeframe with no repainting (lookahead off).
Recommended setup:
Start on the 15M with HTF set to 4H, or 1H with HTF set to Daily. Keep both validation filters on (sweep + displacement) and minimum score at 3. Turn off internal structure unless you need it — it gets noisy. Enable London + NY AM killzones for the cleanest setups.
Defaults are opinionated. I'd rather show you 3 high-quality setups than 30 mediocre ones. Adjust the filters to your style, but if you're turning everything to minimum just to see more signals, you're missing the point.
Notas de Lançamento
v1.1 — BOS / CHoCH line fixFixed an issue where BOS and CHoCH lines were drawing too far to the right. The line endpoint was using the detection bar (which fires several bars after the actual break due to swing confirmation lag) instead of the candle that actually broke structure.
Lines now draw correctly from the bar where the broken level was established to the bar that broke it. Labels sit at the midpoint of the line instead of floating off to the right.
Same fix applied to internal structure lines when enabled.
No changes to detection logic, scoring, or any other feature — just the visual placement of the structure lines.
Notas de Lançamento
v1.2 — Bug fixes + OB alertsBOS/CHoCH lines — now draw from where the broken level was established to the candle that broke it, instead of extending too far right. Labels sit at the midpoint.
Drawing budget fix — the line fix caused BOS labels to pile up at unique historical positions, eating through TradingView's 500 label limit and deleting other annotations. Structure break drawings are now tracked and capped, oldest get cleaned up automatically. (shoutout to illtellulatta03 on youtube for noticing this issue)
Asian killzone — the nyTime < 0 condition never fired because the time value is always 0–2359. Fixed. Credit to a youtube viewer RaulOGi who found it in the source and provided a fix for it - many thx!
OB alerts — four new alert conditions: Bullish/Bearish OB Formed, and High-Score Bullish/Bearish OB (5+ confluence only) for when you only want the strong setups.
Notas de Lançamento
v1.3 — IDM + bug fixesNew: Inducement (IDM) detection
When price takes out an internal swing point while the higher-level swing structure stays intact — that's inducement. In a bullish trend, internal lows become IDM levels. When price sweeps one, it traps shorts before the real move continues. Drawn as orange dotted lines with "IDM" labels that change to "IDM ⚡" on sweep. Configurable color, max count, and works independently of the internal structure display toggle. New alert: "Inducement Swept."
Fix: Premium/Discount zones stacking
The P/D shading was drawing new boxes every tick without cleaning up the old ones. Over time they stacked and got blurry. Now properly deletes old drawings before creating new ones.
Fix: Signal panel persistence
The signal row in the info panel was only showing the signal for one bar then reverting to "NO SIGNAL" — even though the arrows and SL/TP lines stayed on the chart. The panel now persists the last signal and shows how many bars ago it fired (e.g. "▲ LONG 6/10 (12 bars ago)"). SL/TP values persist too.
Notas de Lançamento
v1.4 — Session levels, sweep fixes, new togglesNew: Session Levels (PDH/PDL/PWH/PWL)
Previous day and week highs/lows drawn as dashed lines. Day levels in blue, week levels in purple (thicker). Separate toggles for each. These are the most requested institutional reference levels — now you can see where the daily and weekly liquidity sits without a separate indicator.
New: Body-Close BOS/CHoCH Toggle
Optional setting under Market Structure. When on, structure breaks only confirm when the candle body closes beyond the level, not just wicks through. Off by default. For traders who want "acceptance" over "touch."
New: Wick-Rejection Sweep Filter
Optional setting under Liquidity. When on, ⚡ markers only fire if the previous candle had a significant rejection wick before the sweep. Cuts noise significantly on lower timeframes.
Fix: OB Sweep Validation
The sweep check in OB validation now scans the last 10 entries in swingPivots for actual structural swing points. Previously only compared against the single previous candle — now it properly validates whether a real swing level was swept before the OB formed. This was the last open item from the original code audit.
New: IFVG Alerts
Two new alert conditions: Bullish IFVG Formed and Bearish IFVG Formed.
Notas de Lançamento
New: CISD Entry ConfirmationChange in State of Delivery — an optional filter in the signal engine. When enabled, signals only fire when the candle confirms a shift in delivery direction inside a valid zone. Bullish CISD: close above the last down-candle's open. Bearish CISD: close below the last up-candle's open. Off by default. When off, CISD still adds +1 to the confluence score when present. Panel shows current CISD state in real-time. Max signal score is now 11.
Notas de Lançamento
v1.4.1 — SL/TP fixFix: Take Profit appearing on wrong side of entry
The TP level was using the most recent swing high/low regardless of where it sat relative to current price. When the latest swing was a lower high (or higher low), the TP could draw below entry for longs or above entry for shorts. TP now scans the last 20 swing pivots and picks the nearest valid target in the correct direction — above price for longs, below price for shorts.
Fix: Stop Loss sanity check
Added validation that SL is always on the correct side of the trade. Long SL must be below entry, short SL must be above entry. Edge cases where zone geometry produced an invalid SL now result in no SL drawn rather than a misleading level
Notas de Lançamento
v1.5 — Stability & Validation FixesThis update fixes several bugs that affected both stability and the accuracy of the core "validated OB" logic. If you used v1.4, expect slightly different (more correct) OB ratings and more breaker signals — details below.
Crash fixes
- Fixed a runtime error in the Equal Highs/Lows scan that could stop the indicator shortly after loading on any chart ("array index out of bounds").
- Fixed the same type of error in the Balanced Price Range scan when only a few FVGs existed.
- Fixed a runtime error in the Order Block displacement check when Swing Length was set to 6 or lower.
Logic fixes
Order Block displacement was checked in the wrong direction: bullish OBs were validated against a bearish FVG and vice versa. This is now corrected — a bullish OB requires a genuine bullish FVG after it. With "Require Displacement" enabled, OB detection and star ratings now reflect true ICT displacement.
Breaker Blocks: the candle that created a breaker was immediately counted as its "retest", which silently blocked nearly all breaker-based signals. Breakers now only count retests from the bar after creation.
Same fix applied to Inversion FVGs (IFVGs) — the creation bar no longer counts as a retest.
If a swing high and a swing low confirmed on the same bar, one of them was dropped from structure tracking. Both are now processed.
Long and short signals no longer share SL/TP variables, so a rare same-bar long+short can't overwrite each other's levels.
Behavior improvements
Detection is now fully decoupled from display: the "Show …" toggles (BOS/CHoCH, Order Blocks, FVGs, OTE, Breakers) only hide drawings. Hiding an element no longer removes it from the signal engine — signals stay consistent regardless of your visual settings.
EQH/EQL lines and labels are now tracked and capped, so they no longer slowly consume the drawing budget and erase other elements.
Notas de Lançamento
v1.6 — Real-Time Structure DetectionThis update reworks how BOS and CHoCH are detected, based on sharp-eyed feedback from the community (including the stale HTF bias report — thank you!).
The Problem detected by the community
Previously, a structure break was only registered once the next swing pivot confirmed — roughly "Swing Length" bars after the fact. At reversals this could label a break in the direction of the leg that had just ended (e.g. printing "BOS ▲" while price was already selling off), and it left the trend state — including the HTF bias in the panel — lagging well behind the chart. With "Require HTF Alignment" enabled, that stale bias could block valid signals during an obvious trend.
What I fixed:
Swing pivots now only establish the levels. The break itself is detected on the bar where price actually crosses an unbroken level — and the trend state (and BOS vs CHoCH labeling) flips on that same bar.
BOS/CHoCH alerts now fire on the close of the actual break bar instead of many bars later.
Each level can only fire once; a new break requires a fresh swing pivot, so no repeated triggers off the same level.
The same real-time logic is applied to the HTF structure (fixes the stuck HTF bias at reversals) and to the internal structure.
"Require Body Close" is now a true body-vs-wick switch: enabled = the candle body must close beyond the level; disabled = a wick through is enough.
OTE zones now form on the break bar (leg measured from the opposing swing level to the breaking candle's extreme), so they appear earlier.
What you'll notice
BOS/CHoCH labels appear at the candle that broke the level; trend state and HTF bias react much faster at reversals.
Because detection is more responsive, ranging markets can show more CHoCH flips than before. If that's too sensitive for your style, enable "Require Body Close" or increase the Swing Length.
Signal timing and frequency will differ from v1.5 — the structure and HTF-alignment inputs to the confluence score are now timely instead of lagged.
Script de código aberto
Em verdadeiro espírito do TradingView, o criador deste script o tornou de código aberto, para que os traders possam revisar e verificar sua funcionalidade. Parabéns ao autor! Embora você possa usá-lo gratuitamente, lembre-se de que a republicação do código está sujeita às nossas Regras da Casa.
The Good, the Bad and the Bitcoin — No hype, just data.
Free indicators & honest backtests: youtube.com/@TheGoodTheBadAndTheBitcoin
Free indicators & honest backtests: youtube.com/@TheGoodTheBadAndTheBitcoin
Aviso legal
As informações e publicações não se destinam a ser, e não constituem, conselhos ou recomendações financeiras, de investimento, comerciais ou de outro tipo fornecidos ou endossados pela TradingView. Leia mais nos Termos de Uso.
Script de código aberto
Em verdadeiro espírito do TradingView, o criador deste script o tornou de código aberto, para que os traders possam revisar e verificar sua funcionalidade. Parabéns ao autor! Embora você possa usá-lo gratuitamente, lembre-se de que a republicação do código está sujeita às nossas Regras da Casa.
The Good, the Bad and the Bitcoin — No hype, just data.
Free indicators & honest backtests: youtube.com/@TheGoodTheBadAndTheBitcoin
Free indicators & honest backtests: youtube.com/@TheGoodTheBadAndTheBitcoin
Aviso legal
As informações e publicações não se destinam a ser, e não constituem, conselhos ou recomendações financeiras, de investimento, comerciais ou de outro tipo fornecidos ou endossados pela TradingView. Leia mais nos Termos de Uso.