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

FieldWhat 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.