Thrust Candles and First Returns: Define the Level Before Trading It

Video: You STILL Trade Supply & Demand?
Creator: IPDATrader
Original Video: Watch the original video
Difficulty: Advanced

The Big Idea

A broad supply or demand zone can hide several different entry assumptions. The source proposes a more precise alternative: identify a forceful break through a cluster of prior extremes, preserve specific reference prices, and study their first return.

Precision helps make a hypothesis reviewable. It does not establish that untouched orders remain at the level, that a return is inevitable, or that a narrow entry is automatically profitable.

Replace a Vague Rectangle With Defined References

The presentation challenges the habit of drawing a large zone and treating every response inside it as confirmation. Its alternative focuses on prices taken out by a thrust candle: the outer extreme of a preceding cluster and the last relevant high or low before the break.

For a bullish example, a cluster of highs is overcome by a forceful candle that opens below the relevant high and closes beyond it. The former high can then be studied as potential support on a later return. The bearish version reverses the logic around clustered lows.

The important condition is a completed break through the reference. A large body that remains inside the preceding structure is not the same event. A wick beyond a boundary with a close back inside is also a different pattern, requiring its own definition.

ReferenceBullish interpretationBearish interpretation
Cluster extremeHighest selected high overcome by the thrustLowest selected low overcome by the thrust
Last pre-break referenceLast relevant high before the breakLast relevant low before the break
Later testReturn from aboveReturn from below

Decide What Belongs to the Cluster

Real charts rarely supply perfectly equal highs or lows. The source allows some variation and distinguishes a nearby cluster from a separate outlying extreme. That discretion is meaningful: changing which points belong to the group changes both the breakout requirement and the later entry reference.

Write the selection rule before examining the outcome. A reproducible approximation might use a fixed lookback, a maximum range relative to recent volatility, and a minimum number of bars near the extreme. Such a rule counts observations under its own definition; it does not prove that each bar represents an independent participant or distinct swing.

The companion code uses that kind of approximation. Its secondary reference is the immediately preceding bar’s high or low, not a reconstructed discretionary last swing. Keeping that difference visible is more honest than describing a convenient proxy as a perfect copy of the creator’s method.

Freshness Is a Price-History Condition

The source emphasizes a first return after price has moved away. A level already crossed or tested from the other side should not silently regain the label untouched because a later response looks better.

Track each reference separately. Price can test the outer cluster extreme while leaving a deeper secondary reference untouched. The first reference has then been used under a first-touch definition, even though the second may still qualify for study.

Immediate next-bar retests deserve an explicit policy. The implementation here consumes a reference if that first bar touches it, but does not generate a later-return marker. This conservative definition prevents an immediate test from being forgotten and the next visit being presented as the first.

A First Touch Can Fail

Freshness does not guarantee rejection. Price can trade through a reference, close on the wrong side, or gap across it. A record that includes only first touches that bounce substitutes a successful outcome for a setup definition.

The code therefore consumes a reference on its first observed touch whether or not the close holds. It also consumes a gap-through: for a bullish level, a bar entirely below the reference has already moved through the intended area without providing an observed touch. That does not imply an executable fill at the reference.

The lesson also requires a directional view. An isolated level is insufficient when broader conditions oppose the intended trade. Establish that view separately and identify the next opposing reference. A technically precise entry can still offer too little room before resistance or support.

Entry Precision and Fill Probability Trade Off

Two candidate prices, one hypothetical objective

Suppose a bullish cluster extreme is 50.00, a selected pre-break reference is 49.80, and a thrust opens at 49.60 and closes at 50.80. These invented prices illustrate the trade-off.

StepCalculation or observationMeaning
Shallower candidateEntry 50.00; stop 49.35; objective 51.30Risk 0.65; reward 1.30; 2R before costs.
Deeper candidateEntry 49.80; same stop and objectiveRisk 0.45; reward 1.50; approximately 3.33R before costs.
Missed deeper fillPrice reaches 49.95 and then advancesThe 49.80 order does not earn the move shown on the chart.
Failure insteadPrice continues through the planned invalidationA precise reference does not prevent a losing trade.

The stop and objective in this example are teaching assumptions, not universal source rules. A practical definition needs the exact invalidation, the order type, treatment of gaps, and the cost model. Do not move the stop simply to make a ratio attractive after choosing an entry.

