Video: How To Trade When The Market Shifts (Without Chasing News)
Creator: Momentum.
Original Video: Watch the original video
Difficulty: Intermediate
The Big Idea
Adapting to a changing market means observing which opportunities your process is handling well, then testing that observation. It does not require finding a fresh news explanation for every move. This session contrasts difficult breakout attempts with cleaner pullbacks, reclaimed levels, and predefined exits.
If you remember one thing: change a trading rule only after separating the market observation from the entry and execution decisions it is supposed to improve.
A Useful Observation Is Not Yet a Proven Edge
The source describes a period when trading after roughly 8 a.m. worked better for the trader and a handful of stronger days contributed heavily to results. Those are personal observations, not independently verified evidence that a particular clock time or daily attendance produces profit. Watchlist selection, changing volatility, trade frequency, and execution could all influence the experience.
The practical lesson is to keep those variables visible. Track the opportunities available during each time window, whether your pattern appeared, whether you entered, and what the actual execution cost. A week of good premarket trades can justify investigation without justifying an immediate increase in size.
Breakout, Retest, Reclaim: Different Entry Decisions
| Sequence | Entry argument | Main uncertainty |
|---|---|---|
| Immediate breakout | Participation carries price through a visible level | Chasing an extended candle or entering a failed break |
| Breakout then retest | The former ceiling holds as a floor | The pullback continues instead of stabilizing |
| Sweep and reclaim | Price briefly loses a reference and closes back above it | The reclaim fails or occurs without enough target room |
The session contains all of these kinds of decisions. A first pullback toward VWAP after a breakout is a different trade from repeatedly buying underneath VWAP after the original move weakens. The same ticker and the same day do not make the later entry an automatic continuation of the earlier opportunity.
Mark the level before the pullback and define what ends the setup. If the thesis requires holding a reclaimed breakout area, repeated failure there should change your plan. Waiting for the old profit to return is an account-management emotion, not a fresh price signal.
Volume Turnover Does Not Guarantee Liquidity
The source discusses a low-float stock trading substantial volume relative to its reported float. If a stock with a 600,000-share float trades 1.2 million shares, that is twice the float in reported turnover. It does not mean every share changed hands twice, or that there are two entirely new sets of holders. The same shares can trade repeatedly.
Nor does a large volume total guarantee a narrow spread or enough executable depth for your order. A thin stock may display exciting activity while fills remain expensive. Evaluate spread, available size, halts, and observed slippage separately from the volume histogram. OHLCV code cannot reconstruct those missing execution conditions.
Worked Example: A Good Idea With a Bad Fill
Use an invented breakout at $3.40 followed by a pullback and reclaim at $3.44. With invalidation at $3.32, planned risk is $0.12 per share. A target at $3.68 offers $0.24, or 2R, before costs. A $60 planned price-risk budget implies 500 shares before commissions and any allowance for slippage.
If the entry slips to $3.50 and the stop remains $3.32, the risk becomes $0.18 per share, or $90 for the same 500 shares. The old $3.68 target now offers only 1R. Your trade management must use the actual fill, not the attractive price that first appeared on the chart.
A limit order can prevent paying above a chosen entry, but may remain unfilled. A market order prioritizes execution over price certainty. Neither order type creates the original risk-to-reward ratio by itself. State the choice before the breakout occurs.
Trimming and Exiting Are Separate From Being Right
The session includes partial profits, trailing a remainder, and exiting a failed idea before a later bounce. A subsequent recovery does not make the earlier stop irrational. Its purpose is to limit exposure when the original condition fails, rather than to forecast the lowest future price.
Likewise, a successful first trade does not pay for unlimited reentries. Give every new entry its own invalidation and risk allocation. Track how much of the day’s realized profit is given back through repeated attempts after the clean move has ended.
Build a small adaptation journal: the market condition you observed, the proposed rule change, what will remain constant, and what evidence would reject the change. This turns a vague feeling that the market is different into something you can review after enough sessions.
Pine Script Backtest Code
View Pine Script Backtest Code
//@version=6
// Learning guide: https://candlechasers.com/market-shift-breakout-retest-execution/
// Original research approximation. Not the creator's complete trading system.
strategy("CC Break Retest Session Study", 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)
sessionMode = input.string("All bars", "Entry session (New York)", options=["All bars", "Premarket", "Opening session"])
useVWAP = input.bool(true, "Require close above VWAP")
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
vwapValue = ta.vwap(hlc3)
inSession = sessionMode == "All bars" or not na(time(timeframe.period, sessionMode == "Premarket" ? "0800-0930:23456" : "0930-1100:23456", "America/New_York"))
confirmation = close > open and inSession and (not useVWAP or (not na(vwapValue) and close > vwapValue))
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(vwapValue, "Session VWAP", color=color.purple)
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 waits for a close above a prior ten-bar high while price is above a 21-period EMA. It freezes that breakout level and waits for a later retest that closes back above it with a bullish body. The tolerance is one-quarter ATR and the setup expires after ten bars. A close too far below the frozen level invalidates it.
An optional VWAP filter and a New York entry-session selector allow separate comparisons. All bars is the default. Premarket means 08:00–09:30 on weekdays; opening session means 09:30–11:00. The time filter applies to entry confirmation, not to when the breakout was armed. Extended-hours data must actually be present for a premarket test.
What This Code Does Not Test
The code does not scan news, float data, a watchlist, premarket highs, or after-hours highs. A rolling breakout level is our proxy. It supports one waiting setup and does not replace it with every new high. It does not trim half or trail a runner. The 2R ATR bracket is an experimental control rather than the source’s complete management process, and positions may remain open beyond the selected entry window.
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
- Session comparison: keep the VWAP choice and all exits constant while comparing all bars, the premarket window, and the opening window. Use the same feed and extended-hours settings.
- VWAP contribution: hold the winning development-session choice fixed and compare the VWAP filter on and off. Keep this comparison separate from the session experiment.
- Execution stress: increase slippage and commission without changing entry rules. Compare trade count, expectancy, drawdown, and profit concentration by day.
Use a later period to test the frozen rule. If a result disappears when the two strongest days are removed, describe that dependence rather than presenting an even daily income expectation. The script’s market orders do not model the spread and depth of fast low-float stocks.
Check Your Understanding
1. Does twice-float turnover prove easy fills? No. Turnover is not order-book depth or a spread guarantee.
2. Is a later bounce evidence that an earlier stop was wrong? Not by itself. Compare the stop with the precommitted invalidation condition.
3. What is the replay assignment? Freeze a breakout level, label each retest before seeing its outcome, and log whether later reentries followed a new setup or only a desire to recover profits.
Final Takeaway
Adapt through recorded observations and controlled comparisons. A clean breakout-retest, realistic execution, and a disciplined exit are more useful than an explanation that changes with every headline.
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.