Video: Scalping Isn't Complicated, It's Misunderstood (Why 90% Of Traders Fail)
Creator: Scarface Trades
Original Video: Watch the original video
Difficulty: Intermediate
The Big Idea
A candle pattern becomes useful only when its location and the surrounding structure support the same trade. This lesson combines three decisions: identify a directional environment, wait for a meaningful level to break and retest, and require price behavior that supports an entry.
If you remember one thing: a hammer in the middle of a range and a hammer reclaiming a broken resistance level are different observations. The candle supplies timing; it does not create the entire setup.
Start With Structure, Then Choose a Level
The source uses higher highs and higher lows to describe an uptrend, and lower highs and lower lows to describe a downtrend. Sideways conditions are deliberately avoided. This is a useful way to organize a chart, but the definition needs a swing-identification method before different traders can classify the same data consistently.
Also distinguish a local swing high from the session high. The session high is the greatest price reached so far in that session; a swing high is a local turning point and need not be the day’s extreme. The transcript sometimes moves between these references. Mark exactly which one your setup uses instead of treating the labels as interchangeable.
For a long setup, a previously respected ceiling breaks and becomes the candidate support area. The retest is a test of that role change. It does not establish that the same participants are defending the level or that you can identify institutional orders from the candles.
Location, Confirmation, Invalidation
| Stage | Long setup question | Reason to wait |
|---|---|---|
| Location | Has price broken a preidentified resistance area and returned? | The move is still an untested breakout |
| Confirmation | Does the retest show rejection of lower prices? | Price is simply falling through the area |
| Invalidation | Where would that rejection thesis fail? | The necessary stop makes the target unattractive |
The source favors long lower-wick candles for bullish entries and upper-wick rejection candles for bearish entries. It explicitly allows a red-bodied hammer in a bullish retest. The wick and closing location matter more than insisting that every qualifying long candle must be green.
That does not make every wick a signal. A lower tail can appear while price continues a steep decline. The useful question is whether the rejection occurs at the level your plan named beforehand, with sufficient room to the next obstacle.
What Price Control Can and Cannot Mean
A close near the upper end of a candle shows that price finished well above its low during that interval. It does not literally show more executed buyers than sellers; each transaction pairs both. Interpret control as observed price behavior under trading pressure, not a count of unmatched participants.
Similarly, a breakout suggests that the market traded beyond the previous ceiling. It cannot prove that sellers disappeared or that a retest must hold. Failed breaks are part of the setup’s risk, which is why a defined invalidation and position size are necessary even when the chart looks unusually clean.
Worked Example: The Wick Does Not Set the Position Size
Imagine prior resistance at $50.00. After a close above it, a retest reaches $49.94 and closes at $50.08 with a pronounced lower wick. An entry at $50.10 and stop at $49.92 create $0.18 planned risk per share. A target at $50.50 offers $0.40, or about 2.22R, before costs.
With a $90 price-risk budget, the simple size is 500 shares. This assumes the intended entry and stop are executable and leaves no allowance for costs or slippage. A fill at $50.18 raises structural risk to $0.26 per share and cuts the unchanged target to roughly 1.23R. The candle geometry is the same, but the actual trade is materially different.
Audit quoted examples rather than copying their arithmetic. One source example pairs a stated 5.32R trade with $180 risk and $1,610 potential profit; those dollar figures imply about 8.94R instead. Without the chart and sizing records, that discrepancy cannot be resolved from the transcript. The guide therefore uses its own transparent calculation rather than presenting the inconsistent figures as verified results.
Why the Three Example Trades Are Not a Win Rate
The source contrasts a failed retest, an entry without a retest, and a successful confirmed retest. These illustrate the selection logic. They do not provide a consecutive sample, a control group, or evidence that the confirmation candle is responsible for a positive expectancy.
The title’s failure-rate framing and the creator’s reported earnings are not independently verified by the supplied material. A more useful research question is narrow: among otherwise similar breakout-retest candidates, does requiring a specified rejection candle improve net outcomes enough to compensate for fewer entries?
Before testing that question, list the candidates without knowing which ones will produce a textbook hammer. Otherwise you can select only the attractive completed examples and quietly exclude the messy failures that the method would have faced in real time.
Pine Script Backtest Code
View Pine Script Backtest Code
//@version=6
// Learning guide: https://candlechasers.com/scalping-break-retest-candle-confirmation/
// Original research approximation. Not the creator's complete trading system.
strategy("CC Retest Hammer Comparison", overlay=true, pyramiding=0, initial_capital=1000000, default_qty_type=strategy.fixed, default_qty_value=1, margin_long=100, margin_short=100, commission_type=strategy.commission.percent, commission_value=0.01, slippage=1, calc_on_every_tick=false, calc_on_order_fills=false, process_orders_on_close=false)
qty = input.float(1, "Units/contracts (check instrument minimum)", minval=0.001)
atrLen = input.int(14, "ATR length", minval=1)
stopATR = input.float(1.0, "Stop distance in ATR", minval=0.1, step=0.1)
rewardR = input.float(2.0, "Target in R", minval=0.1, step=0.1)
maxHold = input.int(20, "Maximum bars held", minval=1)
atr = ta.atr(atrLen)
lookback = input.int(10, "Breakout lookback (research definition)", minval=2)
lifetime = input.int(10, "Bars allowed for retest", minval=1)
toleranceATR = input.float(0.25, "Retest tolerance in ATR", minval=0, step=0.05)
useHammer = input.bool(true, "Require hammer geometry")
wickRatio = input.float(2.0, "Lower wick / body minimum", minval=0.5, step=0.25)
rollingHigh = ta.highest(high, lookback)[1]
ema = ta.ema(close, 21)
var float frozenLevel = na
var int armedBar = na
var float tolerance = na
bool candidate = false
bool signal = false
body = math.abs(close - open)
lowerWick = math.min(open, close) - low
upperWick = high - math.max(open, close)
barRange = high - low
hammer = barRange > 0 and lowerWick >= math.max(body, syminfo.mintick) * wickRatio and upperWick <= barRange * 0.25 and close >= low + barRange * 0.65
confirmation = not useHammer or hammer
if barstate.isconfirmed
if not na(armedBar) and (bar_index - armedBar > lifetime or close < frozenLevel - tolerance)
frozenLevel := na
armedBar := na
if strategy.position_size == 0 and not na(armedBar) and bar_index > armedBar
candidate := low <= frozenLevel + tolerance and close > frozenLevel
signal := candidate and confirmation
if signal
frozenLevel := na
armedBar := na
// No replacement while a setup is waiting. New candidates require a later bar.
if strategy.position_size == 0 and na(armedBar) and not signal and close > rollingHigh and close[1] <= rollingHigh[1] and close > ema and not na(atr)
frozenLevel := rollingHigh
tolerance := atr * toleranceATR
armedBar := bar_index
var int candidates = 0
var int eligible = 0
var int submitted = 0
if barstate.isconfirmed and candidate
candidates += 1
if barstate.isconfirmed and signal
eligible += 1
bool submit = barstate.isconfirmed and signal and strategy.position_size == 0 and not na(atr)
if submit
int riskTicks = math.max(1, int(math.ceil(atr * stopATR / syminfo.mintick)))
int targetTicks = math.max(1, int(math.round(riskTicks * rewardR)))
strategy.entry("Trade", strategy.long, qty=qty)
// Bracket submitted with entry. Distances are measured from actual entry fill.
strategy.exit("Bracket", "Trade", loss=riskTicks, profit=targetTicks)
submitted += 1
if strategy.opentrades > 0
int held = bar_index - strategy.opentrades.entry_bar_index(0)
if held >= maxHold
strategy.close("Trade", comment="Time exit")
plot(ema, "Trend EMA", color=color.orange)
plot(frozenLevel, "Frozen breakout level", color=color.blue, style=plot.style_linebr)
plotshape(barstate.isconfirmed and candidate, title="Candidate", style=shape.circle, location=location.belowbar, color=color.gray, size=size.tiny)
plotshape(submit, title="Order submitted, not a fill", style=shape.triangleup, location=location.belowbar, color=color.aqua, size=size.small)
var table info = table.new(position.top_right, 2, 4, bgcolor=color.new(color.black, 15))
if barstate.islast
table.cell(info, 0, 0, "Candidates", text_color=color.white)
table.cell(info, 1, 0, str.tostring(candidates), text_color=color.white)
table.cell(info, 0, 1, "Eligible signals", text_color=color.white)
table.cell(info, 1, 1, str.tostring(eligible), text_color=color.white)
table.cell(info, 0, 2, "Orders submitted", text_color=color.white)
table.cell(info, 1, 2, str.tostring(submitted), text_color=color.white)
table.cell(info, 0, 3, "Closed trades", text_color=color.white)
table.cell(info, 1, 3, str.tostring(strategy.closedtrades), text_color=color.white)
What This Code Actually Tests
The original long-only baseline arms after a close above the previous ten bars’ high while price is above a 21-period EMA. A later retest must trade within a quarter ATR of the frozen level and close above it. The setup expires after ten bars or a close more than the tolerance below the level. Only one waiting setup is tracked.
The optional hammer filter requires a lower wick at least twice the body, an upper wick no larger than 25% of the full range, and a close in the top 35% of the range. Body color is unrestricted. A one-tick floor in the body comparison prevents a zero-body doji from qualifying merely because multiplication by zero makes the wick condition trivial. These numeric boundaries are our definitions.
What This Code Does Not Test
The EMA and rolling high are simplified structure proxies; the code does not verify a full higher-high/higher-low sequence or reproduce exact equal highs. It tests longs only, without the source’s bearish candle patterns. Its one-ATR risk distance and 2R target are measured from actual fill; they do not put the stop below the rejection wick or select a discretionary session-high target.
Execution Assumptions and Chart Setup
Use standard candlesticks rather than synthetic-price charts. Signals are evaluated on completed bars. Orders are submitted after confirmation and become eligible on the next available tick; a signal marker is not a fill. Neither calculation on every tick nor recalculation after fills is enabled. There are no higher-timeframe requests or negatively offset signals in these scripts.
A market entry and its stop/target bracket are submitted together. ATR is sampled at the signal, rounded upward into a positive tick risk distance, and frozen for that trade. The bracket distances are measured from actual simulated entry; they do not imply execution at the signal close. A time exit is requested after the selected number of bars and normally fills on a later tick. There is no automatic end-of-day flattening.
Defaults use one unit or contract, illustrative capital of $1,000,000, 100% margin, commission of 0.01% per transaction, and one tick of slippage. These are research settings, not sizing advice or a claim about a broker’s fees. Adjust quantity to the instrument’s tradable minimum and verify affordability, contract value, and currency. One contract does not mean 1% account risk.
Inspect trades where stop and target are both inside one candle: OHLC bars do not identify the actual event sequence. Compare Bar Magnifier where available and stress costs separately. See TradingView’s official strategy documentation (paid link) for broker-emulator and order behavior.
Validation status: the rules, state handling, raw code, and HTML presentation were reviewed statically. This script has not been compiled in TradingView or run against market data here; no win rate, profitability, or browser-tested copying is claimed. Compile it in Pine Editor and inspect the trade list before using its results.
If the Chart Shows No Trades
Check that the plotted reference lines appear and enough bars have loaded for the longest lookback. Compare the candidate, order, and closed-trade counters. Candidates without orders indicate a filter or position-state restriction; orders without fills require checking price conditions, quantity, and capital. Open trades are not yet closed trades. Use the controls to isolate the blocking condition, and preserve that diagnostic run separately from your formal experiment.
Research Lab: Controlled Comparisons
- Candle contribution: compare hammer confirmation on and off while preserving the same breakout, retest tolerance, and exits. Include every eligible retest, not just the memorable examples.
- Geometry robustness: compare wick-to-body minimums of 1.5, 2.0, and 2.5 on development data. Look for a stable region rather than the single most profitable value.
- Location sensitivity: keep the candle definition fixed and compare retest tolerances of zero, 0.25 ATR, and 0.5 ATR. Audit whether looser settings admit trades far from the intended level.
Measure trade count, net expectancy, drawdown, and candidate-to-trade conversion. Then freeze the rule on later sessions. A higher win percentage with sharply reduced opportunity may be a selection tradeoff rather than a superior overall process.
Check Your Understanding
1. Can a red hammer qualify for a bullish retest? Yes. Under the source’s logic and this script’s geometry, location and rejection matter more than body color.
2. Does a local swing high always equal the day’s high? No. Name the precise reference your trade uses.
3. What does $1,610 reward divided by $180 risk equal? About 8.94R, not 5.32R. Arithmetic discrepancies should remain visible rather than being smoothed into a performance claim.
Final Takeaway
Make structure choose the location, let confirmation choose the timing, and let actual execution determine the risk. The next useful test is whether a defined rejection candle adds value to the same set of retest opportunities.
Risk Disclosure
This guide is for education and research, not personalized financial advice or a recommendation to buy or sell any security, contract, or other asset. Trading can result in substantial losses, and leveraged products can produce losses beyond the initial amount committed. Position exposure is not the same as capital at risk. Stops do not guarantee execution at their stated prices; gaps, slippage, spreads, fees, illiquidity, and trading halts can materially change results. Short selling introduces additional risks, including potentially unlimited losses. Historical examples, creator-reported outcomes, and hypothetical backtests do not establish future performance. Paper-test any rules, understand the instrument and execution assumptions, and use only risk capital you can afford to lose.
CandleChasers provides independent educational analysis and is not affiliated with, endorsed by, or sponsored by the source creator or any platform mentioned.