Write the Level’s Entire Life Cycle

A chart annotation needs a beginning and an ending. Record when the thrust closes, which prices are frozen, whether either price has already been tested, and when the idea expires. Otherwise a chart can accumulate apparently meaningful levels indefinitely.

The indicator tracks one active pair at a time. It ignores new thrust candidates while either reference remains active, then waits for a later bar before accepting a replacement. A configurable 60-bar lifetime prevents old references from remaining eligible forever. This is an implementation constraint, not evidence that the market forgets a level after 60 bars.

A return years later is not automatically stronger than a recent return. The participant mix, volatility, contract, and broader conditions may have changed. Claims about persistent hidden orders require evidence beyond the similarity of two chart prices.

Study the Failures as Carefully as the Reactions

Build a sample containing every qualifying thrust under the same definitions. Separate immediate tests, later first returns, gap-through events, expired levels, and levels never revisited. A missing return is part of the result, not a reason to remove the example.

For each actual return, record direction, available space, adverse and favorable excursion, and whether a proposed executable rule would have filled. Compare the cluster extreme and secondary reference independently. The source’s chart examples supply a hypothesis; they do not establish an institutional mechanism or a transferable win rate.

Pine Script Indicator

View Pine Script Indicator Code
//@version=6
// Guide: https://candlechasers.com/thrust-candle-level-first-return/
// Independent educational indicator. No simulated orders or performance results.
indicator("CC Thrust First Return Levels", overlay=true)
lookback = input.int(20, "Cluster lookback", minval=3, maxval=100)
minContacts = input.int(3, "Minimum bars near the extreme", minval=2)
nearATR = input.float(0.25, "Cluster contact tolerance / prior ATR", minval=0.01)
maxRangeATR = input.float(4.0, "Maximum prior range / ATR", minval=0.1)
powerATR = input.float(1.0, "Minimum thrust body / prior ATR", minval=0.1)
life = input.int(60, "Maximum active bars", minval=2)
atr = ta.atr(14)
top = ta.highest(high, lookback)[1]
bottom = ta.lowest(low, lookback)[1]
int topHits = 0
int bottomHits = 0
for i = 1 to lookback
    if high[i] >= top - atr[1] * nearATR
        topHits += 1
    if low[i] <= bottom + atr[1] * nearATR
        bottomHits += 1
compact = top - bottom <= atr[1] * maxRangeATR
upBreak = compact and topHits >= minContacts and open < top and close > top and close - open >= atr[1] * powerATR
downBreak = compact and bottomHits >= minContacts and open > bottom and close < bottom and open - close >= atr[1] * powerATR
var int direction = 0
var int born = na
var float extreme = na
var float secondary = na
var bool usedExtreme = true
var bool usedSecondary = true
bool firstReturn = false
if barstate.isconfirmed
    bool handled = direction != 0
    if handled
        int age = bar_index - born
        if age > life
            direction := 0
        else if age > 0
            bool touchA = low <= extreme and high >= extreme
            bool gapA = direction == 1 ? high < extreme : low > extreme
            bool touchB = low <= secondary and high >= secondary
            bool gapB = direction == 1 ? high < secondary : low > secondary
            bool holdsA = direction == 1 ? close > extreme : close < extreme
            bool holdsB = direction == 1 ? close > secondary : close < secondary
            if not usedExtreme and (touchA or gapA)
                firstReturn := firstReturn or (age > 1 and touchA and holdsA)
                usedExtreme := true
            if not usedSecondary and (touchB or gapB)
                firstReturn := firstReturn or (age > 1 and touchB and holdsB)
                usedSecondary := true
            if usedExtreme and usedSecondary
                direction := 0
    if direction == 0 and not handled and (upBreak or downBreak)
        direction := upBreak ? 1 : -1
        born := bar_index
        extreme := upBreak ? top : bottom
        // Prior-bar extreme is only a proxy for the source's last pre-break swing.
        secondary := upBreak ? high[1] : low[1]
        usedExtreme := false
        usedSecondary := math.abs(extreme - secondary) < syminfo.mintick
