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.
Versionshinweise
The OTE now measures the leg behind the last structure shiftOTE leg source, under the structure settings, chooses which leg the band is measured on. Last structure shift (MSS) is the new default: the leg that produced the most recent confirmed close through a swing. Its far end is the raid's own extreme, the lowest low or highest high between the last swing and the candle that closed through structure. Its near end is the leg's extreme so far, tracking price until the first swing confirms after the break, then fixed there. A bullish shift measures the discount of the leg up, a bearish shift the premium of the leg down, and a new break in either direction starts a new leg and retires the old band.
Why
The band used to be measured across the last two pivots whatever they were. On a chart with tight pivots that is often a few candles at the top of a move while price has already left it, so the band sat on a retracement of nothing. It now follows the shift in order flow, so it is always in line with the current leg.
Existing charts move
Because the new source is the default, a chart with the OTE band switched on will see it move to the structure leg on this update. Last two swings is still there under the same setting for anyone who wants the old measurement back.
Liquidity levels on the daily, and the prior month
Prior day and prior week highs and lows, their sweep marks and the dashboard's Sweep row now draw on every chart up to the daily; they were intraday only. Prior Month High / Low and Prior 3-Month High / Low, the last completed calendar quarter, join them under the same settings, on by default, ranked above the weekly where two levels share a price. The dashboard's Draw rows read the nearest live level above and below price, so on the daily they now name the week, month or quarter level price is drawing toward. Session highs and lows and the midnight open stay intraday, since a daily candle holds the whole session.
Nothing else moves
The 0.62 to 0.79 band, its colour, the dotted grey leg line, the pivot strengths, every other module and every other setting are unchanged. The band is still off by default.
Versionshinweise
Source Code Correction No logic changed.
Versionshinweise
Correction to the previous noteThe earlier note said Last structure shift (MSS) was the new default and that
existing charts would move. That was wrong. Last two swings is still the default
and no chart moved. MSS is there as an option under OTE leg source.
A band that is switched on and not drawn now says why
Instead of nothing appearing: no structure shift yet, leg incomplete, waiting on
a second swing, or the last two swings do not form a leg.
Tooltips
Both OTE settings now say which one governs the leg's ends — pivot strength for
the two-swing leg, the structure break itself for the MSS leg.
Versionshinweise
The OTE leg runs low to highThe swing leg is measured between its real extremes. An up leg runs from its low to the highest high printed since, and extends with every new high, so a lower high made on the pullback no longer takes over as the end of the leg. A new high made after a swing low has confirmed starts a new leg from that pullback's low, because that low is what launched the move. A down leg mirrors it. The dotted leg line and the band move to the leg's true high or low.
The OTE has its own swing strength
OTE swing strength, under the structure settings, sets which pullbacks count as swings for the OTE leg on the Last two swings source. It is 1 by default, so the leg anchors on the most recent swing high and swing low, the way the fib is drawn by hand. Order blocks, structure shifts and the rest of the structure keep the Pivot Left and Right Strength, so those do not move.
A leg fails at the far edge of the band
When a candle body closes beyond the far edge of the OTE band, 0.79 by default, the retracement has gone deeper than an optimal entry allows and the leg is spent. On the swing leg source it turns straight away: the new leg runs from the extreme the old one reached to the deepest point of the retracement that broke it, so the next band reads from the real turning point instead of waiting on a pivot. On the Last structure shift (MSS) source the band comes off until the next break, with a short stacked note at the right edge saying so.
The structure shift leg counts its own breaking candle
On the Last structure shift (MSS) source, the near end of the leg is the leg's extreme from the raid onward, the candle that closed through structure included. When that candle is itself the top or bottom of the leg, the band now reaches it instead of stopping at a later, smaller swing.
Market structure shifts on the chart
Show MSS on chart, under the structure settings, marks each market structure shift: a line at the broken swing, running from the swing to three candles past the one that closed through it, with MSS in bold at the swing, on the outside of the level. These are the same breaks the order blocks and the Last structure shift (MSS) leg source read, so what the script uses is now what you see. Max MSS shown keeps the most recent shifts, three by default, and the bullish and bearish colours sit beside it. It is off by default.
Nothing else moves
The OTE band is still off by default, and its range, colour and leg source setting are unchanged. Detection, the Pivot Left and Right Strength, every other module and every other setting are unchanged.
Versionshinweise
A dark chart themeChart theme, at the top of the General settings, has two options. Light is the default and draws exactly as before. Dark lightens every colour the script draws on the chart, so it reads on a dark background: the bullish and bearish gaps and blocks, the IFVG orange and the MSS lines are lifted toward white, and the black level lines, session lines, opens, zone captions and labels turn light grey. Colours you have already set are kept and lifted rather than replaced. The dashboard keeps its own light panel either way.
Nothing else moves
Detection, every array, level and module, and every other setting are unchanged.
Versionshinweise
OTE drawn the way it is drawn by handThe OTE fib now follows market structure on the chart's own candles, and this is the new default. A swing low is a down candle followed by a candle closing up, at the lower wick of the two; a swing high mirrors it. When a candle closes through the swing holding the move, the fib runs from the extreme of that move (100) to the candle that closed through (0), and follows new extremes from there. Each later break of structure in the same direction moves the fib to the swing that led to it; a one-candle bounce does not count as a new swing. It is fractal: every timeframe reads its own swings, so a 1h leg is tighter than a 4h one. To keep the previous reading, set OTE leg source to Last two swings; Last structure shift (MSS) is still there too.
OTE swing size
OTE swing strength is replaced by OTE swing size, which decides how big a swing has to be for the Last structure shift (MSS) and Last two swings leg sources: Short (2 candles each side), Mid (5 left, 3 right) or Long (10 left, 5 right). It is kept apart from Structure size, so the MSS marks and order blocks keep their own swings.
0.705 line inside the band
The band keeps its 0.62 to 0.79 edges and now carries a dotted line at 0.705 with the OTE name on it. The level is its own setting, OTE line.
Structure size
A new Structure size setting decides how big a swing has to be before it counts for the MSS marks and order blocks: Short (2 candles each side), Mid (5 left, 3 right, the previous default), Long (10 left, 5 right) or Custom, which uses the pivot strengths. Long treats the smaller highs and lows inside a range as internal, so they never print a MSS.
The OTE follows the Dark chart theme
On the Dark chart theme the OTE band and its line are lifted like every other colour the script draws.
New default colours
The OTE band is blue, consequent encroachment midlines are near black, inversions are a brighter orange and the bearish MSS is a deeper magenta. Every one of them is still a setting.
Short title
The chart legend now reads Confluence+ (M1D).
Versionshinweise
Session levels hide above 1HThe Asia, London and New York session highs and lows now draw on charts up to 1H and hide above it, where a session is only a few candles wide and its levels crowd the chart. They are still tracked on every timeframe, so raids, sweeps and the draw-on-liquidity rows in the dashboard keep reading them. The previous day, week, month and quarter levels are unchanged and draw on every timeframe as before. To hide a whole indicator on chosen timeframes, use the Visibility tab in its settings.
One label per price
Level labels now combine only when two levels sit at exactly the same price. Levels a few points apart keep their own labels at their own prices, where the old ATR-distance merge put one name at a price that belonged to neither level. The Combine labels within (× ATR) setting has been removed.
The dashboard follows the chart theme
With Chart theme set to Dark, the dashboard now takes the dark chart's own ground with light ink, where it used to stay a white card with black text. On Light it is unchanged.
OTE drawn the way it is drawn by hand
The OTE fib now follows market structure on the chart's own candles, and this is the new default. A swing low is a down candle followed by a candle closing up, at the lower wick of the two; a swing high mirrors it. When a candle closes through the swing holding the move, the fib runs from the extreme of that move (100) to the candle that closed through (0), and follows new extremes from there. Each later break of structure in the same direction moves the fib to the swing that led to it; a one-candle bounce does not count as a new swing. It is fractal: every timeframe reads its own swings, so a 1h leg is tighter than a 4h one. To keep the previous reading, set OTE leg source to Last two swings; Last structure shift (MSS) is still there too.
OTE swing size
OTE swing strength is replaced by OTE swing size, which decides how big a swing has to be for the Last structure shift (MSS) and Last two swings leg sources: Short (2 candles each side), Mid (5 left, 3 right) or Long (10 left, 5 right). It is kept apart from Structure size, so the MSS marks and order blocks keep their own swings.
0.705 line inside the band
The band keeps its 0.62 to 0.79 edges and now carries a dotted line at 0.705 with the OTE name on it. The level is its own setting, OTE line.
Structure size
A new Structure size setting decides how big a swing has to be before it counts for the MSS marks and order blocks: Short (2 candles each side), Mid (5 left, 3 right, the previous default), Long (10 left, 5 right) or Custom, which uses the pivot strengths. Long treats the smaller highs and lows inside a range as internal, so they never print a MSS.
The OTE follows the Dark chart theme
On the Dark chart theme the OTE band and its line are lifted like every other colour the script draws.
New default colours
The OTE band is blue, consequent encroachment midlines are near black, inversions are a brighter orange and the bearish MSS is a deeper magenta. Every one of them is still a setting.
Short title
The chart legend now reads Confluence+ (M1D).
Versionshinweise
SMT labels clear of their lineThe SMT name now sits at the divergence's outer swing, above the higher high of a bearish SMT and below the lower low of a bullish one, so the line never runs through the text.
Versionshinweise
Fixed: runtime error on the 1m chartA prior-month or prior quarter high or low on a 1m chart can sit further back than TradingView will draw a line from, and the script stopped with a runtime error at that level. Level lines now start no further back than the chart can draw, the level's price is unchanged.
Layout: Desktop or Phone
A new Layout setting at the top of General fits the chart to a narrow portrait screen in one switch, without changing any other setting. Phone draws every label small, stops lines and zones closer to the live candle, keeps one live zone per type, one structure shift and one SMT per side, names levels without their date (PDH rather than PDH 30/09) and keeps the dashboard to Bias, Draw, Sweep and Killzone. Detection, the dashboard read and alerts are unchanged. Desktop is the full chart, as before.
A plainer dashboard
The dashboard is now ink on the chart with no fill and no header band, in the same style as the other M1D panels, with the instrument and timeframe at the top and the ICT Bias in bold. On the Dark chart theme the ink lightens with everything else.
Order Blocks and Breakers switched apart
Show Order Blocks / Breakers is now two settings, Show Order Blocks and Show Breakers, so the chart can carry blocks only, breakers only, both or neither. They change only what is drawn: a block that fails still becomes a breaker with Order Blocks off, and a breaker still comes from a block with Breakers off, so the confluence read and the dashboard are unchanged whichever way they are set.
Swept is swept
A level taken on the very first candle after it was drawn was not being marked as swept: an Asia high run at 00:00, or a prior-day low raided on the opening 4H candle, kept reading as live. Every level now mitigates on any candle that trades through it, the candle it was drawn on included. The only candle that cannot sweep a level is the one that made it.
Versionshinweise
London Close sessionA London Close session joins Asia, London and New York under Session Highs / Lows, with its own on switch and its own times, 10:00 to 12:00 New York by default. Its high and low draw and get raided like the other session levels, and the window is set separately from New York, so a New York session set to end at 10:00 hands straight over to it. It is off by default, so no chart changes on this update until it is switched on.
Versionshinweise
Dashboard starts bottom rightThe dashboard now opens in the bottom right corner, so the top right is free for a model or session table beside it. Dashboard Position still moves it anywhere.
Trading day in the dashboard
The dashboard has a new Day row under Timeframe, with the trading day of the last candle written in full, for example Friday. The day follows the session, not the calendar: Sunday evening on futures already reads Monday. It shows on intraday and daily charts, and in the Phone layout too. For a chart with the dashboard hidden, a separate box with the market over the day can be switched on under Dashboard, Separate instrument and day box.
Prior day, week and month closes
The close of the last completed daily, weekly and monthly candle can now be drawn as a dashed line in the level colour, named PDC, PWC and PMC at the right. A close is where the market settled, and it often flips between support and resistance. They are reference levels only: a touch never marks them taken and they do not feed the dashboard. Off by default; switch them on under Liquidity, Prior close D / W / M.
Versionshinweise
Gaps reach the full body gapWith Absorb Volume Imbalances on, a body gap beside a fair value gap now extends the zone to the body edge even when the wicks gapped too, not only when a wick bridged it. It is the same imbalance either way.
Versionshinweise
Prior close offsetThe prior day, week and month close lines have their own offset under Liquidity, Prior close offset, counted in bars past the Right-side offset, so they move with it and can sit anywhere from the other levels' edge outward. The default of 19 keeps them in the Midnight Open's lane, so no chart changes on this update; 0 ends them with the other levels.
Versionshinweise
Prior closes sit on their candleThe prior day, week and month close lines are now the close of the last candle of that period on the chart, and start on that candle. On futures this is the last trade of the session rather than the exchange's settlement price, which no candle on the chart printed, so the line no longer floats away from the candle it names. On crypto and stocks the price is the same as before.
Versionshinweise
Order block: a tie on the extreme close now goes to the bigger bodyWhen two down-close candles in the pullback close on exactly the same price, the block is now the one with more open-to-close range, as ICT teaches. Before, the first one found won.
New optional rally-away test
"OB rally-away (x block height, ICT 2 to 3; 0 = off)" in the PD Arrays group. Above 0, a block only registers once price has travelled that many block heights away from it. Example: a 10 point body with the setting at 2 needs a 20 point leg. Default 0, so existing charts look the same.
Cleaner table
The table has no background now, only the script name, rows and one frame. The text and frame turn white on a dark chart and black on a light one, read from the chart itself. Names are left aligned and the day box matches.
Versionshinweise
Timeframe names read correctly on every chartOn a monthly chart the timeframe was written in minutes (43800m), and a 3 month chart was tagged MN like a 1 month chart. They now read M and MN3, with 3D and 2W tagged D3 and W2 the same way. Detection, levels and every setting are unchanged.
Versionshinweise
Tidied source comments; no change to how it works.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.
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.