Setup performance: which patterns actually make YOU money
Most traders know their overall win rate. Almost none know which setup types are pulling the average up and which ones are dragging it down. v7.2's Setup Performance subtab fixes that: every BUY journal entry gets classified into one of eight setup types — bull flag, catalyst play, earnings runup, breakout from base, pullback at support, oversold bounce, trend continuation, or "other" — and the subtab shows per-type win rate, expectancy in R, profit factor, best/worst ticker. Plus sample-size bands that keep you honest about which numbers you can trust yet.
The problem with overall win rate
Most journals report one number for everything: "55% win rate, 1.4R average winner, 0.9R average loser." The number is technically correct. It is also useless for the decision that actually matters — which trade should I take tomorrow?
A 55% overall win rate hides what's underneath it. It can be 80% pullback-at-support and 30% catalyst plays-you-shouldn't-be-taking. It can be 90% in one regime and 25% in another. It can be 70% on tickers you've held before and 35% on first-time names. It can be 65% on the first hour of the session and 40% on the rest of the day. The single average is the arithmetic mean of bets you'd love to make more of and bets you'd love to stop making entirely — and you can't tell them apart from the average alone.
The most expensive number in trading is the average win rate that lets you keep taking the trades you shouldn't be taking.
What v7.2 actually does
Every BUY entry in the journal gets classified by a priority-ordered detector (_classifySetup()) into one of eight setup types:
- bull_flag — tight 3-8 bar consolidation off a recent breakout, declining volume, no break of the flag's lower edge
- catalyst_play — entry within 1 session of a detected catalyst (earnings beat, M&A, regulatory clearance, scale-insider buy)
- earnings_runup — entry 1-10 sessions before a known earnings date, no other catalyst, IV expansion present
- breakout_from_base — clean break of a 20+ bar consolidation top with volume >1.5×
- pullback_at_support — entry near a structural support level (primary_S from the levels module), prior trend was up, ADX > 20
- oversold_bounce — RSI < 30 reversal, no other obvious setup, often "I'm catching a knife"
- trend_continuation — in an established uptrend, EMA21 > EMA50 > EMA200, no specific entry trigger beyond "the trend is intact"
- other — everything that doesn't fit. The "I just felt like it" bucket. Important — you want to see how many of your trades end up here
The priority ordering matters. A trade that's both "near a known earnings date" and "near support" gets catalyst_play rather than pullback_at_support — the catalyst is the higher-information label, so we attribute the outcome to the catalyst lens, not the support lens. (This is a calibration choice; you can argue with the order, but you can't argue both labels apply equally.)
For each setup type, the subtab shows:
- Win rate — percent of closed trades that ended above entry net of fees
- Expectancy in R — (win rate × avg winner in R) − ((1 − win rate) × avg loser in R). The single most important number for any setup — it's what each trade is worth in expectation
- Profit factor — gross winners / gross losers. 2.0+ is great. 1.5-2.0 is solid. Below 1.2 is a setup you're paying for the privilege of taking
- Best / worst ticker — the actual ticker that contributed the most P&L and the one that contributed the worst, for that setup type
Sample-size bands — don't believe small numbers
Per-setup math is dangerous below a certain sample size. A "100% win rate on bull flags" reading from 3 trades is noise, not signal. The subtab gates display by sample size:
- n < 5 — hidden entirely. The number isn't useful enough to risk you over-weighting it.
- 5 ≤ n < 15 — shown with a "developing" amber badge. Treat as directional, not conclusive.
- 15 ≤ n < 30 — shown with a "solid" badge. Confident-enough for decisions.
- n ≥ 30 — shown with an "established" green badge. The number is statistically meaningful at swing-trading timescales.
The bands are deliberately conservative. Most retail traders over-trust small-sample wins ("I'm 4-0 on this setup, I love it") and over-trust small-sample losses ("0-3, this setup doesn't work for me"). Both are coin-flip data dressed up as conclusions. The display rules force you to see "developing" rather than "winning" until you've genuinely paid the cost of running 15+ of that setup.
What this actually tells you about yourself
After 50-100 closed BUY entries, the subtab starts saying useful things. A pattern most users see in their first honest look at it:
- One or two setup types where they're genuinely good — consistent 60-70% win rate, expectancy > 0.6R, profit factor > 1.8. These are the bets they should be making more of.
- One or two setup types where they're genuinely bad — 35-45% win rate, expectancy negative, profit factor below 1.0. These are the bets they should stop making.
- A pile of "other" trades whose existence they didn't realize. That's the "I just felt like it" bucket — the trades where no setup applied and they still pulled the trigger. The expectancy on that bucket is almost always negative.
- The aggregate win rate (the single number they were tracking before) lands somewhere in the middle — usually pulled up by the one or two strong setups and dragged down by the rest. Without per-type breakdown, they couldn't see that the strong setups were the actual edge and everything else was friction.
The honest implication: most traders' edge is narrower than they think it is, and what looks like "I'm a 55% trader" is actually "I'm a 75% trader on pullbacks who keeps cancelling that edge with catalyst plays I'm 32% on."
Where to find it + how to use it
Open the dashboard → ③ Performance tab → 🎯 Setup Performance subtab. The view materializes from your journal's closed BUY entries — no extra logging required on your part beyond what you already do. Setup classification runs once per audit cycle for new entries.
Two practical reading patterns:
- Monthly review — first weekend of the month, pull up the subtab. Note any setup type that crossed a sample-size band threshold. Note any that materially changed expectancy. Adjust which setups you're actively scanning for next month accordingly.
- Before adding a new ticker to the watchlist — if the new entry would be (say) a catalyst play, check your historical catalyst-play expectancy first. If you're 30% on catalyst plays with negative expectancy and the new entry is a catalyst play, that's the framework asking you a hard question before you take the trade.
What it explicitly doesn't do
A few honest limitations worth naming:
- It doesn't tell you whether the setups are good in absolute terms. It tells you which setups are good for you. A 70% win rate on pullbacks could mean you're genuinely skilled at reading pullbacks, OR it could mean the market regime you've been trading favors mean-reversion. The subtab can't tell those apart; only your context can.
- It doesn't auto-veto setups. If your expectancy on catalyst plays is -0.3R, the framework will not refuse to let you place catalyst-play orders. The subtab is information; the trade decision stays yours. (Whether to auto-veto bad-personal-expectancy setups is on the roadmap as a deferred item — we're not convinced it's the right answer yet.)
- It doesn't combine setup type with regime. A "pullback at support in a TRENDING regime" is a different bet from a "pullback at support in a CHOPPY regime," and the subtab averages them together right now. Multi-axis breakdown (setup × regime) is a v7.x roadmap item.
- It doesn't handle SELL trades yet. Short setups (or short-side options like long puts and put spreads) get classified separately if at all. The current subtab is BUY-focused; SELL-side per-setup expectancy is a separate piece of work.
The deeper point
Swing Deck's whole pitch is discipline applied to a process. Setup performance is what that looks like applied to the trader's own history rather than to the next trade. Without it, the trader has to trust their gut about which setups work for them — and the gut is famously bad at this, because the trades you remember vividly aren't a representative sample.
Per-setup expectancy is the framework letting you discover what your own data says — with sample-size guardrails so you don't over-trust the noise, with explicit setup-type labels so you can compare apples to apples, with the worst-ticker breakdown so you can see whether a bad setup is one specific ticker tanking the average or a genuine pattern weakness. The trader doesn't have to be intuitive about this anymore. The math is just there.
Most retail tools sell their AI as the edge. Swing Deck sells the discipline of measuring your own edge honestly, then forcing yourself to act on that measurement. Setup performance is the place that happens.
Claim a Founding Slot — $14.50/mo
Part of the v7.2 release. Full release notes from v6.5 through v7.8: /docs/release-notes. Adjacent reading: The 13 risk pillars — what each one actually protects against.
Disclosure: Swing Deck is built and operated by one person. The product is local-first; positions, broker tokens, and journal entries never leave your machine. AI features use your own API keys (BYOK). We don't proxy your data through our servers. Pricing as of 2026-05-17. Past performance is not indicative of future results. Nothing in this post is investment advice; it's a description of what software does. The win-rate / expectancy framings in this post are illustrative — your actual numbers depend on your own trading history.