Late-Day Rally, Gap-Up Fade: Opening Entries and Risk

Video: THE OPENING PATTERN I LOOK FOR EVERY MORNING
Creator: Oliver Velez Trading
Original Video: Watch the original video
Difficulty: Advanced

The Big Idea

A stock rallies late in the previous session, gaps higher the next morning, and then begins to weaken. Oliver Velez treats that sequence as a candidate for an opening short back toward the upper part of the prior rally.

The opportunity comes from the sequence, rather than the gap alone: late strength, further overnight extension, enough room for a decline, and visible opening weakness. The source’s explanation is that some traders holding the late rally may sell into a favorable gap.

That explanation is plausible, but the chart cannot establish who is selling or why. The testable question is whether the defined sequence produces favorable short outcomes after costs and realistic fills.

Start With the Previous Afternoon

Velez examines a two-minute Meta chart using 20- and 200-period simple moving averages. The setup begins with an advance in approximately the last 30–45 minutes of the prior session, ideally near the day’s high or with little nearby overhead price history.

He interprets this location as creating potential profit-taking pressure the next morning. A chart near its high does not reveal every participant’s cost basis, however, and the same late strength can attract continuation buying.

Mark the late move’s start, high, low, and close before evaluating the next opening. If those anchors are chosen after seeing where the fade stopped, the target is being fitted to the outcome.

The Gap Needs Room to Matter

The source combines the late rally and the next gap into an “up, then straight up” shape. A small gap may not provide enough distance to make the opening fade worthwhile.

Velez treats the upper third of the prior advance as a possible support area. If the late move spans a low of 490 and a high of 496, that upper-third region extends from 494 to 496. A gap above it can leave room for a short before price returns to the area where support might emerge.

The nearest boundary, 496, is not the same target as the deeper boundary, 494. Decide which you mean before comparing reward with risk. Reaching either is uncertain.

ObservationRole in the setupWhat remains to be defined
Late-session rallyEstablishes prior strengthMinimum size and exact time window
Gap above the closeCreates further extensionMinimum gap and room to support
Opening declineSupplies weakness confirmationElapsed time and required high-to-price decline
Prior upper-third regionProvides a candidate exit areaWhich boundary or price is targeted

A Round Number Adds Context, Not Certainty

The presenter considers a gap near a prominent round number, such as 500, an extra supporting condition for the short. He does not require it in every setup.

A round number can attract attention, but the strength of that effect depends on the instrument, price scale, and surrounding context. Being near 500 does not establish hidden resistance or guarantee a reversal.

To test the idea, define the rounding interval and acceptable distance in advance. Comparing only successful fades near round numbers would conceal the openings that broke through and continued higher.

Measure Weakness From the High

Velez watches the opening price rise and then retreat. He measures the decline from the developing high, rather than looking only at whether the candle body is red.

Those are different measurements. A candle can fall substantially from its high while remaining above its opening price. The source discusses very early entries but generally favors waiting through the first minute before acting.

The risk reference is above the observed opening high. The more price has already fallen before entry, the larger the distance back to that high and the smaller the remaining distance to support. Waiting can provide more evidence while making the trade less attractive.

A completed two-minute candle does not reveal what was knowable at 20 or 60 seconds. A backtest that uses its final high and low while claiming an earlier entry introduces hindsight.

Original Risk and Target Example

Assume an opening high of 500, a short fill at 499.50, a stop at 500.10, and a target at 496. Planned price risk is 0.60 per share and available reward is 3.50, about 5.83R before costs.

A hypothetical $120 price-risk budget permits 200 shares. If the entry instead occurs at 498.50 with the same stop and target, risk is 1.60 and reward 2.50, about 1.56R. The later signal might feel more convincing, but it creates a different trade.

The source frames this as a one-leg play because the expected decline approaches a support “floor.” That supports an exit policy around the first planned objective rather than automatically holding for a second decline. It does not establish that the floor will hold.

Closer Targets Do Not Cancel Larger Position Risk

The presenter describes seeking a smaller move with greater size as an advanced efficiency technique. A closer target may be easier to reach under the same conditions, but the probabilities need evidence. They do not erase the cash loss created by added shares.

Illustrative shortSharesTarget distanceGross target gainLoss at a 0.60 stop distance
Larger move2003.50$700$120
Smaller move, increased size1,4000.50$700$840

The gross gain is equal while the planned stop loss rises sevenfold. Costs and adverse fills also scale with quantity. With exact +$700 wins and −$840 losses, the second policy needs a win rate above approximately 54.55% before costs merely to break even.

A change in probability can change expectancy; it does not make the loss exposure identical. Compare the complete payoff distribution, drawdown, execution capacity, and tail losses before treating increased size as a safer efficiency improvement.

