Indicators don't trigger trades. Price action does.
Every retail trading platform shows you indicators — RSI, MACD, ATR, moving averages — as if they were signals. They aren't. Indicators are filters. They tell you which stocks deserve your attention this week. But the moment you enter a trade is determined by something indicators can't see: price action.
A 20-day breakout. An inside-day coil that pops. A pullback to the 20-EMA that bounces on 2× volume. A VWAP reclaim at 10:45 AM on a down day. A liquidity sweep through a resting-order shelf and a hard rejection back into range. These are the moments that determine whether a trade works or not — and not one of them is visible on an indicator panel.
Swing Deck is built around the distinction: indicators filter the universe; price action triggers the entry. This post explains why that separation matters, what each layer is responsible for, and how v5.0 encodes it into a dashboard signal you can read in under two seconds.
The failure mode: "RSI is oversold"
Every losing retail trader has said some version of this out loud: "I bought it because RSI was oversold."
RSI is a derivative of price. By the time it prints a reading, the move has already happened. An "oversold" signal tells you price has fallen hard — it says nothing about whether the fall is finished. Ask anyone who bought $TSLA on RSI 22 in 2022 how that worked out. The signal was right. The trade wasn't.
The same holds for every other popular indicator:
- MACD crossover: by the time the histogram flips, momentum has already shifted — and often the move is two-thirds complete.
- Moving-average cross: a 50-day crossing the 200-day is a report card on the last six months, not a forecast of the next six.
- ATR expansion: useful for sizing stops, but it tells you the move already happened — not whether the next bar goes up or down.
Indicators are report cards. They're accurate summaries of what just happened. Trading them as signals is like driving by only looking in the rear-view mirror.
The framework: Filter layer → Trigger layer
Professional traders with decades of P&L don't abandon indicators — they re-scope them. Indicators become the filter layer: an answer to the question "does this ticker even deserve my attention this week?" Price action becomes the trigger layer: an answer to "is right now the moment?"
Two very different questions. Two very different tools.
◆ THE DIVISION OF LABOR
| FILTER | Indicators (RSI, MACD, ATR, EMA stack, VIX, sector trend) answer which tickers qualify to trade this cycle. Produces a grade (A–F). Indicators as intelligence. |
| TRIGGER | Price action (breakouts, coils, pullback-bounces, divergences, sweeps, engulfings, gap-and-go) answers when the moment is. Only fires on a qualified filter. Price action as the trigger. |
| PILLARS | 13 risk gates (sector caps, drawdown firewall, earnings blocker, ATR stop). Even a qualified, triggered setup gets vetoed if it would breach a pillar. Pillars as armor. |
The three layers compose. A filter without a trigger is a screener that generates noise. A trigger without a filter is retail chart-pattern trading (catching falling knives). Pillars without either are portfolio theory PDFs nobody reads. Stack all three and you have a trading system.
What "price action" actually means — 11 concrete primitives
"Price action trading" sounds mystical until you specify it mechanically. Here are the 11 primitives in Swing Deck v5.0 — each one a pure function that takes bars and returns {fired, strength 0–100, narrative}:
| PRIMITIVE | PATTERN | EDGE |
|---|---|---|
| inside_day | Today's range inside yesterday's | Coil — volatility contraction precedes expansion. |
| n_day_breakout | Close above prior 20-day high | Turtle / Dunn Capital classic. Best single PA pattern by backtest. |
| volume_expansion | ≥ 1.5× the 20-day avg volume | Conviction meter. Stack it with any directional primitive. |
| pullback_bounce | Tagged 20-EMA, bouncing on volume | Trend continuation. You get the dip without catching the knife. |
| vwap_reclaim | Lost & reclaimed intraday VWAP | VWAP = institutional flow axis. Reclaim = control shift. |
| bearish_divergence | Price HH, RSI LH | Exhaustion — vetoes a naive long breakout. |
| bullish_divergence | Price LL, RSI HL | Buyers absorbing even on a new low — reversal precursor. |
| liquidity_sweep_reclaim | Punched a level, snapped back | Stop-hunt pattern. Institutions raid retail stops then reverse. |
| bull_flag | Sharp advance + tight flag + break | Continuation — leader pauses, then resumes. |
| engulfing_reversal | Today's body engulfs yesterday's | Clean handoff between buyers and sellers. |
| gap_and_go | Gaps above yday high, holds top of range | Buyers never gave back the open — strongest daily signal. |
| key_level_reclaim | Broke support, stayed below, reclaimed on volume | Structural — not a wick. Buyers had to work for it. |
Every one is a pure function. Every one has a backtestable definition. Every one has a "strength" score 0–100 so the engine knows the difference between a 9/100 technicality and an 80/100 textbook fire. And every one is treated as signal only after the filter layer has confirmed the ticker is worth watching at all.
Walkthrough: a real v5.0 firing, end to end
Take $COIN on 23 April 2026. Live audit data:
COIN close: $197.93 intraday high: $205.73
20d average volume: 10.6M
today's volume: 8.66M (1.46× avg)
Filter layer:
Trend confirmation ████████░░ 8/10 (above 50EMA, HH/HL intact)
Momentum ██████░░░░ 6/10 (RSI 58, MACD flat)
Volatility context █████████░ 9/10 (ATR expansion healthy)
Volume profile █████████░ 9/10 (session-to-date absorption)
...
GRADE: B SCORE: 84 FILTER: PASS
Trigger layer (14 primitives ran):
inside_day no fire
n_day_breakout no fire (below 20d high)
volume_expansion no fire (1.46×, threshold 1.5×)
pullback_bounce no fire
bearish_divergence no fire
liquidity_sweep_reclaim FIRED strength=80
→ Liquidity sweep (bearish) — price swept above $205.50
then rejected (-8.4%).
Pillar check:
All 13 clear.
Decision: EXIT / AVOID (bearish sweep on owned position)
Read that output like a trader. The filter layer says COIN is a B-grade ticker worth looking at (not an A, but not a dog). A raw screener would have put it on your watchlist because the score is ≥ 80. But the trigger layer — specifically, liquidity_sweep_reclaim in bearish mode — says buyers tried to break $205.50 and got smashed back to $197.93. An 8.4% rejection on above-average volume is not retail profit-taking. That's institutional distribution at resistance.
If you'd held COIN long, v5.0 would light the card in TIGHTEN and push you to raise the stop. If you'd been watching it as a short candidate, this is the trigger to size up. Either way, the framework tells you to act. One primitive firing at strength 80 is a story. The system knows the story. You only had to glance at the dashboard.
Why the indicator-only approach keeps failing
There's a specific reason indicator-only systems fail, and it has nothing to do with the quality of the indicators. It's structural.
Indicators are smoothers. They average price across time. Good indicators reduce noise; great indicators extract signal from it. But the mathematical operation of smoothing has a necessary side effect: it loses the exact moment things change. If RSI takes 3 bars to go from 70 to 74, you don't know whether the first bar did most of the work or the last one did. Smoothing blurs sequence. Sequence is what price action preserves.
This is why "hybrid" traders (the quiet pros, not the Twitter gurus) always stack the two layers. The indicator tells them what the environment is. The price-action reading tells them what just happened right now, at this bar, at this level, with this volume. One without the other is either blurry analysis or noisy chasing.
The Swing Deck v5.0 dashboard — single health state per position
The engine would be worth nothing if you had to read 11 indicator cells plus 11 price-action primitives plus 13 pillar states per position per refresh. Nobody can scan that across a portfolio. So the UI condenses everything into one status light per ticker, using six states:
- ARMED — filter pass + trigger fired + pillars clear → enter now.
- HOLD — owned, healthy, no action needed.
- WATCH — qualified, waiting for a trigger.
- TIGHTEN — owned, degrading — raise stop / reduce size.
- EXIT — owned, hard pillar breach or score collapse — rotate to cash.
- COLD — filter fail — don't even look.
Click Focus Mode in the action strip and the dashboard collapses to only ARMED / TIGHTEN / EXIT positions. Most days, that list is empty. Discipline is doing nothing when nothing needs doing. The other days, it's three tickers and the rationale is right there in the tooltip.
The habit
Swing Deck v5.0 also sends a morning briefing email at 6:25 AM MST on weekdays. One screen: portfolio score, state counts, every ARMED / TIGHTEN / EXIT ticker with its reason and the primitive that fired. If nothing needs action: "◆ ALL POSITIONS HEALTHY · NOTHING REQUIRES ACTION" — discipline is doing nothing.
That email is the ritual. Open it, glance, act if needed, close it, get on with your day. The framework does the work. You do the deciding.
See it on your own portfolio
Free tier runs the full 11-pt filter, 11 price-action primitives, and 13 pillars on up to 5 tickers. The morning briefing and aggregated consensus unlock on Premium.
Download →