OPEN-SOURCE SCRIPT
Aktualisiert Confluence Engine+

Confluence Engine+
Maps the PD arrays taught by ICT. Instead of plotting a dozen isolated objects and leaving you to weigh them by eye, it reads the confluences present at price — a liquidity raid into a discount PD array, confirmed by a breaker, with SMT, inside a killzone — into the ICT directional bias, the current draw on liquidity, and a corner dashboard. It reports context and leaves the trade to you. It is not a signal generator: it does not fire buy or sell orders and it does not place entries or exits.
What it does
Six modules, each toggleable, built so later stages read the state the earlier ones capture.
1 · Killzones & Sessions. Time-gates the London, NY AM and NY PM killzones and marks the Asia, London and New York session highs and lows as unmitigated levels, plus the 00:00 New York Midnight Open — a core daily reference (below it leans the day bullish, above it bearish). Every time window here — the killzones included — is resolved on the session source timeframe rather than the chart's. A killzone is ninety minutes to three hours, narrower than a single higher-timeframe candle, so judged off the chart a candle merely overlapping one would report as fully inside it. The killzone is read at the candle's close, and the Midnight Open the same way, so it still resolves on charts whose own candles never open at 00:00.
2 · Structure & Dealing Range. Pivot highs and lows define the swing structure the arrays build on. The dealing range — the window whose midpoint separates premium from discount — is taken from a fixed higher-timeframe period: the weekly range on 1-hour-and-up charts, the daily range on anything intraday below that.
3 · Liquidity. Session highs and lows (Asia, London, New York) plus prior day and prior week highs and lows are drawn as reference liquidity, each anchored to the candle that formed it. Session extremes are measured on a lower timeframe rather than the chart's: a three-hour London window is shorter than a single 4-hour candle, so read off the chart it would collapse to the high of whichever candle happened to contain it. Sourcing them lower keeps session levels correct on any chart, and charts already at or below that timeframe track natively.
A level tracks the right edge while it rests; the instant price touches it, it is mitigated — the line stops extending at that candle, turns dotted and dims — so taken liquidity stays readable as history and can never be mistaken for a live level. Where levels land close together only the most significant is drawn, a weekly level outranking a prior-day level, which outranks a session level, so near-duplicates never stack. Each level then retires once it ages past its lookback window: the "back" settings are a window in days and weeks, so nothing lingers long after the session or period that formed it.
4 · PD Arrays. Fair Value Gaps (BISI / SIBI), Volume Imbalances, Order Blocks (the candle body before a displacement) and the Order-Block-to-Breaker lifecycle. A FVG registers only when the gap clears a height floor and its middle candle is a genuine displacement candle, so routine three-bar gaps are filtered out. A Volume Imbalance is the FVG's thinner cousin — a two-candle gap between the bodies that a wick still trades through, so the only volume in the gap changed hands in wicks; it carries its own sensitivity floor and lives under the same lifecycle as the FVGs. A new gap also removes any stale opposite-direction gap it overlaps: that range has since been delivered through the other way, so the old one-sided imbalance cannot stand.
An Order Block must earn its place with the full ICT sequence: the close that breaks the prior swing — a structure break grants that credit exactly once, so blocks sit at real breaks rather than printing mid-trend — and the leg must leave a Fair Value Gap behind it. The gap is the displacement evidence: a leg that never gaps did not really displace, and its block never registers. Only the order blocks that matter make the chart. A live block is the body of its origin candle, open to close. When price closes through it the block fails and flips into a Breaker — and a breaker takes the full candle, wick to wick: the displacement behind it is already proven, so the whole candle becomes the array. A percentage-fill mitigation decider governs each array: once price trades a chosen depth into it from the side it is approached from (default 50%, consequent encroachment), the array is mitigated — either faded and kept (dotted, faint, check mark) or removed, whichever you set. A largest-array-wins declutter keeps overlapping zones from stacking.
5 · SMT Divergence. A liquidity-sweep read against a correlated symbol — auto-paired (NQ to ES, ES to NQ, YM to ES, GC to SI, and their micros) or a symbol you set. When your chart takes a swing level but the peer holds its aligned level and refuses to follow, the move lacks participation: a SMT is drawn from the swept level to the sweep. Pooled swings age out after a set number of bars, so a divergence is only ever drawn between swings that were still contemporaries — never between two that are days apart.
6 · Dashboard. A pure confluence read-out of the state each module captures — the ICT bias, and the current draw on liquidity: the nearest unmitigated high above (the resting buyside) and the nearest unmitigated low below (the resting sellside), each named with its distance — where price is being drawn to, read straight from the level engine. When liquidity is taken, the sweep row names the level that was raided — PDH, PDL, a session high or low — rather than a generic flag. Below that, whichever confluences are live (a OB or Breaker tap, a SMT), the killzone, the Midnight Open and the dealing-range position — every row a decision input, nothing that is merely inventory. It reports context; the trade is left to you, and nothing fires.
Visual grammar
Order blocks and breakers draw as levels by default, the way a block is actually read: the proximal edge — the price that gets traded — a solid line in the direction colour, the distal edge dotted, the consequent encroachment dotted grey between them, and a small tag at the right end that renames itself from OB to Breaker when the block flips. Prefer the block as a region instead and one setting draws it as a see-through zone with a hard border. A live gap zone is solid with its label travelling at the live edge; once a zone is mitigated to the chosen fill depth it turns dotted, fades, and its name folds into the zone itself — a faint "✓ name" carried inside the frozen box, quiet by design, so worked zones read as history at a glance. A liquidity level extends while it rests and freezes into a dotted line the moment it is taken — full-strength black by default, with an optional dim. Purple marks bullish arrays, magenta bearish; liquidity and levels are neutral. Nearby level labels merge so the chart stays readable, and objects project a few bars past the last candle so labels sit in clear space, never on price.
Method & repainting
Every detection path — liquidity capture, PD-array formation, mitigation and SMT — evaluates only on closed bars, so nothing is drawn, moved or removed on the strength of an unfinished candle. Once a level, zone or SMT line is on the chart it stays where it was placed. Completed period levels fix at the rollover, and session extremes are read from the closed intrabars of the session source timeframe.
Two things update live, by design. The dashboard reads current price, so the bias and draw rows move during the forming candle and settle at its close; and the right-edge labels re-merge as levels are added or taken. Neither creates or moves a drawn object.
Swing-based features — the order-block structure break and SMT — depend on pivots, which confirm a set number of bars after the swing itself forms. That is a fixed delay, not a revision: a pivot never moves once printed. Session levels also rely on lower-timeframe data, which is available for a limited span of recent history, so they thin out far back on the chart.
Settings
Session timezone, session windows and the session source timeframe, per-array sensitivities and the mitigation decider, block drawing mode (levels or zone), the SMT peer and liquidity memory, and full dashboard controls are all exposed as inputs.
Disclaimer
This is a decision-support tool for discretionary ICT trading. It is not financial advice, and no market's past behaviour is indicative of future results.
Maps the PD arrays taught by ICT. Instead of plotting a dozen isolated objects and leaving you to weigh them by eye, it reads the confluences present at price — a liquidity raid into a discount PD array, confirmed by a breaker, with SMT, inside a killzone — into the ICT directional bias, the current draw on liquidity, and a corner dashboard. It reports context and leaves the trade to you. It is not a signal generator: it does not fire buy or sell orders and it does not place entries or exits.
What it does
Six modules, each toggleable, built so later stages read the state the earlier ones capture.
1 · Killzones & Sessions. Time-gates the London, NY AM and NY PM killzones and marks the Asia, London and New York session highs and lows as unmitigated levels, plus the 00:00 New York Midnight Open — a core daily reference (below it leans the day bullish, above it bearish). Every time window here — the killzones included — is resolved on the session source timeframe rather than the chart's. A killzone is ninety minutes to three hours, narrower than a single higher-timeframe candle, so judged off the chart a candle merely overlapping one would report as fully inside it. The killzone is read at the candle's close, and the Midnight Open the same way, so it still resolves on charts whose own candles never open at 00:00.
2 · Structure & Dealing Range. Pivot highs and lows define the swing structure the arrays build on. The dealing range — the window whose midpoint separates premium from discount — is taken from a fixed higher-timeframe period: the weekly range on 1-hour-and-up charts, the daily range on anything intraday below that.
3 · Liquidity. Session highs and lows (Asia, London, New York) plus prior day and prior week highs and lows are drawn as reference liquidity, each anchored to the candle that formed it. Session extremes are measured on a lower timeframe rather than the chart's: a three-hour London window is shorter than a single 4-hour candle, so read off the chart it would collapse to the high of whichever candle happened to contain it. Sourcing them lower keeps session levels correct on any chart, and charts already at or below that timeframe track natively.
A level tracks the right edge while it rests; the instant price touches it, it is mitigated — the line stops extending at that candle, turns dotted and dims — so taken liquidity stays readable as history and can never be mistaken for a live level. Where levels land close together only the most significant is drawn, a weekly level outranking a prior-day level, which outranks a session level, so near-duplicates never stack. Each level then retires once it ages past its lookback window: the "back" settings are a window in days and weeks, so nothing lingers long after the session or period that formed it.
4 · PD Arrays. Fair Value Gaps (BISI / SIBI), Volume Imbalances, Order Blocks (the candle body before a displacement) and the Order-Block-to-Breaker lifecycle. A FVG registers only when the gap clears a height floor and its middle candle is a genuine displacement candle, so routine three-bar gaps are filtered out. A Volume Imbalance is the FVG's thinner cousin — a two-candle gap between the bodies that a wick still trades through, so the only volume in the gap changed hands in wicks; it carries its own sensitivity floor and lives under the same lifecycle as the FVGs. A new gap also removes any stale opposite-direction gap it overlaps: that range has since been delivered through the other way, so the old one-sided imbalance cannot stand.
An Order Block must earn its place with the full ICT sequence: the close that breaks the prior swing — a structure break grants that credit exactly once, so blocks sit at real breaks rather than printing mid-trend — and the leg must leave a Fair Value Gap behind it. The gap is the displacement evidence: a leg that never gaps did not really displace, and its block never registers. Only the order blocks that matter make the chart. A live block is the body of its origin candle, open to close. When price closes through it the block fails and flips into a Breaker — and a breaker takes the full candle, wick to wick: the displacement behind it is already proven, so the whole candle becomes the array. A percentage-fill mitigation decider governs each array: once price trades a chosen depth into it from the side it is approached from (default 50%, consequent encroachment), the array is mitigated — either faded and kept (dotted, faint, check mark) or removed, whichever you set. A largest-array-wins declutter keeps overlapping zones from stacking.
5 · SMT Divergence. A liquidity-sweep read against a correlated symbol — auto-paired (NQ to ES, ES to NQ, YM to ES, GC to SI, and their micros) or a symbol you set. When your chart takes a swing level but the peer holds its aligned level and refuses to follow, the move lacks participation: a SMT is drawn from the swept level to the sweep. Pooled swings age out after a set number of bars, so a divergence is only ever drawn between swings that were still contemporaries — never between two that are days apart.
6 · Dashboard. A pure confluence read-out of the state each module captures — the ICT bias, and the current draw on liquidity: the nearest unmitigated high above (the resting buyside) and the nearest unmitigated low below (the resting sellside), each named with its distance — where price is being drawn to, read straight from the level engine. When liquidity is taken, the sweep row names the level that was raided — PDH, PDL, a session high or low — rather than a generic flag. Below that, whichever confluences are live (a OB or Breaker tap, a SMT), the killzone, the Midnight Open and the dealing-range position — every row a decision input, nothing that is merely inventory. It reports context; the trade is left to you, and nothing fires.
Visual grammar
Order blocks and breakers draw as levels by default, the way a block is actually read: the proximal edge — the price that gets traded — a solid line in the direction colour, the distal edge dotted, the consequent encroachment dotted grey between them, and a small tag at the right end that renames itself from OB to Breaker when the block flips. Prefer the block as a region instead and one setting draws it as a see-through zone with a hard border. A live gap zone is solid with its label travelling at the live edge; once a zone is mitigated to the chosen fill depth it turns dotted, fades, and its name folds into the zone itself — a faint "✓ name" carried inside the frozen box, quiet by design, so worked zones read as history at a glance. A liquidity level extends while it rests and freezes into a dotted line the moment it is taken — full-strength black by default, with an optional dim. Purple marks bullish arrays, magenta bearish; liquidity and levels are neutral. Nearby level labels merge so the chart stays readable, and objects project a few bars past the last candle so labels sit in clear space, never on price.
Method & repainting
Every detection path — liquidity capture, PD-array formation, mitigation and SMT — evaluates only on closed bars, so nothing is drawn, moved or removed on the strength of an unfinished candle. Once a level, zone or SMT line is on the chart it stays where it was placed. Completed period levels fix at the rollover, and session extremes are read from the closed intrabars of the session source timeframe.
Two things update live, by design. The dashboard reads current price, so the bias and draw rows move during the forming candle and settle at its close; and the right-edge labels re-merge as levels are added or taken. Neither creates or moves a drawn object.
Swing-based features — the order-block structure break and SMT — depend on pivots, which confirm a set number of bars after the swing itself forms. That is a fixed delay, not a revision: a pivot never moves once printed. Session levels also rely on lower-timeframe data, which is available for a limited span of recent history, so they thin out far back on the chart.
Settings
Session timezone, session windows and the session source timeframe, per-array sensitivities and the mitigation decider, block drawing mode (levels or zone), the SMT peer and liquidity memory, and full dashboard controls are all exposed as inputs.
Disclaimer
This is a decision-support tool for discretionary ICT trading. It is not financial advice, and no market's past behaviour is indicative of future results.
Versionshinweise
Order blocks and breakers now draw at their levels, a breaker takes the whole candle every time, and the two no longer compete for the same slots on the chart.- Order blocks and breakers draw at their levels rather than as filled zones, the way a block is actually read: the proximal edge — the price that gets traded — solid in the direction colour, the distal edge dotted, and consequent encroachment dotted grey between them, with the block named at the right end. One setting puts the filled zones back if you prefer to read a block as a region.
- A failed order block becomes a breaker across the full candle, wick to wick, every time. It previously widened to the full candle only when its origin candle happened to engulf the one before it, so two breakers formed the same way could be drawn to different heights — and their consequent encroachment sat in different places as a result.
- Order blocks and breakers each keep their own allowance of live zones. They shared a single allowance before, so a run of breakers could push every live order block off the chart while the setting still read per type. Gaps and volume imbalances are unaffected — they always carried their own.
Nothing changes in how order blocks, breakers, gaps or liquidity are found.
Versionshinweise
Visual Update Only-Midnight Open
Line + Label line drift fixed ✅
SMT
Label Placement Changed ✅
Versionshinweise
Minor Bug on last update push fixed. Versionshinweise
Three additions from a feature request, all behind their own setting and all off by default, so updating won't rearrange a chart you've already laid out.- []Midlines on gaps. Gaps now carry their consequent encroachment, dotted grey through the zone. BISI, SIBI and volume imbalances all get it. Order blocks and breakers already had theirs when drawn as levels. Turning it on lights the gaps already on your chart, not only the ones that form afterwards. []Inverse FVG. A gap that price closes clean through used to just be deleted. Now it flips polarity, retags as IFVG and carries on trading as the opposite array under the same mitigation rules — a second close through it ends it. Inverted volume imbalances come with it and tag IVI. They draw in their own colour, orange, rather than joining the bull/bear pair: an inversion isn't a gap that changed direction, it's a failed gap being traded from the other side, and it shouldn't get read as an ordinary gap that had been sitting there all along.
- Weekly open. Drawn dotted and labelled, sitting a lane right of the midnight open so the two labels don't stack. It's a reference level only — deliberately kept out of the bias read, which stays the dealing range plus the midnight open, so the dashboard doesn't quietly change on anyone.
Also fixed: gaps, volume imbalances and inversions each hold their own allowance of live zones. The setting has always read per type and the tooltip has always promised it, but the gap family shared one, so a run of volume imbalances could push every live gap off the chart. Order blocks and breakers were separated for the same reason in an earlier update — this finishes the job. The previous note claimed the gap family was unaffected; that was wrong, and this is the correction.
Nothing changes in how gaps, order blocks, breakers, liquidity or SMT are found.
Versionshinweise
Order blocks now sit on the right candle. The block was taken from the last opposite-colour candle before the displacement. That is only the correct candle when it also happens to carry the extreme body close, and on a stepped move into a reversal it usually does not — so blocks were landing on candles that are not order blocks. The origin is now the candle with the lowest body close for a bullish block, the highest for a bearish one, searched across the pullback the move turned away from rather than a fixed handful of bars. Breakers inherit the fix, because a breaker is the block that failed: a block on the wrong candle could never fail into a valid breaker.
Nothing else about how a block qualifies has changed — it still has to close through structure and leave a fair value gap.
SMT fixes.
- A peer that cannot be reached no longer takes the indicator down. If the correlated symbol could not resolve on your chart — no data for it, a renamed contract, a typo in the override — the script raised a runtime error and every other feature died with it. The peer now simply returns nothing and no SMT is marked; the rest of the chart carries on.
- Metals pair properly. Gold to silver now works in both directions and in matching sizes, and spot XAU pairs to XAG. The peer is resolved on your chart's own exchange rather than a hardcoded one.
- The label is the peer's name alone. It read "SMT vs BTCUSDT" on every divergence; the line and its colour already say what it is and which way it reads, so it now just names the other instrument, smaller.
- The label holds its distance from the line. Its clearance was set in price, so the gap opened and closed every time you zoomed — crowding the line at one zoom, drifting at another. It is now offset in pixel space and holds the same gap at any zoom or range.
- Broken SMTs are removed by default. A divergence price has traded back through has been violated, and leaving it drawn is what turns a busy session into a wall of lines. This one does change an existing chart. Turn Remove Broken SMTs off to keep them drawn dotted and dimmed as before.
A crash fix. The routine that draws a SMT walked back through history with no limit on how far it could go. Given a long enough run of equal highs or lows it stepped past the data the script is allowed to read and threw a runtime error, killing the indicator. It showed up as an intermittent failure on low timeframes and looked fine on everything higher, because the walk only fails once the data makes it run long enough. It is now bounded.
Versionshinweise
Chart Visual Reference Updated Versionshinweise
[]Arrays retire. A live order block, breaker, gap or inversion used to stay on the chart until three newer ones of its kind pushed it off, however old it was or however far price had walked from it. A breaker from March was still drawn on a 4h chart in September, hundreds of points under price. Two new settings under PD Arrays fix that: Retire arrays older than (default 400 bars of the chart timeframe, a breaker or inversion counting from its flip) and Retire arrays further than (default 10 ATR from the traded edge). Spent, faded arrays age out under the same rules, so worked history doesn't pile up either. Set either to 0 to switch it off.
[]Order blocks are groups. A block was one candle — the extreme body close in the pullback. It is now the run of consecutive same-direction candles in front of that candle, up to four: the body runs from the first candle's open to the extreme close, the full range (what a breaker expands to) is the group's wicks, and the levels start at the first candle. A lone candle is a group of one, so those draw exactly as before. Because the displacement now has to clear the whole group, a block can register a candle later than it used to.- Block grade. Every block is scored 0–4 on the context it formed in — liquidity raided before the leg, the right side of the dealing range (bullish in discount, bearish in premium), displacement away from the block of at least a set ATR distance, and a killzone birth. Block grade filter drops anything below the cut; it defaults to 0, so nothing changes until you raise it. Show the grade on the block tag appends the score — "Bull OB 15m 3/4" — so you can see what your blocks score before you choose where to cut. It's a consistency filter, not a win-rate claim: it shows you the blocks that meet the criteria, you still read them.
Fixed: on a chart with enough history, a block that price never returned to would eventually be older than the history buffer, and re-anchoring its levels threw a runtime error that took the whole indicator down. Any array that old is now retired outright.
Also: level labels (PDH, PDL, session highs and lows, the midnight and weekly opens) now sit fully to the right of the line end instead of straddling it, and default one size smaller. The size is still yours to set under General.
Versionshinweise
Count the allowance. A new setting under PD Arrays decides what one Max Live Zones allowance covers.
Total is the original behaviour and the default, so updating changes nothing on your chart. Bullish / bearish keeps N bullish and N bearish of each type, so a run in one direction can never clear the other. Above / below price keeps N of each type above the current price and N below it, so the arrays you are trading into are never pushed off by the ones behind you. A breaker counts on the side it now trades as, and a zone straddling price goes by its midpoint. Every type still holds its own allowance; the setting only changes what one allowance is counted over.
Nothing changes in how gaps, order blocks, breakers, liquidity or SMT are found.
Versionshinweise
One rule for every array. Wicks trade anywhere; bodies decide. A gap or order block is live for as long as bodies hold the right side of its consequent encroachment, and a wick into it with the body holding respects it — it carries a bold ✓ at its live edge from then on. A body that closes past the consequent encroachment while still inside the array disrespects it: it fades and carries a single bold ✗, or is removed, as the On mitigation setting says, and only the most recently faded array of each type is kept so the chart never fills with history. A body that closes outside removes it. The one exception is an array that was respected first: closed outside, it inverts — a gap to IFVG, an order block to breaker — and that is now the only way an inversion or a breaker is made. A gap or block run straight through before it was ever respected is removed, not inverted. A breaker is read as its whole range, with no consequent encroachment rule, and only a body closing outside it ends it. The Mitigation fill % setting is gone; the consequent encroachment is now the filter setting.
Above / below by the edges. When the Max Live Zones allowance is counted Above / below price, a zone is now placed by its edges rather than its midpoint. A zone entirely above the close is above, entirely below is below, and a zone the close is sitting inside counts on the side it is traded from — a bullish zone below, a bearish zone above. A zone price is working no longer swaps buckets as price moves inside it, so it cannot be pruned for that alone. The same rule reads every type, a breaker on the side it now trades as.
Mitigated zone fade.
A new setting under PD Arrays sets how faint a faded zone is drawn, 0 solid to 100 invisible. The default is the fade the script has always used. The dotted border dims in step with the fill, so the frame always reads stronger than the fill. It applies to gaps, inversions and blocks drawn as zones; blocks drawn as levels keep their own dim.
Nothing changes in how gaps, order blocks, breakers, liquidity or SMT are found, and Total and Bullish / bearish counting are untouched.
Versionshinweise
A tested block always becomes a breaker. An order block that price has touched and then closes through flips to a breaker, wherever its bodies sat on the way. Before this a body closing past the block's midpoint marked it spent, and the close through then removed it, so the blocks that failed in stages, which is most of them, never became breakers at all.
A block has no consequent encroachment test now: any touch that holds inside it is respect, a body closing through it is the failure, and only a block that was never tested is removed rather than flipped. Blocks no longer fade, so the On mitigation setting now reads gaps, Volume Imbalances and inversions alone, where the consequent encroachment is the threshold.
Gaps show beside blocks drawn as levels.
A gap sitting inside a live block used to hide behind it in both drawing modes. That declutter exists so a gap never doubles up inside a painted block, and with blocks drawn as levels there is nothing to double up against, so the gap that displaced out of a block, which sits right against it, was the one gap the chart never showed. It shows now. Blocks drawn as zones still hide the gaps inside them.
Nothing changes in how gaps, order blocks, breakers, liquidity or SMT are found, the block origin rule, the gap lifecycle, the cap and its three counting modes are untouched, and every default is as it was.
Versionshinweise
Breakers paint as zones. With blocks drawn as levels, a breaker now paints as a zone in the breaker colour, dashed border and a lighter fill than a live block, over its full wick-to-wick range. A live order block and a breaker used to look the same at a glance, three lines and a tag each, and the tag was the only thing telling them apart; now a breaker is a region and an order block is a set of levels, and the two cannot be confused. A new setting, Breakers always draw as zones, is on by default; switch it off to keep breakers as levels.The opens sit clear of the arrays.
The Midnight Open and Weekly Open lines now project well past the PD arrays' live edge, in their own lane to the right of the box tags, Midnight first and Weekly beyond it. They used to end a few bars past the boxes, where a breaker or gap tag could print over their names. The lane follows the Right-side offset setting.
One live zone per type by default.
Max Live Zones per Type now defaults to 1, down from 3: the newest order block, breaker, gap, Volume Imbalance and inversion of each kind is the one on the chart, and the older ones drop off as they always have. With breakers now painting as regions, three of each stacked up fast; one of each reads clean. Set it back to 3 to keep the previous allowance.
Breakers are read from the ICT breaker candle.
A new setting, Breaker candle, holds both readings.
Up-close at the low is the default; Failed block is the previous behaviour, and under it a second setting, Breaker requires a tested block, decides whether a block run straight through untested flips or is removed, off by default so every closed-through block flips. In either reading the breaker takes the full range, wick to wick, and lives, respects and retires as before.
Nothing changes in how gaps, order blocks, breakers, liquidity or SMT are found, the block origin rule, the gap lifecycle, the cap and its three counting modes are untouched, and every default not named above is as it was.
Versionshinweise
A Breaker is now read from the order block that failed, and this changes the default. A block that price closes through flips in place: it trades from the other side from then on, exactly as a Fair Value Gap that is closed through inverts into an IFVG, and with no need for the block to have been touched first. What has to be closed through is the block's WHOLE candle group, wick and all — not the body it is drawn at. That distinction is the difference between a failed block and a retracement into one: the block is drawn at its body because the body is the price you trade from, but the group's high is the swing high it formed at, so only a close through the whole thing is a break of structure. Testing the body alone let price clear a block by a few points, stall under the old high, and still mint a breaker for a high that never printed. Nothing further is asked of the breaking candle, because the block was already earned — a block only registers where displacement closed through the prior swing AND left a gap behind it. One consequence to expect: blocks live a little longer than before, since clearing the body no longer ends one. The previous default, the ICT breaker CANDLE read from the swing rather than the block, is still there — Breaker candle, Up-close at the low — and is unchanged in how it works. If your chart looked the way you wanted it before this update, that setting is the one to put back.
An internal swing is not liquidity.
This one applies to the Up-close at the low reading, and it is the fix for breakers appearing in consolidations. That reading arms its candidate against the last pivot high or low, which inside a range sits a couple of points away — so an ordinary oscillation cleared it, counted as the run on liquidity, and printed a breaker on almost every leg. Two new settings govern it. The run on liquidity must CLOSE beyond the level, on by default, means a wick through the old level is no longer a higher high; the run is read on the close, the same standard already applied to the break that completes it. A breaker needs the full sequence, off by default, adds that the run must land on one of the levels this script actually draws being raided — a session or previous-period high, an equal-highs pool — and that the breaking candle must be displacement. It is off because the failed-block reading has the sequence at the block's birth already; turn it on if you use the swing reading, where it does most of its work.
Volume Imbalances are absorbed into the gap instead of drawn beside it.
A Volume Imbalance — a two-candle gap between the bodies that a wick still trades through — was being drawn as a separate array with its own live-zone allowance, which put two zones on the chart for one region and left the Fair Value Gap itself measured smaller than it really is. It is part of the same imbalance, so it now EXTENDS the gap: a body gap on either seam of the displacement candle pushes the zone out to that body edge, and one zone carries the whole region. The new setting, Absorb Volume Imbalances into gaps, is on by default; turned off, the zone is the wick gap alone.
Suspension Blocks. A new array, and a new setting, Detect Suspension Blocks, on by default. A Suspension Block is the case where both seams carry a Volume Imbalance at once: three same-direction candles, each opening beyond the previous one's close, so the bodies never trade back through the leg at either join. It qualifies with no wick gap present at all — a leg can be stacked tightly enough that every wick overlaps and still never let its bodies trade back — and its zone is the whole suspended span, the first candle's close to the last candle's open. Where a wick gap is present too, the block's wider span is drawn instead of it, so the two never stack. It is tagged SB, inverts to ISB under the same failure lifecycle as a gap, and holds its own Max Live Zones allowance. A body gap across a session or weekend break is a calendar artefact rather than displacement, so a block whose joins span more than a bar's worth of time is rejected.
A multi-candle block now stays one cluster.
Order blocks and breakers have always spanned up to four consecutive same-direction candles rather than one. What was missing was a rule about which of them belong together, so a displacement candle — the leg away from the block, not part of it — could be glued on and the block drawn far taller than it is. A new setting, Group similarity band, decides: a candle joins while it measures between half and double the anchor candle, the block's extreme-body-close candle or the breaker's first candle at the swing. The block is measured on its body, because a block is a body; the breaker on its whole range, because a breaker is read wick to wick. Lower it to split groups harder, raise it to let more of the run in.
A minimum size on order blocks. A candle whose body is a point or two is a doji, not an order block, whatever else it satisfies — it has no room for price to be traded from, and on a quiet chart those were the majority of what drew. The new OB sensitivity setting is a floor on the block group's body height, measured in ATR so it travels across instruments and timeframes. Set it to 0 to draw every block that meets the sequence.
One tag grammar.
Blocks read OB + / OB - and Breaker + / Breaker -, with the timeframe and the optional grade after them. The sign is the direction the array trades as right now, which for a breaker is the opposite of the block it came from — so a tag never has to be read twice to work out which side it is on.
A taken level is marked with a tiny ✗.
Liquidity levels already froze into a dotted line the moment they were run. They now also carry a small ✗ at the middle of the line, above a high and below a low, so a level that has been taken is legible at a glance without reading its name. New setting, Mark a taken level with a ✗, on by default.
Blocks drawn as levels read more clearly.
The distal edge is now solid like the proximal one — both are prices the block was built from — and the consequent encroachment between them is the dotted grey line, matching the gap midline. Previously the distal edge was the dotted one, which made the two traded edges look like different kinds of thing.
Every default not named above is as it was, and nothing changes in how liquidity, sessions, SMT or the dashboard are found or drawn.
Versionshinweise
An optimal trade entry band, measured on the swing leg. OTE band on the swing leg, under Swing Structure, draws the 0.62-0.79 retracement the way you would draw it by hand: from the last swing low to the last swing high, with the retracement read back from whichever of the two printed later. A leg that ran up retraces down into discount; a leg that ran down retraces up into premium. The leg's own direction is the band's direction, so the band cannot point somewhere the leg does not, and there is no separate setting to get wrong. Swing sensitivity is the Pivot Left and Right Strength settings the rest of the structure already uses. From and to are settings, and the band is blackish grey because a retracement is a measurement rather than a directional array. Off by default.It shows the leg it came from.
A dotted grey line spans the leg the band was measured on, so the two candles behind it and the way price ran between them are readable instead of taken on trust. The band itself begins where the leg completes rather than running back beside it, because a retracement does not exist until both ends of it do.
Nothing else moves.
The band is drawn, not scored. Block grades stay 0-4 on the same four points, so Block grade filter means exactly what it meant before and no chart changes its blocks. Detection, the arrays, the levels, SMT and the dashboard are untouched, and every existing setting keeps the value it had.
Versionshinweise
A taken level can say which level it wasTaken level mark reads, under the level settings, chooses what the mark on a taken level says. ✗ is the small cross it has always drawn. Name writes the level's own name in its place, PDH or PWL with its date, or the session high or low, so the liquidity that was taken reads straight off the chart without hovering or counting back.
It sits where the cross sat
The name is drawn at the middle of the frozen run, on the outside of the level, above a high and below a low, so it never covers the line it describes. It is drawn only while Mark a taken level with a ✗ is on.
Nothing else moves
The setting opens on ✗, so every chart looks exactly as it did. Which levels are tracked, when a level counts as taken, the dotted style, the dashboard's Sweep row and every other setting are unchanged.
Open-source Skript
Ganz im Sinne von TradingView hat dieser Autor sein/ihr Script als Open-Source veröffentlicht. Auf diese Weise können nun auch andere Trader das Script rezensieren und die Funktionalität überprüfen. Vielen Dank an den Autor! Sie können das Script kostenlos verwenden, aber eine Wiederveröffentlichung des Codes unterliegt unseren Hausregeln.
Haftungsausschluss
Die Informationen und Veröffentlichungen sind nicht als Finanz-, Anlage-, Handels- oder andere Arten von Ratschlägen oder Empfehlungen gedacht, die von TradingView bereitgestellt oder gebilligt werden, und stellen diese nicht dar. Lesen Sie mehr in den Nutzungsbedingungen.
Open-source Skript
Ganz im Sinne von TradingView hat dieser Autor sein/ihr Script als Open-Source veröffentlicht. Auf diese Weise können nun auch andere Trader das Script rezensieren und die Funktionalität überprüfen. Vielen Dank an den Autor! Sie können das Script kostenlos verwenden, aber eine Wiederveröffentlichung des Codes unterliegt unseren Hausregeln.
Haftungsausschluss
Die Informationen und Veröffentlichungen sind nicht als Finanz-, Anlage-, Handels- oder andere Arten von Ratschlägen oder Empfehlungen gedacht, die von TradingView bereitgestellt oder gebilligt werden, und stellen diese nicht dar. Lesen Sie mehr in den Nutzungsbedingungen.