Aktualisiert
BarrettFVG Turtle Soup

OVERVIEW
BarrettFVG Turtle Soup finds swing levels that get swept and rejected in the same candle, tracks them across five timeframes at once, and then waits for a displacement gap before calling it a trade. Every signal carries a stop, a breakeven, a target, and a contract count worked out from your own risk.
A turtle soup is a failed breakout. Price pushes through a prior swing high or low, takes the orders resting beyond it, and closes back on the original side of the level — the break is rejected within the candle that made it. On its own that is a context clue, not an entry. This script treats it as the first half of a setup and requires a fair value gap or an inversion in the rejection direction before anything is marked as tradeable.
It is a decision-support tool. It does not predict direction and it does not place orders.
HOW THE MODEL WORKS
LEVEL TRACKING
Each scanned timeframe maintains its own list of unbroken swing highs and lows, confirmed by pivot length. A level stays on the list until price trades through it, at which point it is consumed and cannot be swept twice.
THE SWEEP AND REJECTION
When a confirmed bar trades beyond a tracked level but closes back on the original side, that level is marked as swept. The marker line runs from the swing that created the level to the candle that rejected it, so the chart shows what was taken and when.
Where several levels are taken in one candle, the most recently formed is used. A sweep that reaches through old structure has taken the near level too, and the near level is the one price is reacting to.
A higher-timeframe marker is drawn at the CLOSE of the bar that produced it rather than at that bar's timestamp, which is its open. The rejection is not confirmed until the candle closes, and placing the marker at the open leaves it a full higher-timeframe bar to the left of the point the setup actually becomes live.
INVALIDATION
A marked soup is removed if a later confirmed close on its own source timeframe finishes on the wrong side of the level — unless it has already produced an entry. Invalidation exists to clear sweeps that failed before they did anything; applied after the fact it would delete the marker while its entry label stayed, leaving a signal on the chart with nothing visible behind it.
MULTI-TIMEFRAME SCANNING
Five higher-timeframe slots run alongside the chart timeframe, each scanning inside its own bars rather than approximating from chart data. Higher-timeframe results are read one bar back with lookahead enabled, which is the non-repainting idiom: a higher-timeframe soup appears only once its bar has closed and never moves afterwards.
Markers are prefixed with the timeframe they came from, so a 4-hour sweep is visibly different from a 5-minute one.
ENTRIES
A soup alone does not produce a signal. After one is marked, the script watches for a fair value gap or an inverse fair value gap in the rejection direction, and all of the following must hold:
The gap forms within the entry window, counted in chart bars from the soup.
The gap is at least the configured multiple of ATR(14). This is what separates displacement from a one-bar artifact and is the main selectivity control in the script.
The gap sits entirely clear of the swept level, in the rejection direction, by the configured clearance. A gap still straddling the level is price churning at it, not leaving it.
The bar is inside a session window.
A soup is consumed by the entry it produces, so one sweep yields at most one signal. Where several soups are eligible when a gap forms, the most recent is used.
Inversions count as entries in their own right. A gap that gets traded through becomes an inverse gap pointing the other way, and an inversion forming in the rejection direction after a soup is as valid as a fresh gap — often it is the cleaner of the two, because the level has already been tested once.
While a soup can still produce an entry, its swept level is carried forward across the chart. The line stops where the soup stopped being eligible, so the right end of a level marks the moment it expired or fired. A signal with no live level reaching it did not come from a soup still in play.
DELIVERY (CISD)
A delivery leg is a run of consecutive same-direction closes. Its OPENING is the reference: price closing back through it means whatever was delivering that way has stopped and the other side is in control. The most recent change of state is marked with a line at the reclaimed opening.
A run only becomes a reference once it is long enough to be delivery rather than a single candle, which is what keeps the state from flipping on every alternating bar.
Used as a filter, this holds entries rather than blocking them. A turtle soup is a counter-trend entry and its main way of failing is that the breakout it faded was real, so a signal fired while delivery still runs the other way is parked and released once delivery changes state, or dropped if the hold window expires.
A body level a few candles back is used rather than a swing break on purpose. A swing is wherever the last swing happens to be, does not exist until its pivot confirms, and is usually a long way from a sweep — so confirming against one costs a great deal of stop distance. The opening of the leg that just moved price is close to it.
STOPS, BREAKEVEN AND TARGET
The stop is anchored to the sweep extreme — how far price actually ran past the swept level — plus a tick buffer. Not to the level itself, which price traded through by definition, and not to the entry candle.
That reference keeps extending. Each eligible soup carries a running excursion extreme that pushes further out every bar until a gap fires it, so if price digs deeper past the level while the setup is pending, the stop follows. It only ever widens and is read once, at entry, so a stop is never placed inside ground price has already covered. A held signal extends it too, for the same reason.
The target is a multiple of that measured risk, defaulting to 1R. A turtle soup is a snap-back off a defended level rather than a trend entry, and the target follows the setup's own size rather than a fixed point value.
Breakeven is a fraction of the distance to target rather than a fixed R, so it keeps meaning the same thing if the target multiple is changed. When price reaches it, the stop line physically relocates to entry, its label is renamed, and the breakeven line is removed — a line left sitting there would read as a level still waiting to be reached.
Breakeven is evaluated before the stop. A bar that reaches breakeven and then trades back through entry is reported as a scratch, not a loss. If a bar trades through both stop and target, the stop counts.
One set of levels is drawn at a time and the most recent entry signal owns it.
POSITION SIZE ON THE LABEL
Each entry label carries the timeframe of the soup behind it and the number of contracts its stop distance allows at a configured dollar risk, worked out from the instrument's own point value.
This is arithmetic, not a judgement about the setup. But it is the difference the chart does not otherwise show: two signals that look identical can be a full position and a quarter of one, because the stop follows how far the sweep actually ran. A stop too wide to take even one contract at the configured risk reads as "<1" rather than zero, because that is a fact about the trade and not a fault in the sum.
Each entry is also linked by a line back to the swept level that produced it. A marker sits at its level's PRICE, which for a slower timeframe can be far above or below where the entry fires and therefore outside the visible chart. The link always points at it.
CONTEXT LEVELS
NEXT LIQUIDITY
The nearest unbroken swing high above price and swing low below it, for each enabled timeframe — the closest places a soup could next form. Only the nearest either side per timeframe is drawn; every tracked level would be hundreds of lines.
Each is drawn from the swing that created it, so its length shows how long that level has stood. Where several timeframes land on the same price they share one line and one label naming all of them, because that is one level with several names rather than several levels.
This is the only part of the script that says anything before the event rather than after it.
PREVIOUS DAY AND WEEK HIGH / LOW
Drawn across the chart with their labels set clear of the line end.
SESSIONS AND ALERTS
Two configurable session windows gate output. Levels, sweeps and gaps are tracked around the clock, so a soup that forms overnight is correct the moment a window opens; what the gate stops is output. No entry is marked outside the windows and no alert of any kind is sent outside them.
All events are carried on a single dynamic message, so one alert set to "Any alert() function call" covers the whole model: both entry directions, breakeven, and all three exit types. The entry message names the gap type, the timeframe whose soup produced it, and whether it was held for delivery. Named conditions remain available for isolating a single event.
Alerts evaluate on bar close.
SETTINGS
General — maximum sweeps displayed, chart and higher-timeframe pivot lengths kept separate, maximum active swing levels per timeframe.
Timeframes — the chart timeframe scan and five independent higher-timeframe slots, each with its own toggle.
Appearance — marker visibility, colour, text, line style, label size, timeframe prefix, and whether a swept level is carried forward while armed.
FVG / IFVG — gap and inversion visibility, minimum ATR multiplier, maximum active zones, overlap filter, zone extension, colours and text sizes, entry window, entry gap clearance, entry label controls.
Delivery (CISD) — line visibility, minimum run length, reclaim clearance, label offset, the hold filter and its window.
Trade Levels — SL / BE / TP visibility, stop buffer, take profit in R, breakeven fraction, contract count and risk per trade, source timeframe on the label, and the link back to each entry's soup.
Next Liquidity, Sessions, Session Levels and Alerts each group their own controls.
HOW TO USE IT
Set the two session windows to the hours you trade.
Pivot length is the setting most worth understanding. It defaults to 1 on both the chart and higher timeframes, and that is deliberate rather than lazy: a level does not exist until its pivot confirms, so a longer pivot length is structurally blind to a swing that forms and gets swept a few bars later — which is most of them. Selectivity is meant to come from the ATR minimum on gap size, not from here.
The ATR multiplier is the dial to reach for if signals are arriving too thickly. Raising it demands more displacement before a rejection counts as a trade.
There is no time-based lookback. Each timeframe keeps its unbroken swing highs and lows up to the active-level cap, and a level leaves that list only when price trades through it or when the cap pushes the oldest off the end. How far back the script reaches is therefore a consequence of how quickly levels form and get broken, not a setting: on a fast timeframe with a short pivot length the oldest surviving level may be an hour or two old, while on the 4-hour the same cap can reach back months.
Read the contract count before the setup. Scanning five timeframes at once is not the same as trading five timeframes, and the number on the label is where that shows: a sweep that ran a long way produces a stop to match, and the position it allows may be too small to be worth the attention regardless of how the pattern looks.
LIMITATIONS AND SHORTCOMINGS
The entry window is counted in chart bars, not in bars of the timeframe that produced the soup. A 4-hour soup therefore gets the same handful of chart bars to produce its gap as a 1-minute soup does, and in practice the slower slots mark up reliably but convert to entry signals far less often. Counting it in the source timeframe's own bars instead was tried and is worse: a higher-timeframe soup then stays armed for hours and fires on a gap that has nothing to do with it.
A higher-timeframe soup is also read one bar back, so it registers at the open of the bar after the one that rejected the level. The window therefore opens after the rejection candle has already closed.
Stops anchored to a higher-timeframe sweep extreme can be very wide. A 4-hour candle's extreme may be a long way from a 1-minute entry, and a fixed contract count will not produce consistent risk across setups. This is the single biggest practical limitation of the script and the reason the contract count is drawn on the label at all.
With pivot length at 1 and several timeframes enabled, a great many levels are tracked and a great many sweeps are marked. Most of them will not produce entries. This is the intended behaviour of a responsive setting, but the chart will look busy, and the sweep display limit exists because of it.
Only the most recent entry signal keeps managed levels. A signal that replaces an earlier one abandons it rather than resolving it, so no stop or target alert will follow for the replaced setup.
Where both a long and a short signal land on the same bar, which is possible when a fresh gap and an opposing inversion coincide, the long is tracked. There is no basis in the model for preferring either.
The delivery filter delays entries, and a delayed entry is further from a stop that has not moved. It should improve the quality of what gets taken and will certainly worsen the reward-to-risk of each one; which effect dominates is not something the script can tell you.
Signals and level touches evaluate on bar close and do not repaint. Zones, levels and trade lines extend forward as a setup develops, which is expected behaviour rather than repainting of the signals themselves. Because touches are reported at the close of the bar in which they occurred, a breakeven or stop notification arrives up to one bar after the price event.
The script contains no order placement, no position tracking across trades, and no backtest statistics. Nothing here is a complete trading system on its own.
ORIGINALITY
Sweep markers are common. What is specific to this script is that a swept level is treated as half a setup rather than a signal, and that everything downstream of it is built out.
The entry requirement. A marked soup produces nothing until a fair value gap or an inversion forms in the rejection direction, sized against ATR, inside a window, and positioned entirely clear of the swept level. The soup is then consumed, so one sweep cannot produce a stream of signals from the same level.
Inversions as first-class entries, tracked through the full lifecycle of each zone — gap, inversion, mitigation.
The stop reference. Anchored to the sweep extreme rather than the swept level, and extended every bar while the setup is pending or held, so a stop is never placed inside ground price has already covered. Read once, at entry.
Proportional breakeven that physically relocates the stop line rather than only announcing it, with a stop hit after breakeven reported separately from one hit before it.
Position size on the signal. The contract count a stop allows at a stated dollar risk, on the label, at the moment of the signal — because the size a setup permits is a property of the trade that a stop line alone does not communicate.
Entry-to-soup links, so a signal is always traceable to the sweep that caused it even when that sweep sits off the visible chart.
Next-liquidity levels: the nearest unbroken swing per timeframe, drawn from its origin, merged where timeframes agree.
Genuine multi-timeframe level tracking, each timeframe scanning inside its own bars, with pivot lengths separated for chart and higher timeframes.
Session gating on output rather than on the model, so levels and sweeps stay correct through the night and only notifications are withheld.
The underlying concepts — liquidity sweeps, failed breakouts, fair value gaps, inversions, change in the state of delivery — are publicly taught market structure ideas and are not claimed as original here. The implementation is.
DISCLAIMER
This indicator is provided for educational and informational purposes only. It is not financial advice, investment advice, or a recommendation to buy or sell any instrument.
No performance is claimed or implied. Historical behaviour does not indicate future results. Trading futures, forex and other leveraged instruments carries substantial risk of loss and is not suitable for every investor.
All settings shown are defaults and are not recommendations. The risk-per-trade setting is a display input used to calculate a contract count; it is arithmetic, not position-sizing advice, and it does not account for your account size, risk tolerance, costs or circumstances. Any levels, stops or targets the script draws are calculated outputs, not advice.
You are solely responsible for your own trading decisions and for testing any tool on your own data before relying on it. Use of this script implies agreement with TradingView's Terms of Use and House Rules.
BarrettFVG Turtle Soup finds swing levels that get swept and rejected in the same candle, tracks them across five timeframes at once, and then waits for a displacement gap before calling it a trade. Every signal carries a stop, a breakeven, a target, and a contract count worked out from your own risk.
A turtle soup is a failed breakout. Price pushes through a prior swing high or low, takes the orders resting beyond it, and closes back on the original side of the level — the break is rejected within the candle that made it. On its own that is a context clue, not an entry. This script treats it as the first half of a setup and requires a fair value gap or an inversion in the rejection direction before anything is marked as tradeable.
It is a decision-support tool. It does not predict direction and it does not place orders.
HOW THE MODEL WORKS
LEVEL TRACKING
Each scanned timeframe maintains its own list of unbroken swing highs and lows, confirmed by pivot length. A level stays on the list until price trades through it, at which point it is consumed and cannot be swept twice.
THE SWEEP AND REJECTION
When a confirmed bar trades beyond a tracked level but closes back on the original side, that level is marked as swept. The marker line runs from the swing that created the level to the candle that rejected it, so the chart shows what was taken and when.
Where several levels are taken in one candle, the most recently formed is used. A sweep that reaches through old structure has taken the near level too, and the near level is the one price is reacting to.
A higher-timeframe marker is drawn at the CLOSE of the bar that produced it rather than at that bar's timestamp, which is its open. The rejection is not confirmed until the candle closes, and placing the marker at the open leaves it a full higher-timeframe bar to the left of the point the setup actually becomes live.
INVALIDATION
A marked soup is removed if a later confirmed close on its own source timeframe finishes on the wrong side of the level — unless it has already produced an entry. Invalidation exists to clear sweeps that failed before they did anything; applied after the fact it would delete the marker while its entry label stayed, leaving a signal on the chart with nothing visible behind it.
MULTI-TIMEFRAME SCANNING
Five higher-timeframe slots run alongside the chart timeframe, each scanning inside its own bars rather than approximating from chart data. Higher-timeframe results are read one bar back with lookahead enabled, which is the non-repainting idiom: a higher-timeframe soup appears only once its bar has closed and never moves afterwards.
Markers are prefixed with the timeframe they came from, so a 4-hour sweep is visibly different from a 5-minute one.
ENTRIES
A soup alone does not produce a signal. After one is marked, the script watches for a fair value gap or an inverse fair value gap in the rejection direction, and all of the following must hold:
The gap forms within the entry window, counted in chart bars from the soup.
The gap is at least the configured multiple of ATR(14). This is what separates displacement from a one-bar artifact and is the main selectivity control in the script.
The gap sits entirely clear of the swept level, in the rejection direction, by the configured clearance. A gap still straddling the level is price churning at it, not leaving it.
The bar is inside a session window.
A soup is consumed by the entry it produces, so one sweep yields at most one signal. Where several soups are eligible when a gap forms, the most recent is used.
Inversions count as entries in their own right. A gap that gets traded through becomes an inverse gap pointing the other way, and an inversion forming in the rejection direction after a soup is as valid as a fresh gap — often it is the cleaner of the two, because the level has already been tested once.
While a soup can still produce an entry, its swept level is carried forward across the chart. The line stops where the soup stopped being eligible, so the right end of a level marks the moment it expired or fired. A signal with no live level reaching it did not come from a soup still in play.
DELIVERY (CISD)
A delivery leg is a run of consecutive same-direction closes. Its OPENING is the reference: price closing back through it means whatever was delivering that way has stopped and the other side is in control. The most recent change of state is marked with a line at the reclaimed opening.
A run only becomes a reference once it is long enough to be delivery rather than a single candle, which is what keeps the state from flipping on every alternating bar.
Used as a filter, this holds entries rather than blocking them. A turtle soup is a counter-trend entry and its main way of failing is that the breakout it faded was real, so a signal fired while delivery still runs the other way is parked and released once delivery changes state, or dropped if the hold window expires.
A body level a few candles back is used rather than a swing break on purpose. A swing is wherever the last swing happens to be, does not exist until its pivot confirms, and is usually a long way from a sweep — so confirming against one costs a great deal of stop distance. The opening of the leg that just moved price is close to it.
STOPS, BREAKEVEN AND TARGET
The stop is anchored to the sweep extreme — how far price actually ran past the swept level — plus a tick buffer. Not to the level itself, which price traded through by definition, and not to the entry candle.
That reference keeps extending. Each eligible soup carries a running excursion extreme that pushes further out every bar until a gap fires it, so if price digs deeper past the level while the setup is pending, the stop follows. It only ever widens and is read once, at entry, so a stop is never placed inside ground price has already covered. A held signal extends it too, for the same reason.
The target is a multiple of that measured risk, defaulting to 1R. A turtle soup is a snap-back off a defended level rather than a trend entry, and the target follows the setup's own size rather than a fixed point value.
Breakeven is a fraction of the distance to target rather than a fixed R, so it keeps meaning the same thing if the target multiple is changed. When price reaches it, the stop line physically relocates to entry, its label is renamed, and the breakeven line is removed — a line left sitting there would read as a level still waiting to be reached.
Breakeven is evaluated before the stop. A bar that reaches breakeven and then trades back through entry is reported as a scratch, not a loss. If a bar trades through both stop and target, the stop counts.
One set of levels is drawn at a time and the most recent entry signal owns it.
POSITION SIZE ON THE LABEL
Each entry label carries the timeframe of the soup behind it and the number of contracts its stop distance allows at a configured dollar risk, worked out from the instrument's own point value.
This is arithmetic, not a judgement about the setup. But it is the difference the chart does not otherwise show: two signals that look identical can be a full position and a quarter of one, because the stop follows how far the sweep actually ran. A stop too wide to take even one contract at the configured risk reads as "<1" rather than zero, because that is a fact about the trade and not a fault in the sum.
Each entry is also linked by a line back to the swept level that produced it. A marker sits at its level's PRICE, which for a slower timeframe can be far above or below where the entry fires and therefore outside the visible chart. The link always points at it.
CONTEXT LEVELS
NEXT LIQUIDITY
The nearest unbroken swing high above price and swing low below it, for each enabled timeframe — the closest places a soup could next form. Only the nearest either side per timeframe is drawn; every tracked level would be hundreds of lines.
Each is drawn from the swing that created it, so its length shows how long that level has stood. Where several timeframes land on the same price they share one line and one label naming all of them, because that is one level with several names rather than several levels.
This is the only part of the script that says anything before the event rather than after it.
PREVIOUS DAY AND WEEK HIGH / LOW
Drawn across the chart with their labels set clear of the line end.
SESSIONS AND ALERTS
Two configurable session windows gate output. Levels, sweeps and gaps are tracked around the clock, so a soup that forms overnight is correct the moment a window opens; what the gate stops is output. No entry is marked outside the windows and no alert of any kind is sent outside them.
All events are carried on a single dynamic message, so one alert set to "Any alert() function call" covers the whole model: both entry directions, breakeven, and all three exit types. The entry message names the gap type, the timeframe whose soup produced it, and whether it was held for delivery. Named conditions remain available for isolating a single event.
Alerts evaluate on bar close.
SETTINGS
General — maximum sweeps displayed, chart and higher-timeframe pivot lengths kept separate, maximum active swing levels per timeframe.
Timeframes — the chart timeframe scan and five independent higher-timeframe slots, each with its own toggle.
Appearance — marker visibility, colour, text, line style, label size, timeframe prefix, and whether a swept level is carried forward while armed.
FVG / IFVG — gap and inversion visibility, minimum ATR multiplier, maximum active zones, overlap filter, zone extension, colours and text sizes, entry window, entry gap clearance, entry label controls.
Delivery (CISD) — line visibility, minimum run length, reclaim clearance, label offset, the hold filter and its window.
Trade Levels — SL / BE / TP visibility, stop buffer, take profit in R, breakeven fraction, contract count and risk per trade, source timeframe on the label, and the link back to each entry's soup.
Next Liquidity, Sessions, Session Levels and Alerts each group their own controls.
HOW TO USE IT
Set the two session windows to the hours you trade.
Pivot length is the setting most worth understanding. It defaults to 1 on both the chart and higher timeframes, and that is deliberate rather than lazy: a level does not exist until its pivot confirms, so a longer pivot length is structurally blind to a swing that forms and gets swept a few bars later — which is most of them. Selectivity is meant to come from the ATR minimum on gap size, not from here.
The ATR multiplier is the dial to reach for if signals are arriving too thickly. Raising it demands more displacement before a rejection counts as a trade.
There is no time-based lookback. Each timeframe keeps its unbroken swing highs and lows up to the active-level cap, and a level leaves that list only when price trades through it or when the cap pushes the oldest off the end. How far back the script reaches is therefore a consequence of how quickly levels form and get broken, not a setting: on a fast timeframe with a short pivot length the oldest surviving level may be an hour or two old, while on the 4-hour the same cap can reach back months.
Read the contract count before the setup. Scanning five timeframes at once is not the same as trading five timeframes, and the number on the label is where that shows: a sweep that ran a long way produces a stop to match, and the position it allows may be too small to be worth the attention regardless of how the pattern looks.
LIMITATIONS AND SHORTCOMINGS
The entry window is counted in chart bars, not in bars of the timeframe that produced the soup. A 4-hour soup therefore gets the same handful of chart bars to produce its gap as a 1-minute soup does, and in practice the slower slots mark up reliably but convert to entry signals far less often. Counting it in the source timeframe's own bars instead was tried and is worse: a higher-timeframe soup then stays armed for hours and fires on a gap that has nothing to do with it.
A higher-timeframe soup is also read one bar back, so it registers at the open of the bar after the one that rejected the level. The window therefore opens after the rejection candle has already closed.
Stops anchored to a higher-timeframe sweep extreme can be very wide. A 4-hour candle's extreme may be a long way from a 1-minute entry, and a fixed contract count will not produce consistent risk across setups. This is the single biggest practical limitation of the script and the reason the contract count is drawn on the label at all.
With pivot length at 1 and several timeframes enabled, a great many levels are tracked and a great many sweeps are marked. Most of them will not produce entries. This is the intended behaviour of a responsive setting, but the chart will look busy, and the sweep display limit exists because of it.
Only the most recent entry signal keeps managed levels. A signal that replaces an earlier one abandons it rather than resolving it, so no stop or target alert will follow for the replaced setup.
Where both a long and a short signal land on the same bar, which is possible when a fresh gap and an opposing inversion coincide, the long is tracked. There is no basis in the model for preferring either.
The delivery filter delays entries, and a delayed entry is further from a stop that has not moved. It should improve the quality of what gets taken and will certainly worsen the reward-to-risk of each one; which effect dominates is not something the script can tell you.
Signals and level touches evaluate on bar close and do not repaint. Zones, levels and trade lines extend forward as a setup develops, which is expected behaviour rather than repainting of the signals themselves. Because touches are reported at the close of the bar in which they occurred, a breakeven or stop notification arrives up to one bar after the price event.
The script contains no order placement, no position tracking across trades, and no backtest statistics. Nothing here is a complete trading system on its own.
ORIGINALITY
Sweep markers are common. What is specific to this script is that a swept level is treated as half a setup rather than a signal, and that everything downstream of it is built out.
The entry requirement. A marked soup produces nothing until a fair value gap or an inversion forms in the rejection direction, sized against ATR, inside a window, and positioned entirely clear of the swept level. The soup is then consumed, so one sweep cannot produce a stream of signals from the same level.
Inversions as first-class entries, tracked through the full lifecycle of each zone — gap, inversion, mitigation.
The stop reference. Anchored to the sweep extreme rather than the swept level, and extended every bar while the setup is pending or held, so a stop is never placed inside ground price has already covered. Read once, at entry.
Proportional breakeven that physically relocates the stop line rather than only announcing it, with a stop hit after breakeven reported separately from one hit before it.
Position size on the signal. The contract count a stop allows at a stated dollar risk, on the label, at the moment of the signal — because the size a setup permits is a property of the trade that a stop line alone does not communicate.
Entry-to-soup links, so a signal is always traceable to the sweep that caused it even when that sweep sits off the visible chart.
Next-liquidity levels: the nearest unbroken swing per timeframe, drawn from its origin, merged where timeframes agree.
Genuine multi-timeframe level tracking, each timeframe scanning inside its own bars, with pivot lengths separated for chart and higher timeframes.
Session gating on output rather than on the model, so levels and sweeps stay correct through the night and only notifications are withheld.
The underlying concepts — liquidity sweeps, failed breakouts, fair value gaps, inversions, change in the state of delivery — are publicly taught market structure ideas and are not claimed as original here. The implementation is.
DISCLAIMER
This indicator is provided for educational and informational purposes only. It is not financial advice, investment advice, or a recommendation to buy or sell any instrument.
No performance is claimed or implied. Historical behaviour does not indicate future results. Trading futures, forex and other leveraged instruments carries substantial risk of loss and is not suitable for every investor.
All settings shown are defaults and are not recommendations. The risk-per-trade setting is a display input used to calculate a contract count; it is arithmetic, not position-sizing advice, and it does not account for your account size, risk tolerance, costs or circumstances. Any levels, stops or targets the script draws are calculated outputs, not advice.
You are solely responsible for your own trading decisions and for testing any tool on your own data before relying on it. Use of this script implies agreement with TradingView's Terms of Use and House Rules.
Versionshinweise
Entry model rebuilt around market structure.ENTRY: TWO CONDITIONS, ONE SIGNAL
An armed turtle soup now needs both of these before it fires:
- Delivery is not against the trade. Price is already on the correct
side of the most recent change of state, or a new one prints on
this bar.
- A fresh market structure shift in the trade's direction. Entry is
the close of the candle that makes it.
Delivery says the background allows the trade; the shift is the
event that takes it.
MARKET STRUCTURE SHIFT (new)
Pivot-based, 5 bars left and 2 right by default, with no minimum
swing size — the pivot settings are the only selectivity. Tracked as
a direction STATE, so a shift registers only on a change of
direction: once structure is bullish, further upside breaks are
delivery continuing and nothing fires again until a downside break
flips it. Each shift is drawn as a dashed line from the swing that
was broken across to the bar that broke it, with an MSS label.
Breaks can be confirmed on the close or on the wick.
REMOVED
- The FVG / IFVG entry signal. A displacement gap took too long to
arrive; by the time one printed the move was largely spent while
the stop still sat below the sweep. The zones are still drawn and
still invert to IFVGs — they no longer fire trades.
- The hold-entries-against-delivery filter, which only ever applied
to the gap route.
ENTRY TRIGGER SETTING
CISD + MSS (default), or CISD alone. Delivery is required either
way; the setting only controls whether structure has to confirm it.
CISD alone fires the moment delivery agrees, which is often the
rejection candle itself — much earlier, much nearer the level, far
smaller stop, and no structural confirmation.
STOP REFERENCE (new)
Choose what the stop is measured from before the buffer: the sweep
extreme (default) or the swept level itself. The extreme sits below
everything that has happened, so a retest of the sweep does not take
the trade out. The level is tighter by the depth of the sweep, but
puts the stop inside the wick that made the setup. Buffer unchanged
at 8 ticks or 0.25 ATR, whichever is larger.
BREAKEVEN
Now a toggle of its own instead of having to zero the fraction.
DEFAULT CHANGES
- Entry window 10 to 30 chart bars. A structure shift needs its
swing to confirm and then be broken, which on a 1-minute chart is
routinely 10 to 25 bars after the sweep. At 10 the soup expired
before the structure it was waiting on could break.
- Soup Must Sit At a Zone is now off, so any soup arms a trade. The
zone and moving-average arming rules are still there if you want
them.
- Take Profit Method now defaults to Fixed R, giving a flat 1R. The
nearest-level targeting is still selectable.
Versionshinweise
RANGE POSITION (new)Every entry now reports where it fired inside the recent range:
1.00 is the very top of the window, 0.00 the very bottom. Shorts
near 1.00 and longs near 0.00 are signals at the END of a leg.
Mid-range values are signals inside one, where the move is already
half spent before the trade is on.
A rolling 120-bar window by default — about two hours on a
1-minute chart — and deliberately a window rather than a measured
leg. It needs no swing length chosen and normalises itself, so a
5-minute soup and a 4-hour soup are read on the same scale.
The number sits on the entry label beside the contract count and is
appended to the alert so it can be logged away from the chart.
An optional filter restricts signals to the extremes: longs at or
below 0.35, shorts at or above 0.65. Off by default — run it off
first and read the numbers on your own entries before choosing
where the thresholds belong.
Blocked signals produce nothing at all: no label, no stop and
target, no alert, and no soup consumed. They are not merely hidden.
That matters because the most recent signal owns the trade levels,
and a blocked signal that still existed would re-anchor them.
DEFAULT CHANGES
- Fixed target 1R to 2R.
- Soup Must Sit At a Zone is back on. A soup arms only if the swept
level or the sweep extreme sat inside a same-direction FVG or
IFVG, or at the 200 EMA.
Versionshinweise
STOPSStop Reference is now a choice of three, defaulting to the swept
level rather than the sweep extreme.
- SWEEP EXTREME, the previous behaviour: the furthest price ran
past the level. Nothing that has already happened can take the
trade out, but the distance is set by whichever timeframe
produced the soup, so a 4-hour sweep gives a 4-hour stop.
- SOUP LEVEL, the new default: the swept swing itself. Tighter by
the depth of the sweep, which keeps a higher-timeframe soup
sizeable instead of unsizeable.
- MSS LEG: the far extreme of every candle the structure-shift line
spans — the lowest low from the broken swing through to the bar
that broke it, for a long. That is the base the break was built
on, so trading back through it says the break failed, and it
bounds risk by recent price action rather than by the soup's
timeframe.
A reference on the wrong side of entry is never used; it falls back
to the sweep extreme.
MINIMUM STOP DISTANCE (new)
A floor under the total distance from entry to stop — 24 ticks or
0.75 ATR, whichever is larger. Distinct from the buffer, which is
measured from the reference and always applies; this is measured
from entry and almost never does. It exists to catch a reference
that landed inside the noise, where the stop would otherwise be a
handful of ticks and get taken out by nothing.
RANGE POSITION MEASURED AT THE SOUP
The range figure is now captured when the soup registers and
carried to the entry, instead of being read on the entry bar.
The entry arrives well after the sweep, once delivery and structure
have confirmed. Read at that point the number was reporting how far
price had travelled since, not where the sweep happened — so it was
partly measuring how long the entry took to confirm. It now
describes the soup, which is what it was for.
The filter moved with it, into the setup matcher rather than the
signal. A setup that fails it is skipped instead of blocking the
bar, so an older soup that does qualify can still take the entry.
DEFAULT CHANGES
- Fixed target back to 1R.
- Breakeven off, along with its two alerts. Trades resolve at their
stop or their target with nothing moved.
- Entry link line width is now adjustable (1 to 4).
Versionshinweise
added ability to change SL,BE,TP line colorVersionshinweise
Entry modelThe entry trigger now has two options and a new default.
CISD + MSS — delivery agrees and a fresh market structure shift fires in
the trade's direction.
CISD + MSS or FVG (new default) — the same, or a fair value gap or
inverted FVG forming clear of the swept level, whichever arrives first.
Delivery gates both paths, so this signals strictly more often than
CISD + MSS alone, never less.
The standalone CISD option has been removed. Delivery is now a condition
on every entry rather than a trigger by itself.
Defaults
Soup Must Sit At a Zone is now off. Every soup arms, rather than only
those whose sweep ran into an FVG, an inverted FVG or the EMA zone.
Only Signal at Range Extremes is now on. Longs need the soup at or below
0.35 of the recent range and shorts at or above 0.65, measured where the
soup formed rather than where the entry fires.
Alerts
Entry alerts now carry the ticker and the direction only. Which trigger
fired, which timeframe the soup came from and where it sat in the range
are all on the chart.
Versionshinweise
Entry model consolidatedThe separate entry modes are gone. There is now one entry: after a turtle soup forms, within the entry window, delivery has to agree and then either a structure break or a displacement gap clear of the swept level confirms it. Previously these were alternative dropdown options, so picking one meant giving up the others — but they are not competing readings of the same thing, they are different evidence for it.
BOS added alongside MSS
MSS only fires on a break that contradicts the prevailing direction — a change of character. That means it structurally cannot see a soup that forms with the trend, because the trend resuming is not a change of anything. BOS is the complement: the same mechanical break, read while structure already points that way. Between them they cover every structure break. BOS draws dotted with a BOS label; MSS stays dashed.
“Keep Only Most Recent Each Side” now defaults on and holds one line per direction per kind — latest bullish MSS, bearish MSS, bullish BOS, bearish BOS. With both drawing, leaving the full history on marks every swing the chart ever took out and buries the levels underneath it.
Stop and target
Stop reference is trimmed to Sweep Extreme and Soup Level. The entry-candle and MSS-leg references are removed; the entry-candle stop in particular sat tight enough that ordinary noise took it out before the setup had a chance to work.
Minimum stop distance is now 8 ticks, down from 24, with a 4-tick buffer. Both have an optional ATR half that takes over whenever it is the larger of the two, off by default.
Take profit defaults to Fixed R at 1R. A turtle soup is a snap-back off a swept level rather than a trend entry, so the move it is built on is the retrace, and 1R asks for what that move reliably gives. Nearest Level is still available for structure-based targets, with the minimum and maximum R band keeping them inside reach.
Trade drawing
The entry price now draws as its own line beside the stop, breakeven and target, so the whole trade reads off the chart rather than just its boundaries.
Alerts
Entry alerts carry the ticker and direction only.
Versionshinweise
Swing structure (zigzag)A new group, and a second structure read that runs alongside the MSS engine rather than replacing it. Confirmed swings are connected with legs and marked as higher high, higher low, lower high or lower low.
It has its own swing length, defaulting to 7 bars each side, and is deliberately slower than the MSS pivot. That one runs 5 bars left and 2 right because it has a deadline: it has to fire inside the entry window, and every bar of latency widens a stop anchored at the sweep extreme. This one has no deadline, so it can afford to confirm slowly and only mark structure that stood on both sides. Breaking a two-bar wiggle and breaking a swing that held seven bars either side are different events, and the two engines exist so the chart stops treating them as one.
The developing leg
Drawn dotted, from the last confirmed swing to the running extreme since it. It repaints by construction — the extreme it points at moves whenever price makes a new one, and the swing it will eventually become is not settled. The dotted style is there so it can never be mistaken for confirmed structure, and nothing in the indicator reads it.
Structure tag on the entry label
Off by default. When on, it appends to each entry label whether that entry cleared the last confirmed swing in its direction, and how many bars ago that swing settled — HH 4, LL 11, or no. The bar count is shown rather than a pass/fail threshold, because clearing a swing that settled four bars back and one that settled twenty bars back are different trades, and choosing the cutoff inside the indicator would hide that from the person reading it.
It changes nothing about which signals fire. It is a measurement, not a filter, and there is a separate toggle to carry the same tag into entry alerts so a logged alert can be sorted later rather than tallied by eye.
Drawing limits
Lines and labels raised from 300 to 500, so the zigzag’s legs and labels cannot silently push older drawings off the chart.
Versionshinweise
HTF zone tap tableA new group, and a reading rather than a drawing. Higher timeframe fair value gaps are found on their own timeframes and held in memory; none of them are drawn on the chart. What appears is a small table naming which timeframes price has recently traded into and how many bars ago.
Because nothing is drawn, every timeframe can be left enabled without the chart filling with boxes — extra timeframes cost rows rather than ink. The table reads one row per timeframe per side, so several can be named at once rather than collapsed into whichever happened most recently.
Three rules decide what it reports.
The gaps are found with the chart’s own gap settings applied at each timeframe — the ATR minimum, the overlapping-zone filter, the inversion-overlap rule and the Show IFVGs toggle all follow what the indicator is set to, and each timeframe is capped and evicted the way the chart pool is. A timeframe therefore reports the same gaps you would see by switching to it, rather than a looser set that only exists inside the indicator.
A tap only counts once price has left the zone again. While price is still inside one, the reaction being read has not happened yet; a bar that wicks in and closes back out qualifies on that same bar, which is the cleanest form of it.
Direction is effective direction, matching the convention the soup arming rule already uses: an inverted bullish gap is supply now, so it reads as bearish. A zone classified by where it came from rather than by what it currently does would show as support while sitting above price.
The table is read-only. Nothing in it reaches either entry route, and no signal changes.
Draw Only Nearest
A display limit on chart-timeframe zones, defaulting to the five nearest price. Hidden zones are made transparent rather than deleted, the same way Show FVGs already hides them, so the pool is untouched: the overlapping-zone filter still compares against all of them, the gap entry route still sees them, and the arming rule still reads them.
This is deliberately separate from Max Active FVGs / IFVGs. That setting controls how many zones are tracked, and turning it down to tidy the chart would leave fewer zones for the overlap filter to reject against — quietly changing which gaps exist at all. This one cannot do that.
Distance is measured as zero while price is inside a zone, so one price is trading through is never hidden.
Performance
The nearest-zone ranking now runs once against current price rather than on every bar. The resulting chart is identical; the work is a fraction of what it was.
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.