Pine Script Research Strategy

Expand the complete Pine Script research strategy

//@version=6
strategy("Late rally + gap-up opening fade - research proxy", overlay=true,
     initial_capital=25000, pyramiding=0, margin_short=100,
     commission_type=strategy.commission.percent, commission_value=0.01,
     slippage=2, calc_on_order_fills=true, calc_on_every_tick=false,
     process_orders_on_close=false)

lateStart = input.int(930, "Late window start: NY minutes (930 = 15:30)", minval=0, maxval=1439)
sessionClose = input.int(960, "Session close: NY minutes (780 = 13:00)", minval=1, maxval=1440)
minRallyATR = input.float(0.5, "Minimum late rally / ATR at close", minval=0)
nearHighATR = input.float(0.2, "Maximum close below day high / ATR", minval=0)
minGapATR = input.float(0.5, "Minimum opening gap / prior ATR", minval=0)
minDropATR = input.float(0.25, "Minimum opening high-to-close drop / prior ATR", minval=0)
targetFraction = input.float(1, "Prior late range target (1 = upper edge)", minval=0.666667, maxval=1)
minRR = input.float(2, "Minimum planned reward/risk", minval=0.1)
cashRisk = input.float(100, "Estimated cash risk before costs", minval=1)
maxShares = input.int(1000, "Maximum shares", minval=1)
exitAfterMinutes = input.int(30, "Maximum time after open", minval=2, maxval=390)

if barstate.isfirst
    if not chart.is_standard or not timeframe.isminutes or timeframe.multiplier != 2
        runtime.error("Use standard two-minute US stock candles.")
    if sessionClose <= lateStart
        runtime.error("Late window must start before session close.")
if session.ispremarket or session.ispostmarket
    runtime.error("Disable extended hours for this experiment.")

atr = ta.atr(14)
minutesOpen = hour(time, "America/New_York") * 60 + minute(time, "America/New_York")
minutesClose = hour(time_close, "America/New_York") * 60 + minute(time_close, "America/New_York")
firstBar = minutesOpen == 570
varip float dayHigh = na
varip float lateOpen = na
varip float lateLow = na
varip float lateHigh = na
varip int lateCount = 0
varip bool previousQualified = false
varip float previousClose = na
varip float previousLow = na
varip float previousHigh = na
varip float fixedStop = na
varip float fixedTarget = na
varip float seenPosition = 0.0
fillPass = strategy.position_size != seenPosition
seenPosition := strategy.position_size

if fillPass and strategy.position_size < 0
    if strategy.position_avg_price >= fixedStop or strategy.position_avg_price <= fixedTarget
        strategy.close("S", comment="Invalid opening fill", immediately=true)

// Do not use completed OHLC to generate signals during fill recalculations.
if not fillPass and barstate.isconfirmed
    if firstBar
        dayHigh := high
        lateOpen := na
        lateLow := na
        lateHigh := na
        lateCount := 0
        gapOK = previousQualified and open - previousClose >= minGapATR * atr[1]
        weakness = close < open and high - close >= minDropATR * atr[1]
        target = previousLow + targetFraction * (previousHigh - previousLow)
        stop = high + syminfo.mintick
        distance = stop - close
        rewardDistance = close - target
        if strategy.position_size == 0 and gapOK and weakness and distance > 0 and rewardDistance / distance >= minRR
            shares = math.floor(math.min(maxShares, cashRisk / (distance * syminfo.pointvalue)))
            if shares >= 1
                fixedStop := stop
                fixedTarget := target
                strategy.entry("S", strategy.short, qty=shares)
                strategy.exit("S-bracket", "S", stop=fixedStop, limit=fixedTarget)
        // Do not reuse a stale late-window observation on another opening.
        previousQualified := false
    else
        dayHigh := na(dayHigh) ? high : math.max(dayHigh, high)

    if minutesOpen >= lateStart and minutesClose <= sessionClose
        if na(lateOpen)
            lateOpen := open
            lateLow := low
            lateHigh := high
        else
            lateLow := math.min(lateLow, low)
            lateHigh := math.max(lateHigh, high)
        lateCount += 1

    if minutesClose == sessionClose
        expectedBars = (sessionClose - lateStart) / 2
        previousQualified := lateCount == expectedBars and close - lateOpen >= minRallyATR * atr and dayHigh - close <= nearHighATR * atr and lateHigh > lateLow
        previousClose := close
        previousLow := lateLow
        previousHigh := lateHigh

    if strategy.position_size < 0 and minutesClose >= 570 + exitAfterMinutes
        strategy.cancel_all()
        strategy.close("S", comment="Opening time exit", immediately=true)