plot(direction != 0 and not usedExtreme ? extreme : na, "Untested cluster extreme", color=color.blue, linewidth=2, style=plot.style_linebr)
plot(direction != 0 and not usedSecondary ? secondary : na, "Untested prior-bar proxy", color=color.orange, style=plot.style_linebr)
plotshape(firstReturn, title="First later return holding a reference", style=shape.diamond, location=location.belowbar, color=color.aqua)
alertcondition(firstReturn, "First-return response", "CC: first later return holds a thrust reference on {{ticker}} {{interval}}. Context only, no order.")
var table status = table.new(position.top_right, 1, 2, bgcolor=color.new(color.black, 15))
if barstate.islast
    table.cell(status, 0, 0, direction == 0 ? "No active untested pair; waiting for thrust" : "Active pair; first touches consume references", text_color=color.white)
    table.cell(status, 0, 1, "Immediate next-bar retests do not signal; gap-through consumes", text_color=color.white)

What This Indicator Shows

The indicator measures a compact prior range and looks for a completed thrust through a sufficiently contacted extreme. The default lookback is 20 bars, with at least three bars near the relevant extreme, a maximum range of four prior ATRs, and a thrust body of at least one prior ATR.

It freezes the cluster extreme in blue and a prior-bar proxy in orange. Each line disappears when consumed or expired. A diamond marks a later first touch that closes back on the breakout side. It can represent either direction; inspect the reference and candles rather than treating its below-bar placement as a long signal.

The status table explains when no pair is active. Identical references are merged by disabling the secondary line. First touches consume each reference independently, including failed responses; immediate next-bar tests do not produce diamonds.

What This Indicator Does Not Show

It does not identify the creator’s exact discretionary cluster or last swing, resting orders, higher-timeframe bias, entries, stops, or profits. Contact counts are bars near an extreme, not independent swing confirmations. Defaults are original approximations that should be evaluated rather than optimized around one attractive screenshot.

All eligibility and touch decisions finalize at candle close. The script does not project a future reaction backward to the thrust candle. A marker is a completed price observation, and a gap-through is consumption rather than proof of a fill.

Setup and Validation

Paste the complete code into TradingView’s Pine Editor, save it, and add it to a standard candlestick chart with sufficient history. Check the visible status table and the reference plots before expecting a marker. Review the inputs and symbol session rather than changing several settings at once.

For available alerts, select the named indicator condition and use Once Per Bar Close. An alert reports the coded observation only; it does not submit an order or complete the manual context checks.

Validation status: Structurally reviewed for completed-bar decisions, future-data use, reference lifecycle, and display behavior. This code has not been compiled or chart-tested in TradingView here. No profitability or live-execution validation is claimed. Use replay to verify the described behavior and report any compiler message exactly.

Practice and Review

  1. Freshness audit: replay the first bar after each thrust and verify that any immediate touch consumes the affected reference.
  2. Separate-reference log: record outcomes for the cluster extreme and the secondary proxy without combining them into one favorable example.
  3. Full-sample review: include no-return and expired cases, then compare actual executable fills and costs under a fixed directional and exit rule.

Check Your Understanding

Does untouched mean orders are still present? No. It describes the recorded price path only.

Can a failed first touch be ignored so the next bounce counts as first? No. That changes the sample after observing the result.

Is the deeper entry always better? No. It changes both risk distance and the chance of receiving a fill.

Final Takeaway

Make the reference precise, preserve its first-touch history, and evaluate it within a separate directional and risk framework. A clean level is a testable chart hypothesis, not proof of hidden institutional intent.

Risk Disclosure

This guide is educational and is not personalized financial, investment, or trading advice. Trading can result in substantial losses, including losses beyond a planned stop because of gaps, slippage, leverage, or execution failures. Examples and source-reported results are not promises of future performance. Hypothetical calculations omit costs unless stated otherwise. Indicators can be incomplete, data-dependent, and unsuitable for a particular instrument or session. Evaluate any approach with appropriate data, realistic costs, and risk limits before considering live use. Only commit funds whose loss you can afford.

Independence: CandleChasers is not affiliated with the source creator, channel, or TradingView. This is an independent educational companion, not an endorsement or an official reproduction of a proprietary tool.

As an Amazon Associate I earn from qualifying purchases.