How we trade — the exact method
This is the complete rulebook the system runs on — the same rules, to the number, that produced every trade on our backtested results page. Two questions answered precisely: what makes a stock land on our radar, and what actually pulls the trigger.
Step 1
The universe — what we’re allowed to look at
Once a week we rebuild our list from the entire U.S. market and keep only the names that clear these gates:
- Active and tradable, listed on the NYSE or NASDAQ.
- Ordinary common stock — we drop warrants, preferreds, units, and rights (by symbol shape), and leveraged/inverse funds (by name).
- Liquidity: 20-day average dollar volume of at least
$30,000,000per day. Thin, hard-to-trade names are out.
That leaves roughly 2,000 genuinely liquid stocks.
Step 2
The signal to look — the daily screen
Each market morning we narrow those ~2,000 to about 200 names “in play,” through two independent screens:
50 biggest movers (gainers and losers) plus the top
50 most-active by volume — kept only if they’re in our eligible universe.
This feeds the Breakout engine (gainers) and Mean Reversion engine (beaten-down names).
63-trading-day (~3-month) return
minus the S&P 500’s over the same window, and keep the top 10%
(the top decile). This feeds the Relative Strength engine.
The union of the two screens, capped at 200 names, is the only set of stocks
the engines score that day. Everything else is ignored until it earns its way in.
Step 3
Reading the weather — market regime
We classify the market by the S&P 500’s trailing 20-trading-day return:
≥ +3% is “trending up,” ≤ −3% is
“trending down,” and anything in between is “choppy.” This decides which
engine we lean on (Step 5).
Step 4
The signal to trade — the three engines
Each engine scores every candidate from 0 to 100 and proposes an exact entry, stop, and target. An engine only produces a candidate if all of its trigger conditions hold.
Breakout currently switched off
Looks for: a stock coiled in a tight multi-week range, breaking out on volume.
Every trigger must hold: at least 15 of the last 20
days in a consolidation; ATR(14) ≤ 3.5% of price (tight range); price above the
prior range high, but no more than 5% above it (no blow-off gap); volume pacing
≥ 1.5× the 20-day average for that time of day.
Score (to 100): range tightness (≤30) + volume pace (≤30) + how cleanly it cleared the range, peaking at a confirmed break (≤25) + range width (≤15).
Trade plan: enter at price; stop = range high − 1.5×ATR;
target = 2× the risk above entry.
Full transparency: in three years of backtesting this engine fired zero qualifying trades, so it’s in the system but disabled (weight 0) until we understand why. It has never contributed a live trade.
Mean Reversion — fixed-target exit
Looks for: a quality name knocked down too far, too fast, starting to snap back.
Every trigger must hold: at least 220 days of history; price
above its 200-day moving average (no falling knives); RSI(14) < 30
for at least 2 consecutive days (oversold); today’s low higher than yesterday’s
low; and price has reclaimed yesterday’s close (the intraday turn).
Score (to 100): depth of oversold (≤30) + strength of the reclaim (≤25) + how much higher the low held (≤20) + proximity to the 200-day line (≤15) + positive 200-day slope (10).
Trade plan: enter at price; stop = today’s low − 1.25×ATR;
target = 2× the risk. Fixed exit — whichever of target or stop hits first.
(A reversion bounce fades with time, so we take the move and don’t overstay.)
Relative Strength — trailing-stop exit
Looks for: one of the market’s strongest names pulling back to support and turning up.
Every trigger must hold: in the top 10% (90th percentile) of
3-month relative strength vs the S&P 500; price currently within 3% of its
20-day moving average (a pullback, not an extension); today’s low held near the 20-day line;
and price reclaimed yesterday’s close.
Score (to 100): relative-strength rank (≤40 — 90th percentile scores 20, the very strongest scores 40) + proximity to the 20-day (≤20) + reclaim strength (≤20) + volume drying up on the pullback (10) + the low holding the 20-day (10).
Trade plan: enter at price; initial stop = 20-day line − 1.5×ATR.
Exit is a trailing stop, not a fixed target: once the trade is up
1R (one unit of risk), the stop jumps to breakeven; after that it ratchets up each
day to (that day’s close − 2×ATR) and never moves down. There is no
profit target — we let leaders run and let the rising stop decide when to leave.
Step 5
Choosing the trade — routing and the gate
Each engine’s score is multiplied by a regime weight — the right tool for the weather. These weights are set from the backtest’s own per-regime results (e.g. Mean Reversion actually loses money in uptrends, so it’s switched off there):
| Engine | Trending up | Trending down | Choppy |
|---|---|---|---|
| Breakout (off) | 0.0 | 0.0 | 0.0 |
| Mean Reversion | 0.0 | 1.3 | 1.1 |
| Relative Strength | 1.2 | 1.2 | 0.9 |
The highest regime-weighted score is the day’s trade — but only if it clears
50. If nothing clears 50, we take no trade that day and stay
parked in the S&P 500. If a second, different name clears 85, it ships as a
bonus second trade.
Step 6
Position size and idle cash
- Every trade risks 1% of the account (the distance from entry to stop), capped so no single position exceeds 5% of equity.
- When we’re not fully deployed, idle cash isn’t sitting in cash — it’s parked in the S&P 500 (keeping a small 1% buffer), so the account stays invested by default and only steps aside for a specific trade.
This is an automated, paper-trading experiment. The performance figures it references are backtested and hypothetical. Nothing here is investment advice or a recommendation to buy or sell any security.