FRAMEWORK23 April 2026 · 9 min read

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:

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_dayToday's range inside yesterday'sCoil — volatility contraction precedes expansion.
n_day_breakoutClose above prior 20-day highTurtle / Dunn Capital classic. Best single PA pattern by backtest.
volume_expansion≥ 1.5× the 20-day avg volumeConviction meter. Stack it with any directional primitive.
pullback_bounceTagged 20-EMA, bouncing on volumeTrend continuation. You get the dip without catching the knife.
vwap_reclaimLost & reclaimed intraday VWAPVWAP = institutional flow axis. Reclaim = control shift.
bearish_divergencePrice HH, RSI LHExhaustion — vetoes a naive long breakout.
bullish_divergencePrice LL, RSI HLBuyers absorbing even on a new low — reversal precursor.
liquidity_sweep_reclaimPunched a level, snapped backStop-hunt pattern. Institutions raid retail stops then reverse.
bull_flagSharp advance + tight flag + breakContinuation — leader pauses, then resumes.
engulfing_reversalToday's body engulfs yesterday'sClean handoff between buyers and sellers.
gap_and_goGaps above yday high, holds top of rangeBuyers never gave back the open — strongest daily signal.
key_level_reclaimBroke support, stayed below, reclaimed on volumeStructural — 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=80Liquidity 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:

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 →
Swing Deck v5.0 — Indicators filter the universe. Price action triggers the entry.
← Prev: The 13 risk pillars All posts →