Idea in brief
After a breakout in a trending stock, one question remains: when to exit a winning position. The author of the Financial Wisdom channel removes the subjectivity here with a single number. If the stock's average daily range (ADR%) is 10% or more, the position is closed on the first close below EMA 10. If ADR% is below 10%, on the first close below EMA 20. A fast stock gets a short leash, a slow one a long leash.
The rule is the same in both of the author's studies, on the "cup with handle" and on the VCP. The SNDK example shows that the choice of average is revised during the trade: while ADR was below 10%, a close under EMA 10 did not count as an exit.
This is a block, not a system. The entry and the initial stop come from any breakout strategy, and the block only manages the open profit. Two variants from other sources: Jack Corsellis exits in parts at EMA 10, EMA 21 and SMA 50, while Qullamaggie first sells a third or a half after 3-5 days.
Why it might work
The author explains the choice of average by the speed of the stock. For a stock with ADR% of 10% or more, normal daily noise is already comparable to the distance to EMA 20. A short average takes profit from sharp moves faster. For a slow stock, EMA 10 is too close: a normal pullback will knock you out, and the trend will continue without you.
Jack Corsellis offers separate reasoning, based on statistics. The slower the average, the larger the average profit before the exit and the longer the trade. Profit per day is highest for EMA 10, so the choice depends on how many new trades you are willing to look for. Jack does not trust an average that the stock was already cutting through before the base: the way a stock behaved before is the way it will keep behaving.
All figures in this card were obtained on winners known in advance. How much the rule delivers on ordinary breakouts was not tested in the videos.
Rules
Main block: choosing the average by ADR% (author, ADR period Finetiq)
// daily stock bars, the position is already open from any entry with its own initial stop
ADRpct = 100 * (Average(High / Low, 20) - 1)
// Finetiq: formula and period 20. Financial Wisdom did not name the period,
// Jack Corsellis looks at the 20-day ADR% in the same context
EMA10 = EMA(Close, 10)
EMA20 = EMA(Close, 20)
// the choice is recalculated on every closed bar (author, SNDK example)
IF ADRpct >= 10 THEN TrailMA = EMA10 // author: fast stocks
ELSE TrailMA = EMA20 // author: slow stocks
IF MarketPosition > 0 AND Close < TrailMA
EXIT AT NEXT BAR OPEN
// author: exit on a close below the average, an intraday touch does not count
// Finetiq: fill at the next day's open. Alternative: an order for the close of the signal day
// the host system's initial stop stays in place, exit on whichever comes first (Finetiq)
Applying it to the qullamaggie-breakout card
// there the remainder after the partial sale exits on a close below EMA 10,
// and slow stocks on EMA 20-21 with no criterion for "slow". We plug in the block:
IF BarsSinceEntry >= 3 AND partial sale done
IF ADRpct >= 10 THEN TrailMA = EMA10 ELSE TrailMA = EMA20
IF Close < TrailMA THEN EXIT AT NEXT BAR OPEN
// the entry in that card already requires ADR% of 3% or more, so not every stock will reach the 10% threshold
Variant B. Jack Corsellis: exiting in parts on three averages
EMA21 = EMA(Close, 21)
SMA50 = SMA(Close, 50)
// author: main practice is EMA 10 and EMA 21, part is sometimes kept on SMA 50
Part10 = 1/2 of position; Part21 = 1/2 of position // Finetiq: the author did not name the fractions
IF Keep50 THEN Part10 = 1/3; Part21 = 1/3; Part50 = 1/3 // Finetiq
IF Close < EMA10 THEN EXIT Part10 AT NEXT BAR OPEN // author: first close below
IF Close < EMA21 THEN EXIT Part21 AT NEXT BAR OPEN
IF Close < SMA50 THEN EXIT Part50 AT NEXT BAR OPEN
// when to keep part on SMA 50 (the author's signs, Finetiq thresholds)
Keep50 = stock breaks out near SMA 50: Close / SMA50 - 1 < ADRpct / 100
OR price cut through EMA 10 and 21 before the base: more than 6 closes below EMA21 in the 60 bars before the base
// author: the stock will keep "chopping" through such averages, SMA 50 is more reliable
OR the index recently had a bear market: NASDAQ closed below SMA 200 within the last 250 bars
OR a new IPO: less than 250 bars of history
IF base number in the trend >= 3 THEN Keep50 = FALSE // author: late stage, fast averages
// "lower the bar": the stock has run far above EMA 10 (author, Finetiq threshold)
IF Close > EMA10 * (1 + 2 * ADRpct / 100)
SELL STOP at Low (of the last closed bar) for all or part of the position
Variant C. Qullamaggie as retold by Financial Wisdom
// phase 1 (author)
IF BarsSinceEntry >= 3 AND BarsSinceEntry <= 5 AND Close > EntryPrice // "into strength"; Finetiq: day 3
SELL 1/3 .. 1/2 of position AT NEXT BAR OPEN
IF BarsSinceEntry < 3 AND OpenProfitPct >= 2 * RiskPct // author: earlier on a large profit
SELL 1/3 .. 1/2 of position AT NEXT BAR OPEN // Finetiq: 2R threshold
StopLoss(remainder) = EntryPrice // author: breakeven
// phase 2 (author): the remainder on a close below a simple average
IF Close < SMA(Close, 10) THEN EXIT remainder AT NEXT BAR OPEN
// the channel author suggests an improvement: SMA 10 for fast stocks, SMA 20 for slow ones.
// Jack Corsellis (#01, 06:53): Qullamaggie moved from the simple 10-day average to EMA 10,
// which is why the qullamaggie-breakout card trails on the EMA. Compare both types on your own data
// Finetiq: the "fast" criterion comes from the main block, ADRpct >= 10
Parameters
| Parameter | Value | Source |
|---|---|---|
| ADR% threshold | 10% | author |
| Average for fast stocks | EMA 10 | author |
| Average for slow stocks | EMA 20 | author |
| Exit signal | close below the average | author |
| ADR% period | 20 days | Finetiq (after Jack Corsellis) |
| Execution | next day's open | Finetiq |
| Revising the choice of average | on every bar | author (SNDK example) |
| Variant B: averages | EMA 10, EMA 21, SMA 50 | author |
| Variant B: fractions | halves, thirds with SMA 50 | Finetiq |
| Variant B: signs for SMA 50 | near SMA 50 at the breakout, price cut through EMA 10/21 before the base, early cycle, IPO | author, Finetiq thresholds |
| Variant B: extension above EMA 10 | more than 2 ADR% | Finetiq |
| Variant C: partial sale | 1/3-1/2 after 3-5 days | author |
| Variant C: early sale | profit of 2R or more | Finetiq |
| Variant C: averages | SMA 10, SMA 20 for slow stocks | author |
What to test
- Does switching add anything beyond a single average. On the same entries (for example, from
qullamaggie-breakout) run three tests: always EMA 10, always EMA 20, choice by ADR%. If the rule is not better than the better of the two fixed averages, the switch is unnecessary. - Threshold and period neighborhood. ADR% 6, 8, 10, 12, 15. EMA 8/10/12 and 17/20/25. ADR period 10, 20, 50. The 10% threshold was named for fast US stocks, and the ADR% distribution on your stocks may differ.
- Recalculating on every bar versus fixing at entry. When ADR% drops below 10%, the trailing stop moves to EMA 20 and the stop moves further away. Compare three versions: choice on every bar, choice once at entry, choice on every bar but without the right to switch to a slower average.
- Exit at the open versus exit at the close. The difference equals the overnight gap after the signal day. For stocks with ADR% of 10% or more it can eat a noticeable part of the profit.
- Profit per day. Repeat Jack Corsellis's table on your own trades: average and median profit, bars in the trade, profit per bar for EMA 10, EMA 21, SMA 50 and for the ADR% rule.
- Survivorship bias. All the authors' figures were collected on winners. Run the block on all breakouts in your chosen universe without selection. In Jack Corsellis's own data, going from the 60 best to 500 ordinary breakouts cuts the average profit until EMA 10 from 98.79% to 28.82%.
- Costs. Stocks with high ADR% have wider spreads and more slippage on a market exit. Include them in the test, especially for the partial exits of variant B.
Platform notes
TradingView (Pine Script)
- ADR% in one line:
100 * (ta.sma(high / low, 20) - 1). EMA viata.emamatches EasyLanguage and MQL5 after warm-up. - By default the exit fills at the open of the next bar.
process_orders_on_close = truewill close the trade at the signal close price. In live trading this can only be filled with an order for the close, otherwise the test will be more optimistic. - Partial exit for variants B and C:
strategy.close("L", qty_percent = 50). For three parts, give the entry one name and close fractions of the current size. - History depth is limited by the plan. For a test on hundreds of breakouts one stock is not enough, and Pine has no portfolio testing (section 5 of the reference guide).
MultiCharts and TradeStation (EasyLanguage)
- EMA:
XAverage(Close, 10), ADR%:100 * (Average(High / Low, 20) - 1). Sell next bar at marketmatches the rule.Sell this bar at closein a backtest gives the signal close price, but in live trading on daily bars that price is no longer available.- Partial exits: named orders with a share count, for example
Sell ("T10") CurrentContracts / 2 shares next bar at market. Check that the next partial exit is calculated from the remainder, not from the original size. - Selecting stocks by ADR% and by the signs of variant B across the whole universe is done in the portfolio module (Portfolio Maestro, Portfolio Trader). On a single chart the signal is calculated only for Data1.
MetaTrader 5 (MQL5)
- At most MT5 brokers stocks are available as CFDs. The daily bar is built on server time, and for round-the-clock CFDs the daily range is wider than on the exchange. ADR% will come out different, and the 10% threshold will shift.
- EMA:
iMA(..., MODE_EMA, ...). Take the signal from the closed bar (index 1) when a new daily bar appears, so the exit lands on the open. - A partial exit on a netting account closes part of the single position. Round the volume to
SYMBOL_VOLUME_STEP: with a small size, a third of the position can round down to zero. - An EA sees the list of stocks with ADR% of 10% or more only within the broker's instruments. A scan of the whole US market cannot be repeated here.
Where the idea can break
- All results were obtained on winners in hindsight. Financial Wisdom took the 100 best stocks of the year, and Jack Corsellis hand-picked the 60 best breakouts over 46 years. Averages from such samples say nothing about a typical trade.
- The 10% ADR% threshold was named for fast growth stocks. Indices, bonds and most futures have ADR of about 1-2%, so the rule will always choose EMA 20 and stop being adaptive.
- Exiting on a daily close misses an intraday collapse and an overnight gap. The actual loss at exit can be noticeably larger than the distance to the average.
- Recalculating on every bar can loosen the stop just as volatility falls. This follows directly from the SNDK example and can be either a plus or a minus.
- Variants B and C contain our thresholds: fractions, extension above EMA 10, signs for SMA 50, the early sale threshold. The authors themselves decide these questions by looking at the chart.
- In the Financial Wisdom retelling Qullamaggie uses simple averages, while the channel's own rule uses exponential ones. On fast stocks the difference between SMA 10 and EMA 10 can change the exit day.