RANKFORGE RankForge v1.0 - Opportunity Rotation/Ranking
This app's own Top-Opportunities scoring (Direction/Confidence/Risk composite) identifies a rotating basket of stocks that outperforms simpler alternatives. Version v1 - status ACTIVE - daily evaluation cadence.
A genuinely NEW engine (not a renamed ST-04) - calls this app's real bullyeah_engine.scoring.build_full_score() opportunity engine, the same one behind the public Top Stocks page, on a cost-bound top-10 shortlist per cycle.
Setup Score: 0.35xOpportunity + 0.20xRevisionMomentum(neutral) + 0.15xRelativeStrength + 0.15xTrendConfirmation + 0.15xRiskAdjustment.
Hold zone: an incumbent stays while its own current score is still >= the Tier C floor (54) - see rankforge.py's evaluate_exits docstring for what's simplified vs. the spec's full replacement-margin state machine.
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 (Insufficient Evidence):
Needs at least 15 completed trades AND 15 independent entry days before any read is meaningful (spec section 39.1) - 0 trades so far. No significance testing applied above that floor either - see module docstring for what's deferred (PBO, Deflated Sharpe, bootstrap CIs, walk-forward holdout).