Skip to main content
Strategy Lab / Swing-Trade / RAWSWING

RAWSWING RawSwing v1.0 - Raw Direction Control

Spec section 19 control: simply buying the strongest raw-direction stocks (no strategy logic) using the same entry timing and risk model as the main engines - answers whether DriftEdge/TrendForge/ReboundEdge/RankForge actually add value over a dumb direction rank. Version v1 - status ACTIVE - daily evaluation cadence.

Equity
$9947.09
Closed Trades
100
Win Rate
21.0%
Evidence Status
Promising Candidate (LITE_V1 descriptive only)
N=100 closed trades

NOT a strategy - a comparison baseline. Ranks the universe by a purely technical composite (NearHighRatio 40% + TrendEfficiency 30% + residual momentum 30%) and buys the strongest names, full stop.

Uses the exact same risk model, gap buffer, correlation controls, and next-session-open fill as every real engine, so any performance gap vs. DriftEdge/TrendForge/ReboundEdge/RankForge is attributable to their actual entry logic, not a different sizing/execution model.

Deliberately excluded from the adaptive-learning layer (learning.py) - a control must stay a fixed, naive baseline for the comparison to mean anything.

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 21.0%, avg R-multiple -0.07, expectancy -0.07R per trade.

N=100 closed trades, 15 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.