Idea in brief
The filter answers a question: has the market correction ended, and can breakouts be bought again. William O'Neil, the creator of CANSLIM and founder of Investor's Business Daily, answers it with the follow-through day. Jack Corsellis covers the rule at the end of the first part of a review of the book "How to Make Money in Stocks".
The market is falling. On some day the index stops making new lows and begins a rally attempt: this is day 1. From the fourth day of the attempt we wait for a strong gain in one of the major indices on volume higher than the day before. Such a day says the rally attempt is most likely real. The strongest follow-throughs come on days 4-7. The signal does not mean buying everything at once: it permits starting to buy quality stocks that are breaking out of bases.
Why it might work
O'Neil's explanation is institutional demand. A bounce in the first days after the low is driven by short covering and small purchases. A strong gain on higher volume a few days later shows that big money capable of moving the index has come in. The first three days are skipped to filter out a one- or two-day bounce.
O'Neil's argument is asymmetric: every new bull market started with such a day. The reverse is not true, and Jack stresses this: after a follow-through the market can pull back, and some follow-throughs fail. The video has no statistics, only examples chosen in hindsight. How many follow-throughs did not lead to a rally is unknown.
How it differs from neighboring filters. index-ema-regime is built on monthly and weekly averages and turns buying back on weeks or a month after the reversal. The follow-through day catches the reversal earlier, in the first days of the rally attempt (the strongest on days 4-7, up to the tenth day in Jack's examples, and the card waits up to 25 days), at the cost of false signals. It differs from breadth-regime in its data: it needs only the index and its volume, with no statistics across all stocks.
Rules
Correction and day 1 (Finetiq)
In the video the correction and the rally attempt are described in words: the market is in a downtrend, then comes day 1. In Jack's examples day 1 is a doji near the low, a reversal bar after a gap down, or a candle with a long lower wick. The thresholds below are ours.
// daily index bars: NASDAQ Composite or S&P 500
// community (Jack): the Dow, with its 30 stocks, carries less weight
Correction = Close <= 0.92 * Highest(Close, 63) // Finetiq: 8% below the 3-month high
OR Close < EMA(Close, 21) on 10 closes in a row // Finetiq: variant without a percentage
NewLow = Low <= Lowest(Low, 20) // Finetiq: 20-day low
IF Correction AND NOT Attempt AND NewLow
CandidateLow = Low
IF CandidateLow is set AND NOT Attempt AND Close > Close[1] // Finetiq: first up close after the low
Attempt = TRUE; Day1Low = CandidateLow; DayCount = 1
// variant: count a new-low day that closes in the upper half of its range as day 1
IF Attempt
DayCount = DayCount + 1 on each following bar
IF Low < Day1Low // Finetiq: break of the attempt low
Attempt = FALSE; CandidateLow = Low // this rule is not in the video, the count restarts
Follow-through day (author, thresholds from Jack and Finetiq)
IF Attempt AND DayCount >= 4 // author: starting from the fourth day
Gain = Close / Close[1] - 1
FTD = Gain >= 1.5% // community (Jack): at least 1.5%, preferably 2%
AND Volume > Volume[1] // author: always above the previous day
AND Volume > Average(Volume, 30)[1] // Finetiq: a hard condition; the author says "in most cases"
// Finetiq: 30 days, as on Jack's charts
FTD_Soft = Gain >= 1.5% AND Volume > Volume[1] // variant without the average condition, closer to the author's wording
FTD_Strong = FTD AND Gain >= 2% AND DayCount <= 7 // author: strongest on days 4-7
IF Attempt AND DayCount > 25 AND NOT FTD // Finetiq: an attempt without a follow-through has gone stale
Attempt = FALSE
// in Jack's examples a follow-through also came on the tenth day
Market state for the strategy (Finetiq)
// author: a follow-through permits starting to buy, not buying everything at once
IF FTD
MarketOK = TRUE; FTD_Day1Low = Day1Low; Attempt = FALSE
// when the permission is withdrawn (Finetiq)
IF MarketOK AND Close < FTD_Day1Low // the index fell below the attempt low
MarketOK = FALSE
IF MarketOK AND Close < EMA(Close, 21) on 5 closes in a row
MarketOK = FALSE
// after withdrawal, look for a correction and day 1 again
// at the start of history MarketOK = TRUE if the index is above EMA 21 and not in a correction
// community (Jack): better if the index has reclaimed EMA 21 (Mike Webster: below it the market offers little)
MarketOK_Plus = MarketOK AND Close > EMA(Close, 21)
RiskMult = 0.5 in the first 10 days after FTD, then 1.0 // Finetiq: first positions are smaller
Connecting to other cards in the base (Finetiq)
// example 1: qullamaggie-breakout. There the regime uses daily EMA 10 and 20 of the NASDAQ Composite
Allowed_A = RegimeOK // as in the card
Allowed_B = MarketOK // follow-through day only
Allowed_C = RegimeOK OR (MarketOK AND BarsSince(FTD) <= 10) // the follow-through turns buying on before the averages do
// the card's entry, stop and trade management do not change
// example 2: index-ema-regime, variant B (weekly EMA 10 and 20)
EntryAllowed_FTD = (Uptrend AND NOT CashFlag) OR MarketOK // the follow-through lifts the ban before the averages cross
Parameters
| Parameter | Value | Source |
|---|---|---|
| Index | NASDAQ Composite or S&P 500, the Dow carries less weight | author (one of the major indices), community (Jack: the Dow carries less weight) |
| Correction | 8% below the 3-month high or 10 closes below EMA 21 | Finetiq |
| Day 1 | first up close after a 20-day low | Finetiq |
| Attempt cancellation | break of the day 1 low | Finetiq |
| Start of the follow-through window | day 4 | author |
| Strongest follow-through | days 4-7 | author |
| Waiting limit | 25 days | Finetiq |
| Gain on the follow-through day | at least 1.5%, preferably 2% | community (Jack on O'Neil's rule) |
| Volume | above the previous day | author |
| Volume above average | required in the main version, variant FTD_Soft without it | Finetiq (author: in most cases) |
| Volume average length | 30 days | community (Jack's charts), choice by Finetiq |
| Index above EMA 21 | preferred | community (Jack, per Mike Webster) |
| Permission withdrawal | below the day 1 low or 5 closes below EMA 21 | Finetiq |
| Size after the signal | half the risk for the first 10 days | Finetiq |
What to test
- What happens after follow-throughs. Find all follow-through days over 30-40 years on the NASDAQ Composite and S&P 500 and calculate the index return after 5, 20 and 60 days. Compare with random days inside corrections. Jack's examples are hand-picked, and there are too few of them for conclusions.
- Failure rate. What share of follow-throughs was canceled by a break of the day 1 low within the next 20 days. This is the number of false permissions the strategy will get.
- Threshold neighborhood. Gain of 1%, 1.5%, 2%, 2.5%. First eligible day 3, 4, 5. Correction of 6%, 8%, 10%. Jack says O'Neil's threshold used to be lower, so the best threshold may differ between older and newer history.
- Volume. The "above the previous day" condition versus "above the previous day and above average" versus a version without volume. If volume adds nothing, the filter carries over to CFDs.
- Connecting to a strategy. The breakout strategy from
qullamaggie-breakoutwith the moving average regime, with the follow-through day and with both. See how many trades the filter added in the first weeks after the low and how they ended. - Which index. NASDAQ Composite versus S&P 500 versus a signal on either of the two. O'Neil speaks of one of the major indices, and the choice changes the number of signals.
Platform notes
TradingView (Pine Script)
- If the strategy runs on intraday bars of a stock, read the index via
request.securitywith a daily timeframe, a[1]offset andlookahead = barmerge.lookahead_on. On daily charts take the index's closed bar. - Check whether the index symbol has volume and where it comes from. If it has none, volume is taken from an ETF (QQQ, SPY) or a future, and that is already an approximation.
- Store the attempt state in
varvariables. The day counter must count the index's trading days, not bars of a stock chart with a different schedule. - A strategy trades only the chart symbol. The filter for a basket of stocks is tested one stock at a time.
MultiCharts and TradeStation (EasyLanguage)
- The index is added as a second data stream (
Close of Data2,Volume of Data2). Update the day counter only on new Data2 bars. - Index symbol volume depends on the data provider. Check it against exchange volume for a few dates: if it is volume from a single venue or it is missing, the volume condition loses its meaning.
- On intraday bars in TradeStation, total volume has historically been stored in
Ticks. Calculate the filter on daily index bars. - Calculate the gain from the index's previous close, not from the open. On gaps the difference is large.
MetaTrader 5 (MQL5)
- Index CFDs have only tick volume (
iTickVolume). The "volume above the previous day" condition on it describes quote activity at the broker, not trading volume. Real volume (iRealVolume) exists only for exchange-traded instruments. - The NASDAQ Composite is almost never offered by CFD brokers. NAS100 is the NASDAQ-100, and US500 is close to the S&P 500. Signal dates on them will differ from the examples.
- A CFD daily bar closes on the broker's server time, not at 16:00 ET. The daily gain of a CFD and of the cash index is measured from different closes.
- Take index values from the closed bar (shift 1), otherwise in historical data the signal will see an unfinished day.
Where the idea can break
- The video has no test, only successful follow-throughs from 1978 to 2022. Jack does not show the failed ones.
- The author did not formalize the correction, day 1 or the attempt cancellation. These rules determine which days become signals, and our version may produce dates different from those of IBD.
- The gain threshold has changed: according to Jack, O'Neil's threshold used to be lower, and in the updated version it is about 2%. A threshold fitted on history may not have existed at the time of the signal.
- The signal is rare: corrections happen a few times per decade, so even the 30-40 years of history from test 1 yield on the order of dozens of follow-throughs per index, not hundreds. That is too few for conclusions.
- Index volume has changed over the decades due to electronic trading and new venues. A comparison with the previous day survives this, a comparison with the average does worse.
- The rule is described within a CANSLIM review and is meant for buying leaders out of bases, not for trading the index itself.