REBOUNDEDGE ReboundEdge v1.0 - Oversold Recovery
A quality-uptrend stock that becomes acutely oversold, then shows a genuine reversal signal, tends to recover over the next several sessions. Version v1 - status ACTIVE - daily evaluation cadence.
Oversold magnitude is now a 0-100 SCORE from up to 5 independent conditions (any one contributes) instead of one mandatory exact-band Z-score - the old ST-05's single biggest activity bottleneck.
Reversal confirmation accepts ONE strong trigger OR TWO of six moderate triggers (spec's own relaxation vs. ST-05's single fixed trigger price).
The one engine allowed to keep operating in an Adverse regime (mean reversion thrives on exactly the dislocations an adverse tape produces) - only Disorderly suspends it.
No trailing stop, no partial exits - exits at the stop, min(20-day MA, +1.5R) target, or the 8-session max hold.
Known limitations:
- No real Protected-NBBO/executable-quote feed - synthetic liquidity-tier spreads used instead (same substitution as the Day-Trade Lab).
- No true 9:45am ET intraday primary-entry checkpoint or 10:15-11am secondary pullback window - the NEXT session's daily-bar OPEN price is used as the sole executable-price basis for every engine (strictly no-look-ahead, but this lab is uniformly daily-bar-driven, not intraday).
- Earnings-calendar feed (Finnhub /calendar/earnings) powers DriftEdge's post-event entries and the 2-session earnings-blackout gate on TrendForge/ReboundEdge/RankForge - requires FINNHUB_API_KEY; degrades to no-op (no blackout, DriftEdge finds no candidates) if absent.
- No qualifying-event feed beyond earnings for DriftEdge (guidance/contract/regulatory/product-update events per the spec's fuller event taxonomy aren't in this app's data layer).
- No analyst-revisions or fundamental/valuation feed - every engine's revisions/valuation Setup Score component is held at a neutral 50 rather than fabricated (documented per-engine in each engines/*.py module).
- RegimeShield's 5-tier state is derived from this app's existing 3-way Risk-On/Neutral/Risk-Off classifier + volatility/breadth flags, not an independently-scored regime model (see scoring.regime_shield_state).
- Correlation controls use pairwise correlation computed directly from each symbol's own trailing 40-session daily log returns (see correlation.py) - a genuine but shorter/noisier sample than a dedicated vendor correlation matrix.
- HistoricalTwin is now built (packages/shared/bullyeah_engine/swing_lab/learning.py) but stays observer-only (a genuine 0-delta) until an engine has 30+ closed episodes with a similar recorded component snapshot, per spec section 18's own gating rule.
- RawSwing's 'raw Swing Direction' is a purely technical proxy (NearHighRatio/TrendEfficiency/residual momentum), not a second call to the real opportunity-scoring engine RankForge uses - see engines/controls.py's module docstring for why running that expensive call twice per cycle wasn't worth it for a lightweight comparison baseline.
- Equal-Weight Basket / Industry ETF / SPY benchmark curves (§19's passive comparison half) ARE now built (see swing_lab/benchmarks.py) but are pure buy-and-hold return calculations, not paper-trading engines - they show up as their own 'Passive Benchmarks' dashboard section, not in ENGINE_SPECS/ALL_ENGINE_ORDER.
- Full statistical-validation suite (Probabilistic/Deflated Sharpe, PBO, moving-block bootstrap, walk-forward holdout) is deferred - see evidence.py.
This is a research hypothesis, not a proven profitable methodology. See docs/strategy_lab_swing_trade_plan.md for the full repo-impact plan.
Evidence (Promising Candidate (LITE_V1 descriptive only)):
Win rate 13.4%, avg R-multiple 0.00, expectancy 0.00R per trade.
N=82 closed trades, 22 distinct entry days - descriptive stats only. This LITE_V1 label does NOT satisfy the full spec 39 gates (holdout protection, Probabilistic/Deflated Sharpe, matched-control outperformance, quarterly-block consistency, etc.) - see module docstring.
| Tier A / Tier B risk budget | $35 / $20 (flat dollars) |
| Gap buffer (sizing multiplier) | 1.25x |
| Max position notional | $2,500 |
| Max gross exposure | $8,000 (80% of $10,000) |
| Max modeled open risk | $140 (1.4%) |
| Weekly realized-loss limit | $210 (2.1%) |
| Drawdown pause threshold | $600 (6% below prior EOD peak) |
| Tier thresholds (A / B / C floor) | 66.0 / 58.0 / 54.0 |
| Max concurrent positions (this engine) | 3 |
| Config hash | 2ebcf9a9ac14d714 |
| Feature library version | swing_features_v1 |
| Symbol | Tier | Shares | Entry Price | Active Stop | Entered |
|---|---|---|---|---|---|
| CRM | TIER_B | 1.37 | $240.80 | $231.99 | 2026-09-25 |
No signals queued for the next session's open right now.
| Symbol | Tier | Entry | Exit | P/L | Reason |
|---|---|---|---|---|---|
| GOOGL | TIER_A | $342.56 | $342.26 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| META | TIER_B | $747.94 | $747.26 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| ASML | TIER_B | $1732.33 | $1730.07 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| ASML | TIER_B | $1732.31 | $1729.37 | -0.17% | Reached target (min of 20-day MA / +1.5R) |
| ASML | TIER_B | $1731.97 | $1729.71 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| ASML | TIER_B | $1697.18 | $1694.98 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| ASML | TIER_B | $1697.18 | $1694.98 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| NVDA | TIER_B | $223.04 | $222.84 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| CRWD | TIER_B | $231.77 | $231.47 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| SNOW | TIER_B | $335.85 | $335.41 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| SNOW | TIER_B | $335.85 | $335.34 | -0.15% | Missing data - severe data condition |
| CRWD | TIER_B | $231.77 | $231.47 | -0.13% | Missing data - severe data condition |
| NVDA | TIER_B | $223.03 | $222.83 | -0.09% | Missing data - severe data condition |
| NVDA | TIER_B | $223.03 | $222.83 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| SNOW | TIER_B | $335.85 | $335.41 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| CRWD | TIER_B | $231.77 | $231.47 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| NVDA | TIER_B | $223.03 | $222.83 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| SNOW | TIER_B | $338.83 | $338.39 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| CRWD | TIER_B | $231.77 | $231.47 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| SNOW | TIER_A | $338.90 | $338.32 | -0.17% | Reached target (min of 20-day MA / +1.5R) |
| NVDA | TIER_B | $219.45 | $219.25 | -0.09% | Missing data - severe data condition |
| MSFT | TIER_A | $498.19 | $497.75 | -0.09% | Missing data - severe data condition |
| SNOW | TIER_A | $338.90 | $338.32 | -0.17% | Reached target (min of 20-day MA / +1.5R) |
| MSFT | TIER_A | $497.69 | $497.25 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| NVDA | TIER_B | $219.45 | $219.25 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| SNOW | TIER_A | $334.22 | $333.78 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| MSFT | TIER_A | $497.69 | $497.25 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| NVDA | TIER_B | $219.46 | $219.26 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| MU | TIER_B | $935.84 | $954.38 | 1.98% | Missing data - severe data condition |
| NVDA | TIER_B | $214.24 | $218.29 | 1.89% | Missing data - severe data condition |
| NVDA | TIER_B | $214.24 | $214.04 | -0.09% | Missing data - severe data condition |
| AMD | TIER_A | $502.03 | $501.37 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| AMD | TIER_B | $501.45 | $500.79 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| PLTR | TIER_B | $170.38 | $170.25 | -0.08% | Missing data - severe data condition |
| MU | TIER_B | $938.42 | $934.62 | -0.40% | Missing data - severe data condition |
| SNOW | TIER_B | $329.21 | $328.79 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| AMD | TIER_B | $501.45 | $500.79 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| PLTR | TIER_B | $169.81 | $170.13 | 0.19% | Missing data - severe data condition |
| MSFT | TIER_A | $495.84 | $497.28 | 0.29% | Reached target (min of 20-day MA / +1.5R) |
| PANW | TIER_B | $338.71 | $346.25 | 2.23% | Missing data - severe data condition |
| DDOG | TIER_B | $221.53 | $224.77 | 1.46% | Missing data - severe data condition |
| AAPL | TIER_A | $316.93 | $316.65 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| AAPL | TIER_A | $316.93 | $316.53 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| AAPL | TIER_A | $316.93 | $316.65 | -0.09% | Reached target (min of 20-day MA / +1.5R) |
| DDOG | TIER_B | $221.53 | $221.15 | -0.17% | Missing data - severe data condition |
| SNOW | TIER_B | $336.01 | $335.43 | -0.17% | Reached target (min of 20-day MA / +1.5R) |
| PANW | TIER_A | $338.20 | $330.92 | -2.15% | Missing data - severe data condition |
| SNOW | TIER_B | $336.01 | $335.43 | -0.17% | Reached target (min of 20-day MA / +1.5R) |
| SNOW | TIER_B | $335.94 | $335.50 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| PANW | TIER_A | $337.29 | $336.71 | -0.17% | Missing data - severe data condition |
| PANW | TIER_A | $337.22 | $336.78 | -0.13% | Missing data - severe data condition |
| SNOW | TIER_B | $333.81 | $333.37 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| NET | TIER_B | $278.30 | $295.31 | 6.11% | Missing data - severe data condition |
| SNOW | TIER_A | $333.81 | $333.37 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| ANET | TIER_B | $196.99 | $196.69 | -0.15% | Reached target (min of 20-day MA / +1.5R) |
| ANET | TIER_B | $192.95 | $196.69 | 1.94% | Missing data - severe data condition |
| CRWD | TIER_A | $212.64 | $212.36 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| CRWD | TIER_A | $212.68 | $212.36 | -0.15% | Reached target (min of 20-day MA / +1.5R) |
| NET | TIER_A | $282.49 | $277.88 | -1.63% | Missing data - severe data condition |
| CRWD | TIER_A | $212.64 | $212.32 | -0.15% | Missing data - severe data condition |
| CRWD | TIER_A | $212.64 | $212.36 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| NET | TIER_A | $280.11 | $282.01 | 0.68% | Missing data - severe data condition |
| GOOGL | TIER_A | $340.71 | $342.43 | 0.50% | Missing data - severe data condition |
| AMZN | TIER_A | $256.32 | $259.09 | 1.08% | Missing data - severe data condition |
| GOOGL | TIER_A | $340.51 | $340.41 | -0.03% | Missing data - severe data condition |
| AMZN | TIER_A | $256.44 | $256.08 | -0.14% | Missing data - severe data condition |
| GOOGL | TIER_A | $340.51 | $340.21 | -0.09% | Missing data - severe data condition |
| AMZN | TIER_A | $256.44 | $256.20 | -0.09% | Missing data - severe data condition |
| GOOGL | TIER_A | $340.51 | $340.21 | -0.09% | Missing data - severe data condition |
| AMZN | TIER_A | $256.44 | $256.20 | -0.09% | Missing data - severe data condition |
| AVGO | TIER_B | $369.85 | $369.51 | -0.09% | Missing data - severe data condition |
| AVGO | TIER_B | $369.85 | $369.51 | -0.09% | Missing data - severe data condition |
| AVGO | TIER_B | $369.85 | $369.51 | -0.09% | Missing data - severe data condition |
| DELL | TIER_B | $460.15 | $433.66 | -5.76% | Active protective stop reached (gap-aware) |
| PANW | TIER_B | $375.06 | $374.58 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| GOOGL | TIER_B | $343.85 | $343.55 | -0.09% | Missing data - severe data condition |
| AMZN | TIER_B | $263.95 | $263.71 | -0.09% | Missing data - severe data condition |
| AVGO | TIER_B | $373.69 | $373.35 | -0.09% | Missing data - severe data condition |
| NET | TIER_B | $290.48 | $290.10 | -0.13% | Reached target (min of 20-day MA / +1.5R) |
| AAPL | TIER_B | $311.08 | $310.10 | -0.31% | Missing data - severe data condition |
| AMZN | TIER_A | $262.88 | $261.15 | -0.66% | Missing data - severe data condition |
| PANW | TIER_A | $356.29 | $353.30 | -0.84% | Missing data - severe data condition |
No funnel data yet this session - a new completed session triggers signal generation on the next page visit.
Adaptive learning (spec section 18, HistoricalTwin): component weights retune themselves from this engine's own closed paper trades, and score adjustments only kick in once there's enough evidence. Nothing here ever overrides a hard gate - it only shifts emphasis among components already agreed to matter.
Component weights (base spec weight vs. currently-learned weight)
| Component | Base weight | Learned multiplier | Why |
|---|---|---|---|
| magnitude | 25% | 0.929x | lowered weight multiplier 0.932->0.929 (correlation with realized R-multiple across 77 closed trades: -0.06) |
| medium_long_context | 20% | 0.968x | lowered weight multiplier 0.973->0.968 (correlation with realized R-multiple across 77 closed trades: -0.10) |
| confirmation | 25% | 1.018x | lowered weight multiplier 1.021->1.019 (correlation with realized R-multiple across 77 closed trades: -0.06) |
| regime | 10% | 1.065x | raised weight multiplier 1.060->1.066 (correlation with realized R-multiple across 77 closed trades: +0.13) |
| catalyst_safety | 10% | 1.000x | held weight multiplier 1.000->1.000 (correlation with realized R-multiple across 77 closed trades: +0.00) |
| reward_to_risk | 10% | 1.030x | lowered weight multiplier 1.031->1.030 (correlation with realized R-multiple across 77 closed trades: -0.03) |
Recent learning events
- 2026-09-23T04:19:17.803525+00:00 - weight_update
- 2026-09-22T03:44:17.004461+00:00 - weight_update
- 2026-09-21T16:10:34.190412+00:00 - weight_update
- 2026-09-19T01:45:23.091527+00:00 - weight_update
- 2026-09-18T04:09:05.074128+00:00 - weight_update
- 2026-09-16T04:11:02.157028+00:00 - weight_update
- 2026-09-14T17:13:24.214346+00:00 - weight_update
- 2026-09-10T20:16:38.189944+00:00 - weight_update
- 2026-09-09T17:04:46.503841+00:00 - weight_update
- 2026-09-09T02:45:07.959735+00:00 - weight_update
- 2026-09-04T17:57:09.188564+00:00 - weight_update
- 2026-09-03T17:46:07.965194+00:00 - weight_update