Oscillation Leaderboard — reliable dip-cyclers, ranked
The goal is simple compounding: repeated ±10% round trips on stocks that oscillate reliably while net-trending up. The ranking key is net legs/yr — (up legs − down legs) per year of data — because a good oscillator needs both a favorable up/down ratio (quality) and a high leg count (frequency); neither alone is enough. Every row also shows its current price and action price (the next level that would print a threshold event) so you can judge the gap yourself, rather than a computed "signal" telling you what to do. Four gates keep the ranking honest without a weighted score: downtrenders (📉, negative drift) rank last; parabolic runners (🚀, spiked 3x+ from a trailing 12-month low within the last 2 years — one-way regime shift, not a repeatable cycle) rank below steady names; dip-chainers (⛓️, a run of 5+ consecutive down legs, or two-plus runs of 4+ — BUY signals that ride deep underwater) rank between the two; thin histories (🌱, fewer than 10 completed legs) rank just below the proven names. Consecutive down-legs are never treated as failures on their own — a stock that dipped three times before recovering is oscillation richness, until it crosses one of those gates. Investigate any ticker in the chart explorer.
Loading screen…
Leaderboard
Don't see a stock? Open a GitHub issue to request it →
Field Descriptions
| Field | What it means |
|---|---|
| Price | Current price — the last available close. |
| Action | The next price level that would print a ±10% threshold event, based on the
last completed leg's price (not today's price). After a down leg at 100 the next
event is SELL ≥ 110; after an up leg at 110 the next event is
BUY ≤ 99. This is a level to compare against Price,
deliberately not a recommendation — a stock can be a perfectly good buy before it
reaches its Action price; whether and when to act is your decision. |
| % Needed | How far Price has to move to reach Action, signed: negative on a BUY row (price needs to fall), positive on a SELL row (price needs to rise). Click the column header to sort — the names closest to 0% are closest to their next threshold event. |
| Net legs/yr | The ranking key: (up legs − down legs) per year of data. Rewards both a favorable up/down ratio and a high leg count — a ticker that rarely dips but barely moves (e.g. a slow, "safe" oscillator) scores low here just as a ticker that chops constantly near 1:1 does; the surplus is what compounds. |
| Net dips/yr / P(rec) | Context on dip reliability: down→up transitions minus down→down transitions per year, and P(recovery | dip) — the fraction of dips that resolved immediately rather than deepening into another down leg. A ticker can rank well on net legs/yr while still chaining dips often (worth checking before sizing a position). |
| n▲ / n▼ | Raw counts of +10% and −10% legs over the window — the evidence behind every rate above, never hidden. A young listing can show a strong rate on few legs; check n▲ (also see 🌱 thin-history flag below +10 legs). |
| CAGR% | Growth context: annualized return over the lookback. Tickers with negative drift (📉, greyed) are not candidates no matter how much they oscillate — they rank below every trend-positive name. |
| MaxDD% | Volatility context: worst peak-to-trough drawdown over the lookback. The price of admission for the oscillations. |
| 1y run↑% | The parabolic gate: the largest gain from the lowest close in any trailing
12-month window over the lookback — daily closes vs. the trailing low, no
averaging. QQQ/SPY sit around +40%; CIFR's $3 → $25 spike is +700%. At
+200% (3x) or more within the last 2 years the ticker is flagged
🚀, greyed, and ranked below every steady trend-positive name: those ±10% legs
came from a one-way regime shift, not a repeatable dip-cycle. A spike older than
2 years stays on the record but no longer demotes — a ticker that oscillated
cleanly since is judged on its recent behavior, not stale evidence. Thresholds
are configurable (analyzer.parabolic_max_run_up_pct,
analyzer.parabolic_recency_days). |
| ⛓️ Chained dips | A ticker whose down legs chain deep makes each BUY a weak promise — capital rides underwater before the harvest. Flagged (greyed, ranked between steady and parabolic names) when the longest run of consecutive down legs reaches 5 (~−41% compounded from the first leg), or when runs of 4+ have happened twice or more (depth once is an episode; repeatedly is a pattern). Hover the ⛓️ badge on a ticker for its worst-run depth and count. |
| 🌱 Thin history | Fewer than 10 completed legs — not enough evidence for the rates above to mean anything (a new leveraged ETF can print a flattering rate on a handful of legs). Flagged and ranked just below the proven steady names. |
| Recent Δ | Every ±10% threshold crossing in the last 30 days, oldest to newest — e.g. -1↓ -1↓ +1↑ for two down-legs then an up-leg. Based on the actual sequence of events, not calendar days, so it isn't affected by weekends/holidays and naturally shows more badges for an active stock and fewer for a quiet one. |