if strategy.position_size < 0
    strategy.exit("S-bracket", "S", stop=fixedStop, limit=fixedTarget)

plot(ta.sma(close, 20), "20 SMA reference", color=color.blue)
plot(ta.sma(close, 200), "200 SMA reference", color=color.orange)
plot(strategy.position_size < 0 ? fixedStop : na, "Opening high stop", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? fixedTarget : na, "Frozen late-window target", color=color.green, style=plot.style_linebr)

The following original short-only strategy tests a completed-candle approximation on regular-session two-minute US stock data.

Our definitions: the previous session’s final 30 minutes must rise by at least 0.5 ATR(14), with the close within 0.2 ATR of the day’s high. The next opening must gap at least 0.5 prior ATR above that close. Its first candle must finish red and at least 0.25 prior ATR below its high.

The default target is the previous late window’s high, the nearest boundary of the upper-third area. The target-fraction input permits exploration toward the two-thirds boundary. The stop is one tick above the first candle’s high, and planned reward/risk must be at least 2 before submission.

These thresholds, the completed-candle entry, and the 30-minute time exit are ours. They do not reproduce the source’s intrabar one-minute decision, round-number preference, or discretionary early profit-taking. The moving averages are plotted as references but do not filter entries.

Execution QA

Disable extended-hours bars and use standard two-minute US equity candles with a 9:30 New York opening. The late-window calculation requires all expected bars. Its levels are stored only when that session closes, so the following morning does not use the current day’s eventual range.

The entry signal is evaluated at the first candle’s close. Its market order normally fills at the next bar’s open, later than the source’s intrabar decision. The protective stop and fixed target are submitted alongside entry.

A fill-only recalculation checks the actual entry against the fixed bracket without using the fill bar’s completed high or low for another setup. A fill beyond either bracket boundary prompts an immediate simulated exit. The target stays at the recorded prior-session price; it does not move to preserve a reward multiple.

Position size and minimum reward/risk are estimated at the signal close. Slippage or a gap can change both actual cash risk and actual reward/risk; the model does not guarantee the entry still offers 2R. At most one opening entry is available per session.

The time exit uses an immediate simulated close, an optimistic fill assumption requiring cost stress. On early-close sessions, adjust both the late-window start and session-close inputs-for example, 750 and 780 for a 12:30–13:00 window. Holidays are not automatically identified.

Commission defaults to 0.01% per fill and slippage to two ticks, adjustable in Strategy Properties. The strategy does not model borrow availability, locate fees, variable spreads, partial fills, halts, or every short-sale restriction. Its 100% margin assumption can prevent an order from filling. The SEC’s short-sales bulletin explains the potentially unlimited loss exposure of an unhedged short, while its stop-order bulletin explains why the stop price is not a guaranteed fill.

Inspect same-bar bracket outcomes with Bar Magnifier where available. The code has been reviewed for its stated logic but has not been compiled or backtested in TradingView. No frequency, win rate, or profitability result is claimed.

Backtest Lab and Focused Practice

ComparisonChange one assumptionEvaluate
Late rally definitionThirty versus 45-minute windowsTrade count and stability across periods
Gap sizeVary the prior-ATR thresholdWhether additional extension improves net expectancy
Target depthUpper edge versus deeper upper-third pricesHit rate, average payoff, and holding time
Execution costsIncrease slippage and commissionsWhether the opening advantage survives friction

The source also recommends practicing one skill at a time and collecting screenshots. Make the collection include failed candidates, skipped entries, and gaps that ran upward. Save a pre-entry view separately from the eventual outcome.

A focused week can improve observation, but it does not establish mastery or statistical reliability. Record the condition you are practicing and keep the other rules stable, then validate the proposed change on later data.

Final Takeaway

The opening fade is a conditional sequence: late strength, further extension, enough room to support, and observable weakness. Entry timing changes both evidence and trade economics. A nearer target can improve the chance of a modest move, but larger size still increases cash exposure and must be assessed as a separate risk policy.


Risk Disclosure: This material is for educational and research purposes only and is not financial or investment advice. Trading can result in substantial losses. Backtests are hypothetical, depend heavily on their assumptions, and cannot reproduce every aspect of live execution. Commissions, spreads, slippage, liquidity, gaps, trading halts, borrow costs, order behavior, market regime changes, and discretionary decisions can materially affect results. Short selling can involve potentially unlimited losses, and stops do not guarantee an execution price. Historical results do not guarantee future performance.

This article is an independent educational companion to the video and is not affiliated with, sponsored by, endorsed by, or authorized by Oliver Velez Trading.

As an Amazon Associate I earn from qualifying purchases.