← All ideas
#016Regime filterPosition

Weinstein stages: a regime filter and a breakout in Stage 2

A classifier of the four cycle stages based on weekly 10, 20, 30 and 40 SMAs. Buying is allowed only in Stage 2, entry on a base breakout with volume twice the average, exit below the 30-week average.

Chart Fanatics · Ted Zhang · Watch video

Markets

Stocks, Indices, Commodities, Crypto, Bonds, Forex

Timeframe

W1, D1

Data

OHLC, Volume

Rules

Partly formalised

Difficulty

Medium

Status

Untested

Some rules were added by us and are marked in the text.

TradingView ports directly
EasyLanguage ports directly
MetaTrader 5 has pitfalls

Idea in brief

Stan Weinstein described a cycle that every asset goes through. Stage 1: a base after a decline, price moves in a range, the 30-week average flattens. Stage 2: an advance, the average turns up, each low is higher than the previous one. Stage 3: a top, the average flattens again, price chops around. Stage 4: a decline below a falling average. Buying makes sense only in Stage 2, ideally at the moment of the breakout from the base.

The card has two versions of the same approach. Ted Zhang of Revere Asset Management builds a classifier on four weekly simple averages (10, 20, 30, 40) and uses it as a market regime filter for any market: stocks, ETFs, crypto, metals, bonds, currencies. Jack Corsellis retells Weinstein's book with entry and exit rules: a base breakout on volume, a stop-limit order, a 4-6% stop and an exit below the 30-week average.

Why it might work

Weinstein's logic is that large participants accumulate positions in Stage 1 and distribute them in Stage 3. In both stages price moves without direction, and a trader gets a series of small losses. Ted puts this through an old idea: the first and last eighth of a move are worth giving away because they are the most expensive, and the money is made on the middle six eighths. The averages here are not a forecast but a way to smooth price structure and see where the market is in the cycle.

Volume matters because of an asymmetry. An advance needs buyers, so a breakout from a base without a volume spike is suspicious. A decline does not need buyers, price falls under its own weight, and a downside breakout does not have to be confirmed by volume.

Neither Ted nor Jack gives statistics on the classifier or on the breakouts. All examples in the videos (ARKK, ANF, bitcoin, silver in the 1970s, uranium) were picked in hindsight. Testing has to start from scratch.

Rules

Stage classifier (Ted, weekly bars)

// signal at the week's close
MA10 = SMA(Close, 10)
MA20 = SMA(Close, 20)
MA30 = SMA(Close, 30)
MA40 = SMA(Close, 40)                        // author: simple averages, 30 and 40 are key

// slope of the average. The author describes the rate of change in words, without numbers
Slope(MA)   = (MA - MA[4]) / ATR(14)          // Finetiq: 4 weeks, in units of weekly ATR
Rising(MA)  = Slope(MA) >  0.25               // Finetiq: starting threshold for a "flat" average
Falling(MA) = Slope(MA) < -0.25

// price structure: higher highs and higher lows (author)
// Finetiq: swing point = a week whose High (Low) is above (below) the two weeks to the left and the two to the right
UpStructure   = last SwingHigh > previous AND last SwingLow > previous
DownStructure = last SwingHigh < previous AND last SwingLow < previous

Stage2 = Close > MA10 AND Close > MA30 AND Close > MA40
         AND MA10 > MA20 AND MA20 > MA30 AND MA30 > MA40
         AND Rising(MA30) AND Rising(MA40)
         AND UpStructure

Stage4 = Close < MA10 AND Close < MA30 AND Close < MA40
         AND MA10 < MA30 AND MA30 < MA40
         AND Falling(MA30) AND Falling(MA40)
         AND DownStructure
// author: in the Stage 4 scheme Ted names the order 10 < 30 < 40 without MA20, and for Stage 2 the order 10 > 20 > 30.
// On the ARKK example price is below all four averages. A variant for testing: add MA10 < MA20 AND MA20 < MA30

// everything in between is a transitional stage
IF NOT Stage2 AND NOT Stage4
    Stage = 1, if the last defined stage was 4
    Stage = 3, if the last defined stage was 2                  // Finetiq: labeling based on the previous stage

// the minimum for buying that Ted named explicitly
LongAllowed = Close > MA10 AND Close > MA20 AND Close > MA30 AND Close > MA40
              AND MA10 > MA20 AND MA20 > MA30
// no trading in Stages 1 and 3, shorts only in Stage 4 (author)

