Idea in brief
Martin Luk, winner of the U.S. Investing Championship 2025, largely follows Qullamaggie in breakouts, but according to Financial Wisdom came up with the pullback buying technique independently. The card is based on this channel's retelling, not on Luk's own words.
Luk looks for a strong stock in a consolidation: lows are rising, price rides the rising EMA 9 and 21, the range is narrowing, and the AVWAP from an important high has already been reclaimed. Luk uses two kinds of support: indicators (AVWAP, EMA 9, 21, 50) and price levels (prior extremes, unfilled gaps). The signal appears when price flushes intraday into two supports at once and bounces. The buy comes when the stock turns green on the day or near a close above the supports, with a stop below the day's low, usually 1-4%. The exit is on a close below EMA 9, or below EMA 21 for more room.
The channel's author does not name the AVWAP anchor point, the base length in bars or the touch tolerance, so these rules are ours. The demand tail (#064) and the gap down (#037) place the stop below the candle after it closes, while here the entry is on the same day and the stop is often 1-2%. The VWAP in card #003 is intraday, while the AVWAP here lives for weeks.
Why it might work
The first explanation is arithmetic. Profit in R is the move divided by the stop, so halving the stop doubles it. The gain grows with the move: according to the video, tightening the stop from 3% to 1.5% adds about 8R for a trade that rose 25% and about 17R for a trade up 50%. That is why Luk looks for the entry with the tightest stop that does not break the setup. The price of this is that tight stops get hit more often. According to the video, Luk is wrong on 85% of trades with an average win of about seven losses, which gives an expectancy of about +0.2R per trade (0.15 × 7 − 0.85).
The second explanation is shown in the video only on charts, and the wording is ours. The AVWAP from the base high is the average price of everyone who bought from the top. While price is below it, the line acts as resistance, and after the reclaim it becomes support, as in the IonQ, AMPX and SanDisk examples. If a rising EMA runs through the same place, a flush into this confluence shakes out weak holders, and the day's low gives a tight stop.
Neither explanation is backed by statistics in the video. The examples were selected in hindsight.
Rules
Stock selection (author, outside the signal)
// scan over the US stock universe, done separately from the strategy
Gain = gain over 1, 3 or 6 months above 30% // author
Rank = top 20-30% by return over these periods // author
MarketCap > $100 million AND Average(Close * Volume, 20) > $1 million // author
// then each stock on the list is checked for a base
AVWAP anchor (Finetiq)
// author: AVWAP is anchored to an important swing high or swing low, the point is chosen on the chart.
// In all the video's examples it is the high from which the base began.
// Finetiq: a mechanical rule for daily bars
AnchorBar = the bar with the highest High over the last 250 bars
BaseBars = number of bars after AnchorBar
TP = (High + Low + Close) / 3
AVWAP = Σ(TP × Volume) / Σ(Volume) over bars from AnchorBar inclusive to the current one
// a new 250-bar high moves the anchor to today: the base is over, no signals
// if the old high has dropped out of the 250-bar window, the anchor moves to the next highest
// high in the window, so AVWAP is recalculated in full rather than accumulated
// variant for testing: AnchorLow = the bar with the lowest Low after AnchorBar (base bottom)
Base strength (author, Finetiq thresholds)
EMA9 = EMA(Close, 9); EMA21 = EMA(Close, 21)
ADR = Average(High - Low, 20) // Finetiq: average daily range in price
BaseOK = BaseBars >= 40 // author: the best bases are longer than 8 weeks
Surfing = EMA9 > EMA21 AND EMA21 > EMA21[5] // author: price rides the rising EMA 9 and 21
AboveAVWAP = Close[1] > AVWAP[1] // author: AVWAP already reclaimed before the flush
HigherLows = Lowest(Low, 10)[1] > Lowest(Low, 10)[11] // author: rising lows; windows Finetiq
Tighter = Average(High - Low, 10)[1] < Average(High - Low, 40)[1] // author: the range is narrowing
NotWeak = NOT (EMA9 < EMA9[1] AND EMA21 < EMA21[1]) // author: do not buy under falling EMAs
Strength = BaseOK AND Surfing AND AboveAVWAP AND HigherLows AND Tighter AND NotWeak
Flush into a confluence of supports (author, Finetiq tolerances)
Tol = 0.25 * ADR // Finetiq: touch tolerance
Held(S) = Low <= S + Tol AND Close >= S // level hit intraday and reclaimed by the close
Flush = Low <= Close[1] - 0.5 * ADR // Finetiq: a flush, not just a touch
Confluence = Held(AVWAP) AND (Held(EMA9) OR Held(EMA21))
// author: at least two supports, AVWAP + EMA or AVWAP + a horizontal level.
// Finetiq: horizontal levels and gaps are not part of the mechanical version
Setup = Strength AND Flush AND Confluence
Entry (author, execution Finetiq)
RiskPct = 100 * (Close - Low) / Close
IF Setup AND RiskPct <= 4 // author: prefer ultra-tight stops,
// 1-4% in the examples; threshold Finetiq
// mode A, daily bars: "entry near the close"
BUY AT CLOSE of this bar // execution on the same bar (MOC)
// Finetiq: if MOC is not available, BUY AT NEXT BAR OPEN, same stop, recalculate the risk
// mode B, 5-minute bars: "when the stock turns green on the day"
Levels: AVWAP[1], EMA9[1], EMA21[1] of the daily series // Finetiq: levels as of yesterday's close
IF Strength[1] AND the day's low has already met the Confluence condition for these levels
AND there have been no new entries in this stock today
BUY STOP at DailyClose[1] + 1 tick // author: turn to green on the day
Stop and exit (author)
StopLoss = LowOfDay - 1 tick // author: stop below the low of the entry day
SELL STOP at StopLoss
IF Close < EMA9 THEN EXIT AT NEXT BAR OPEN // author: close below EMA 9
// the author's variant for more room: IF Close < EMA21 THEN EXIT AT NEXT BAR OPEN
// Finetiq: execution at the next day's open; the author does not specify the moment of the sale
Parameters
| Parameter | Value | Source |
|---|---|---|
| Scan | gain above 30% over 1, 3 or 6 months, top 20-30% | author |
| Size and liquidity | market cap from $100 million, turnover from $1 million a day | author |
| Averages | EMA 9, EMA 21 (EMA 50 as support) | author |
| AVWAP anchor | highest High over 250 bars | Finetiq (important swing high: author) |
| Price for AVWAP | (High + Low + Close) / 3 | Finetiq |
| Base length | 40 bars or more | author (8 weeks) |
| Reclaimed AVWAP | yesterday's close above AVWAP | Finetiq (principle: author) |
| Rising lows | 10-bar window | Finetiq (principle: author) |
| Narrowing range | 10-day average range below the 40-day one | Finetiq (principle: author) |
| Flush | day's low below yesterday's close by 0.5 ADR | Finetiq |
| Touch tolerance | 0.25 ADR | Finetiq |
| Confluence | AVWAP and EMA 9 or EMA 21 | author |
| Maximum risk | 4% | Finetiq (author's examples 1-4%) |
| Entry A | near the day's close above the supports | author |
| Entry B | stop above yesterday's close on 5-minute bars | author (implementation: Finetiq) |
| Stop | day's low | author |
| Exit | close below EMA 9, variant EMA 21 | author |
What to test
- Does AVWAP add anything beyond the EMA. Three runs: the AVWAP and EMA confluence, a flush to EMA 9 or 21 alone without AVWAP, a flush to AVWAP alone. If the result is the same without AVWAP, the hardest part of the implementation is unnecessary.
- Anchor point. The 250-bar high versus the 120-bar high and versus the base bottom.
- Stop width and stop-out frequency. Split trades by risk: up to 1.5%, 1.5-3%, 3-4%, 4-7%. The example with gains of 8R and 17R assumes that the trade with the tight stop still rises the same 25% or 50%. Check how much more often a tight stop gets hit and what remains of the expectancy.
- EMA 9 versus EMA 21 on the exit. In AMPX the exit on EMA 21 gave +55% versus +40% on EMA 9. In RMLD and SYRE the EMA 21 trailing stop was still holding the position at the time of the video, so its final result is unknown. Compare expectancy, the number of winning trades and the maximum drawdown.
- Entry mode. Near the day's close, on the turn to green on 5-minute bars, and at the next day's open. For mode B, count how many times price turned green and then fell back below the day's low.
- Costs and losing streaks. With 85% losing trades, 20 losses in a row occur with a probability of about 4% per 20 trades. Model the drawdown at 0.5% and 1% risk with round-trip slippage of 0.1-0.2%: with a 1% stop that is up to a fifth of R.
- Survivorship bias in the scan. Run the scan on historical constituents, not on today's leaders. Stocks that rose 30% and then collapsed must stay in the sample.
Platform notes
TradingView (Pine Script)
- The built-in
ta.vwap(src, anchor)restarts accumulation whenanchoris true. This works for moving the anchor to a new high. When the old high drops out of the window, the new anchor lies in the past, andta.vwapcannot go back to it: AVWAP has to be recalculated in a loop over the bars from the anchor. - The manual Anchored VWAP drawing tool on the chart is not passed to a strategy. For a test, the line must be calculated in code.
- Entry near the day's close:
process_orders_on_close = trueinstrategy(), otherwise the order fills at the open of the next bar. - Mode B on a 5-minute chart: take the daily AVWAP and EMAs via
request.security(syminfo.tickerid, "D", expr[1], lookahead = barmerge.lookahead_on). The history of 5-minute bars is limited by the plan.
MultiCharts and TradeStation (EasyLanguage)
- There is no built-in VWAP with an arbitrary anchor. Accumulate the sums of
TP * Volumeand of volume yourself from the anchor bar, and recalculate them in a loop when the anchor changes. - Buying at the close:
Buy this bar on close. In live trading this is not an MOC order. It has to be sent to the broker separately before the cutoff for closing orders. - In mode B the daily series is added as a second data stream (
Data2). On TradeStation intraday bars, full volume has historically been stored inTicks, so calculate AVWAP on the daily series, not on the 5-minute one. - The scan and a portfolio test require Portfolio Maestro (TradeStation) or Portfolio Trader (MultiCharts).
MetaTrader 5 (MQL5)
- There is no built-in VWAP. Stock CFDs have only tick volume (
iTickVolume), an AVWAP based on it is a different line, and the support levels will shift. Real volumeiRealVolumeis available only for exchange-traded stocks, which few brokers offer. - The list of stocks is limited by the broker. A scan for a 30% gain across the whole US market cannot be done in an EA without external data.
- "Green on the day" is measured from the prior day's close. A CFD's daily bar is cut on server time, and its close may not match the official exchange close.
- There is no order type for the close. The mode A entry has to be sent at market a few minutes before 16:00 ET, converted to server time with daylight saving time taken into account.
Where the idea can break
- This is the Financial Wisdom channel's retelling, not Luk's own explanation. It is impossible to tell which rules Luk actually applies and what the video's author added. At the end of the video the channel advertises its own strategy.
- All example numbers were selected in hindsight from successful cases. The 85% error rate and the 7 to 1 ratio are given without a period or a number of trades.
- A stop below the day's low does not protect against a gap. If the stock opens 5% lower, with a 1% stop the loss will be about 5R. Such gaps on earnings are common in momentum stocks.
- A mechanical AVWAP anchor may pick a different line from the one a trader would draw by hand. The setup will then be different, even though the rules formally match.
- A high share of losing trades makes the result depend on a few large wins. Missing one such trade or exiting early changes the result for the year.