Ted notes two more signs. In Stage 1 the averages converge, cut through price, and the 10-week average moves back above the 30-week one. On long timeframes Ted looks at the chart on a logarithmic scale. The cycle is fractal: on daily bars Ted uses 10- and 20-day averages together with the 30 and 40 weeks.

Variant B. Weinstein's breakout (as retold by Jack)

// Weinstein's simple classifier: a single average
MA30 = SMA(Close, 30) weekly         // author: the same as SMA 150 on daily bars

// the author's prohibitions: do not buy below MA30 or while MA30 is falling, even if price is above it
BuyAllowed = Close > MA30 AND NOT Falling(MA30)

// base and pivot
Pivot = Highest(High, 13)[1]                   // Finetiq: top of the base over the last quarter
Base  = NOT Rising(MA30) AND NOT Falling(MA30) // Finetiq: the average is flat in the week before the breakout

IF BuyAllowed AND Pivot > MA30
    BUY STOP at Pivot LIMIT Pivot * 1.01        // author: stop-limit, limit 1% above the pivot
// Base = breakout from Stage 1 (investor), NOT Base = continuation breakout in Stage 2 (trader)

// after the breakout week closes
IF Volume < 2 * Average(Volume, 4)[1]           // author: breakout week ≥ 2× the average of the past month
    EXIT AT NEXT BAR OPEN                       // author: weak volume on the breakout, sell quickly
// daily bars: breakout day volume ≥ 2× the average of the past week (author)

Stop and exit

// initial stop
InitialStop = last SwingLow below the pivot          // author: below significant support
IF (Pivot - InitialStop) / Pivot > 6%
    InitialStop = Pivot * 0.95                       // author: 4-6% below the breakout; Finetiq: we use 5%
// do not place the stop exactly on a round number: 99.95, not 100 (author)

// trader (2-4 months, 80% of trades from continuation breakouts)
IF Close < MA30 THEN EXIT AT NEXT BAR OPEN          // author: do not stay below the 30-week average
pullbacks under 7% are not a reason to exit          // author
after a new high above the previous SwingHigh
    StopLoss = last SwingLow - offset               // author: stop below the previous higher low

// investor (up to 12 months, 80% of trades from Stage 1 breakouts)
half the position on the breakout, half on a pullback to Pivot   // author
hold while Close > MA30 and MA30 is rising                       // author
the same trailing stop below higher lows                         // author

// Ted's exit: we do not hold the whole of Stage 2
IF Stage <> 2 for two weeks in a row THEN EXIT AT NEXT BAR OPEN   // Finetiq: formalization of "rotating into the next base"

For the trader, Weinstein also has an earlier exit: a break of a trendline drawn through three points. Any line connects two points, and the author considers only a line with three touches significant. We do not carry it into the pseudocode: finding lines requires a separate algorithm.

Parameters

Parameter Value Source
Classifier timeframe week author
Ted's averages SMA 10, 20, 30, 40 weeks author (Ted)
Weinstein's average SMA 30 weeks, about SMA 150 days author
Minimum for buying price above all averages, 10 > 20 > 30 author (Ted)
Slope window of the average 4 weeks Finetiq
Flat average threshold 0.25 of weekly ATR(14) over 4 weeks Finetiq
Swing point 2 weeks to the left and right Finetiq
Pivot 13-week high Finetiq
Limit above the pivot 1% author
Breakout week volume at least 2× the 4-week average author
Breakout day volume (Weinstein) at least 2× the average of the past week author
Jack's volume average 30 bars on any timeframe community (Jack)
Initial stop below the swing low, otherwise 4-6% below the pivot author
Trader exit close below the 30-week SMA author
Pullback to ignore under 7% author
Trailing stop below the previous higher low author
Investor buying half on the breakout, half on the pullback author
Exit on stage change 2 weeks outside Stage 2 Finetiq

What to test

  1. Does the filter add anything beyond a simple trend. Take a simple system (buy on a close above the 20-week high) and run three versions: no filter, with the condition Close > MA30 AND MA30 rising, and with Ted's full classifier. If the full classifier is not better than a single average, the extra conditions only reduce the number of trades.
  2. Order of the averages. Compare the full order 10 > 20 > 30 > 40 with Ted's minimum (price above all averages, 10 > 20 > 30). The second turns on earlier and should catch more of the move at the cost of more false stages.
  3. Parameter neighborhood. Slope window of 2, 4 and 8 weeks, threshold of 0.1, 0.25 and 0.5 ATR, averages 26/35/45 instead of 30/40. If the share of weeks in Stage 2 and the result jump sharply between neighboring values, the threshold is overfitted.
  4. Volume on the breakout. Split breakouts into three groups: volume below 1.5×, from 1.5× to 2×, and above 2× the average. Test Weinstein's claim that breakouts without volume are worse.
  5. Two exits. The trader exit (4-6% stop and a close below MA30) versus the investor trailing stop below higher lows and versus Ted's exit on a stage change. Look at the average trade, the share of profit given back and the duration.
  6. Weeks versus days. SMA 30 weeks versus SMA 150 days. The averages will not match because of holidays and partial weeks. Check how far apart the stage change dates are.
  7. Stop-limit on gaps. Calculate the share of breakouts where the week opened above the pivot + 1% and the order was not filled. Compare how they moved afterwards with the filled ones.

Platform notes

TradingView (Pine Script)

  • A strategy on a weekly chart calculates the signal at the week's close and fills at the next week's open, as in the rules. If you execute on daily bars, take weekly values without looking ahead: request.security(syminfo.tickerid, "W", expr[1], lookahead = barmerge.lookahead_on).
  • Stop-limit: strategy.entry with both stop and limit set. The order stays active until canceled, so remove it once the pivot is outdated.
  • The warm-up is long: 40 weeks for the average plus the slope window. A test over several cycles needs 15-20 years of weekly history, and its depth depends on the subscription plan.
  • On continuous futures with subtraction back-adjustment, percentages are distorted. A slope in ATR units, as in the rules, protects against this, a 4-6% stop does not.

MultiCharts and TradeStation (EasyLanguage)

  • The classifier is easiest to calculate on a weekly chart: Average(Close, 30) and Highest(High, 13)[1]. If you trade on daily bars, the week is added as a second data stream (Close of Data2), and you need to make sure the closed week is used.
  • Buy next bar at Pivot stop lives for one bar. On a weekly chart the order is sent every week while the pivot is valid. The 1% limit is easier to emulate in a backtest with a check: if the week opened above the pivot + 1%, skip the trade.
  • AvgTrueRange is a simple average of TR. With the slope threshold, this gives slightly different stage change dates than in Pine. To match, calculate the Wilder ATR yourself.
  • Stop as a price, not money: Sell next bar at InitialStop stop. SetStopLoss is set in currency and will not account for the round number rule.

MetaTrader 5 (MQL5)

  • The volume rule needs real volume. CFDs on stocks and indices in MT5 only have tick volume (iTickVolume), and "2× the average" on it is a different condition. Real volume (iRealVolume) exists only for exchange-traded instruments.
  • A broker's weekly bar opens on server time. At brokers with short Sunday bars, weekly values barely suffer, but the 150-day SMA on daily bars is distorted. To match the source, calculate on W1.
  • Take weekly average values from the closed bar (shift 1), otherwise the classifier will see an unfinished week in history.
  • The depth of weekly history for CFDs is often less than 10 years. For a 40-week average with a slope, the first year goes to warm-up.

Where the idea can break

  • Neither video has a single test. There are no statistics, the examples were picked in hindsight, and the Chart Fanatics episode includes partner ads.
  • The "flat" average thresholds, the slope window and the price structure definition are ours. They determine how many weeks fall into Stage 2, and the result can change a lot depending on how they are chosen.
  • Long averages lag. By construction, the classifier gives away the start and end of a move. On V-shaped reversals (Ted cites the COVID crash), Stage 2 turns on late.
  • A breakout from a base often fails. Ted shows Moderna: after a failed breakout, the stock fell another 86%. Without a stop, the regime filter does not protect.
  • The weekly signal is rare: a few trades a year on one symbol. A sample needs dozens of instruments, and the top level of the method (market first, then group, then stock) requires index and sector data.
  • The 4-6% stop and 7% pullbacks are set in percent for stocks. In markets with different volatility (crypto, bonds), the same percentages mean a very different risk.

Sources

Author's claims

These figures and statements are the author's. We have not verified them.

  • In the video intro: Ted managed $50 million at age 25, and Revere Asset Management now has more than $400 million.
  • According to Ted, one Stage 2 can have up to three entry attempts. The first two end in a small loss or at breakeven, and the successful one often gives 20-100%.
  • Weinstein as retold by Jack: strong breakouts almost never pull back more than 4-6% below the breakout point.

Related ideas

Updated: 2026-09-10