# Best Ideas (leading strategies)

Maintainer-curated list of **current leading choices** for research and portfolio assembly.  
When adding a new candidate, document: **name**, **combine rule**, **runner**, **canonical artifacts**, and **headline metrics** (with date window).

**Default combine rule for multi-strategy books:** **Approach B** — on one capital base (default **$100,000**), **sum** each sleeve’s daily dollar PnL at full backtest sizing. Do **not** sum standalone return % columns. See `DYNAMIC_VXX_REGIME_STACK.md`.

---

## Preferred total portfolio (maintainer default · 2026-05)

**Agents:** use this book unless the user explicitly excludes a sleeve. Recorded in `.cursor/rules/best-ideas-stack.mdc` (`alwaysApply`).

| # | Token | Sleeve |
|---|--------|--------|
| 1 | `vxx_regime_stack` | Dynamic VXX Regime Strategy Stack (6 regime sleeves) |
| 2 | `lit4` | S055 + S057 + S059 + S089 (SPY Theta literature) |
| 3 | `vrp` | 4-regime VRP (`pnl_vrp`) |
| 4 | `vxx_long_call` | VXX long 10% OTM tail hedge (~5% of stacked-book PnL) |
| 6 | `macro_aw` | Macro ETF options (8 sleeves, equal-weight: TLT×3, USO×3, DBC, GLD putw) — `--with-macro-aw` |
| 7 | `sector_momentum` | SPDR sector rotation (12-1 momentum, top-3 monthly) — `--with-sector-momentum` |
| 8 | `tactical_aw` | **Tactical All Weather** (SPY/TLT/IEF/GLD/DBC SMA+momentum gates) — `--with-tactical-aw` |
| 9 | `tsmom` | **TSMOM / Managed Futures** (8-asset 3/6/12m blend: SPY,EFA,EEM,TLT,IEF,GLD,DBC,UUP; vol-norm; monthly rebalance) — `--with-tsmom` |
| 10 | `ride_rockets` | **Ride-rockets 50/50** (near_52w_high top25 + ten_rockets top10; monthly S&P PIT) — `--with-ride-rockets` |
| 11 | `johansen_etf` | **Johansen ETF triplet stat-arb** (6 sleeves: top-5 OOS scan + EWA-EWC-IGE; equal-weight) — `--with-johansen-etf` |
| 12 | `orb_zarattini` | **Zarattini 5m ORB** (Opening Range Breakout on Stocks in Play; Zarattini/Barbon/Aziz) — `--with-orb-zarattini` |
| 13 | `ma_slope_intraday` | **MA slope intraday day-trade** (Alpaca 5m; confirm_entry_4b + top-5 + max 20% weight; hold MOC) — `--with-ma-slope-intraday` |

**Combine rule:** **MTM** daily PnL (lit4+VRP margin sim + VXX stack MTM) + **quarterly NAV rebase** (`scale = NAV / $100k` at each calendar quarter open). Sleeves sized off growing equity.

> **RESEARCH UPPER BOUND ONLY.** nav_q scales all 6 sleeves simultaneously at $100k standalone notional on a single account. Combined margin required: $131k mean / $292k peak — 1.3–2.9× the stated capital. This mode cannot be safely executed on $100k. Use `--fund-mode --fund-scale 2.2` for single-account realistic projection (requires $229k account minimum).

**Canonical combine (refresh)**

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000 \
  --mtm --nav-rebalance quarterly \
  --with-vxx-long-call --with-macro-aw --with-tactical-aw --with-tsmom --with-ride-rockets --with-johansen-etf \
  --with-orb-zarattini \
  --with-ma-slope-intraday \
  --out-prefix RenTech/data/logs/best_ideas_stack
```

**Ride-rockets input:** `ride_rockets_5050_standard_daily.csv` from `run_ride_rockets_5050_standard.py` (50/50 near_52w_high top25 + ten_rockets top10). Standalone ~+282% / Sharpe ~0.75 / max DD ~−21% (2016–2026). Default fund weight **6%**.
**Macro AW input:** `macro_aw_options_portfolio_eq_daily.csv` (`PORTFOLIO_EQUAL_WEIGHT`) from `macro_aw_options_portfolio.py --allocation equal_weight`.

**Sector momentum input:** `sector_momentum_standard_daily.csv` + `sector_momentum_standard_rebalances.csv` from `run_sector_momentum_standard.py` (or `--run-sector-momentum` on combine / export).

**Tactical AW input:** `tactical_aw_standard_daily.csv` + `tactical_aw_standard_allocations.csv` from `run_tactical_all_weather_standard.py` (or `--run-tactical-aw` on combine / export).

**TSMOM input:** `tsmom_managed_futures_daily.csv` from `run_tsmom_managed_futures.py` (or `--run-tsmom` on combine).

**Ride-rockets regenerate:**

```bash
cd /Users/robzingale/trading_bot && PYTHONUNBUFFERED=1 .venv/bin/python \
  RenTech/strategy_stack/run_ride_rockets_5050_standard.py \
  --start 2016-01-04 --end 2026-04-02 --reuse-equity-cache
```

**Johansen ETF input:** `johansen_triplet_etf_standard_daily.csv` from `run_johansen_triplet_etf_portfolio.py` (or `--run-johansen-etf` on combine). Default book: GDXJ-IAU-SIL, GLD-UNG-USO, XLB-XLI-XLP, COP-USO-XOP, DBC-PDBC-USO, EWA-EWC-IGE (Chan classic uses book-fidelity Johansen).

**MA slope intraday input:** `ma_slope_intraday_confirm4b_top5_cap20_standard_daily.csv` from `run_ma_slope_intraday_standard.py` (or `--run-ma-slope-intraday` on combine). Live trading starts ~2020; earlier dates are zero-padded.

**Canonical artifacts:** `best_ideas_stack_plus_vxx_long_call_plus_macro_aw_plus_tactical_aw_plus_tsmom_plus_johansen_etf_plus_nav_q_mtm_{daily,meta,yearly}.csv`  
**Snapshot metrics:** `RenTech/data/logs/best_ideas_stack_nav_q_mtm_metrics.txt`

**Headline (2016-01-04 → 2026-04-02, MTM + NAV qtr rebase):** return **+3,524%** · CAGR **42.0%** · Sharpe **1.07** · max DD **−20.1%** · end **$3,636,323**

**Equity dip note:** `--with-equity-dip` (SP500 + R3K) is available as an optional add-on (`--with-equity-dip`) when venturing into daily equity trading. Removed from default stack.

### Returns by year (chained NAV — canonical, no equity dip)

From `*_vxx_long_call_plus_macro_aw_plus_tactical_aw_plus_tsmom_plus_nav_q_mtm_yearly.csv` column **`return_pct_chained`**.

| Year | Return | End equity (chained) |
|------|--------|----------------------|
| 2016 | +21.3% | $121k |
| 2017 | +79.5% | $218k |
| 2018 | +36.5% | $297k |
| 2019 | +64.6% | $489k |
| 2020 | +80.2% | $881k |
| 2021 | +77.6% | $1.56M |
| **2022** | **+17.9%** | $1.84M |
| 2023 | +10.3% | $2.03M |
| 2024 | +18.9% | $2.42M |
| 2025 | +46.7% | $3.55M |
| 2026 (YTD) | +2.5% | $3.64M |

**Max DD episode (largest):** **−20.1%** (2025 tariff selloff period).

### Fund mode — 10% max DD target (single NAV, 2.2× leverage, quarterly sized)

One account with **fractional sleeve weights**. Default sizing (**`--fund-nav-rebalance quarterly`**, on by default): at each calendar quarter open, each sleeve's notional = `weight × fund-scale × prior-close NAV`; daily PnL and margin scale linearly from the standalone $100k backtest curves. This matches live rebalancing — allocations grow with equity.

Legacy fixed-$100k sleeve sim (no resize): add `--fund-nav-rebalance none`.

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000 \
  --mtm --fund-mode --fund-scale 2.2 \
  --with-vxx-long-call --with-macro-aw --with-tactical-aw --with-tsmom --with-johansen-etf \
  --with-orb-zarattini \
  --out-prefix RenTech/data/logs/best_ideas_stack_10dd
```

**Headline (2016-01-04 → 2026-04-02, quarterly sized + ORB ~6.1%):** return **+687%** · CAGR **22.3%** · Sharpe **1.97** · max DD **−9.0%** · end **$788,704**

**Diversification:** Johansen sleeve daily ρ vs other book sleeves **mean |ρ| ≈ 0.02** (max vs TSMOM −0.05); ρ(SPY) **≈ −0.14**. ORB is day-trading / low β; CSV starts ~2020 (zeros before). Prior book **without** ORB: +337% / Sharpe 1.47 / max DD −8.7%.

**Sleeve weights (normalized, with ORB):** SPY Theta **17.2%** · VXX Regime **19.9%** · VXX Long Call **8.0%** · Macro AW **10.0%** · Tactical AW **16.7%** · TSMOM **12.3%** · Johansen ETF **9.8%** · **ORB Zarattini 6.1%** (2.2× gross)

**Artifacts:** `best_ideas_stack_10dd_orb_plus_vxx_long_call_plus_macro_aw_plus_tactical_aw_plus_tsmom_plus_johansen_etf_plus_orb_zarattini_plus_fund_plus_nav_q_mtm_{daily,meta,yearly}.*`

**Chained years with ORB:** 2020 +48.6% · 2021 +54.2% · 2022 +27.0% · 2023 +22.1% · 2024 +6.0% · 2025 +13.5%

> **Minimum account (2.2× quarterly sized + ORB):** ~**$870k** (peak margin $695k × 1.25).

| Combine | Return | Max DD | End NAV | Min account | When to cite |
|---------|--------|--------|---------|-------------|--------------|
| **nav_q** (research only ⚠️) | +3,524% | −20% | ~$3.6M | ~$365k peak margin | Research upper bound — not executable on $100k |
| **fund-mode 2.2× + ORB** | +687% | −9.0% | $789k | **~$870k peak** | Recommended single-account with ORB |
| **fund-mode 2.2× (no ORB)** | +337% | −8.7% | $438k | ~$610k peak | Prior book without ORB |
| **fund-mode 1×** | +186% | −6% | ~$286k | ~$104k | Conservative single-account; low leverage |

### Fund reports (daily state + all trades)

After fund-mode combine, export allocator-facing **daily state** and **trade union**:

```bash
cd /Users/robzingale/trading_bot && PYTHONUNBUFFERED=1 \
 .venv/bin/python RenTech/strategy_stack/export_best_ideas_fund_reports.py \
  --start 2016-01-04 --end 2026-04-02
```

**Outputs:** `RenTech/data/logs/best_ideas_fund_daily_state.csv` · `best_ideas_fund_ALL_TRADES.csv` · `best_ideas_fund_reports_meta.json`

- **Daily state:** `fund_*` (PnL sums to NAV), `standalone_*` ($100k sleeve reference), `activity_*` (positions only). Glossary in `best_ideas_fund_reports_meta.json`.
- **All trades:** SPY margin sim + equity dip (sim) + VXX long call JSONL + Macro AW options CSV + **sector momentum** monthly rebalance rows (`trade_kind` `monthly_rebalance` / `sector_hold`). Add `--run-sector-momentum` to regenerate rebalance log before export. Add `--include-vxx-regime-trades` for six regime structure rows (slow).
- Default `--dip-universe both` (S&P + Russell 3k); first Russell run downloads Yahoo panel (long).

### Tactical All Weather (Bridgewater-style equity book — not in default stack)

Separate from **Macro AW options** (`macro_aw_options_portfolio.py`). **Equity tactical AW** rotates **SPY 30% · TLT 40% · IEF 15% · GLD 7.5% · DBC 7.5%** with per-sleeve gates: invest baseline weight only when `close > SMA(200)` and `aqr_mom > 0`; else cash at ~4% yield; weights `shift(1)`. Static benchmark stays fully invested at `BASE_WEIGHTS`.

- **Engine:** `RenTech/strategy_stack/portfolio_risk_manager.py` — `TacticalAllWeatherManager`, `BASE_WEIGHTS`
- **Runners:** `vrp_all_weather_backtest.py` (VRP blend), `main.py` (ensemble), `multi_strategy_manager.py` (macro AW + AQR L/S + dip + sector rotation blend)
- **Doc:** `MACRO_AW_OPTIONS_PORTFOLIO.md` § equity vs options AW

Exit-day lit combine or MTM without `--nav-rebalance quarterly` — fixed sleeve $ on a **$100k** label. Use **`return_pct_constant`** in `*_yearly.csv` for comparable year %.

```bash
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000 \
  --with-equity-dip --with-vxx-long-call
```

**Artifacts:** `best_ideas_stack_plus_equity_dip_plus_vxx_long_call_{daily,meta,yearly}.csv` · exit-day **+893.7%**, max DD **−9.4%** (understates risk vs MTM).

**Regenerate sleeves:** `run_sp500_dip_standard.py` / `run_russell3000_dip_standard.py` with `--refresh-cache` and `--yahoo-period max`. SPY θ MTM: `evaluate_theta_margin --preset lit4-vrp` → `lit_stack_vrp_margin_daily.csv`.

---

## 1. Dynamic VXX Regime Strategy Stack

| Field | Value |
|-------|--------|
| **Token** | `vxx_regime_stack` |
| **What** | Six VXX option sleeves by futures regime (steep IC/short call/bear call, mild bear put, sweet long put, VIX3M bear call) |
| **Combine** | Approach B — sum six `daily_pnl_mtm_usd` series |
| **Runner** | `RenTech/strategy_stack/run_vxx_regime_mtm_report.py` |
| **Doc** | `RenTech/strategy_stack/DYNAMIC_VXX_REGIME_STACK.md` |
| **Daily / meta** | `RenTech/data/logs/vxx_regime_mtm_2016_2026_dynamic_vxx_regime_stack_daily_mtm.csv`, `*_dynamic_vxx_regime_stack_meta.json` |
| **Reference window** | 2016-01-04 → 2026-05-22 · $100k |
| **Headline (stack)** | Return **+104%** · Sharpe **~1.22** · MTM max DD **~−9.8%** |
| **Yearly** | `RenTech/data/logs/vxx_regime_mtm_2016_2026_dynamic_vxx_regime_stack_yearly.csv` |

---

## 2. Literature stack — S055 + S057 + S059 + S089

| Field | Value |
|-------|--------|
| **Token** | `lit4` |
| **Sleeves** | **S055** put-write (SPY>SMA50) · **S057** / **S059** short risk reversal (skew) · **S089** mild-VIX put vertical |
| **Underlying** | SPY Theta 15:45 chains |
| **Combine** | Approach B — sum four literature daily PnL series (stack-while-signal) |
| **Runner** | `RenTech/strategy_stack/combine_lit_stack_sleeves.py --sids S055,S057,S059,S089` |
| **Also in** | `evaluate_theta_margin --preset lit4` (MTM + margin; **different** risk metric than sum-mode lit combine) |
| **Per-sid standalone ($100k, 2016-01-04 → 2026-04-02)** | S055 **+115%** · S057 **+199%** · S059 **+180%** · S089 **+21%** (from last `combine_lit_stack_*` run log) |

---

## 3. VRP regime (4-regime engine)

| Field | Value |
|-------|--------|
| **Token** | `vrp` |
| **What** | **4-regime VRP** options on SPY — low-DD overlap preset (`vrp_low_dd_overlap`), Theta backtest |
| **Combine** | Standalone sleeve; daily PnL from `pnl_vrp` on merge calendar |
| **Runner** | `RenTech/strategy_stack/vrp_backtest_theta.py` / export via `run_vrp_low_dd_vxx_bundle.py` |
| **Canonical trades** | `RenTech/data/logs/vrp_low_dd_ov2_vxxbundle_vrp_trades.jsonl` |
| **Daily PnL (merge)** | `RenTech/data/logs/portfolio_opt_10dd_sharpe_fullvrp.csv` column `pnl_vrp` |
| **MTM book** | `evaluate_theta_margin --preset lit4-vrp` → `lit_stack_vrp_margin_*` |
| **Reference window** | 2016-01-04 → 2026-04-02 · $100k |
| **Headline (VRP-only sum PnL)** | Return **~+98.5%** · Sharpe **~1.82** (from lit combine log) |
| **Headline (lit4+VRP MTM margin)** | Return **+156.5%** · Sharpe **~0.69** · MTM max DD **~−14.6%** (`lit_stack_vrp_margin_meta.json`) |

---

## 4. Best Ideas + D6 (VXX + lit4 + six diverse sleeves + VRP)

| Field | Value |
|-------|--------|
| **Token** | `best_ideas_plus_d6` |
| **Diverse sleeves** | **D095**, **D081**, **D039**, **D018**, **D041**, **D065** |
| **SPY MTM book** | `evaluate_theta_margin --preset best-ideas-spy` (one margin sim: lit4 + D6 + VRP) |
| **Combine** | MTM: `pnl_spy_theta_mtm` + VXX stack MTM · Exit-day: Approach B sum all sleeves |
| **Runner** | `combine_best_ideas_stack.py --with-d6 --mtm` |
| **Artifacts** | `best_ideas_stack_plus_d6_mtm_daily.csv`, `best_ideas_spy6_margin_daily.csv` |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/run_vxx_regime_mtm_report.py \
  --combine-only --out-prefix RenTech/data/logs/vxx_regime_mtm_2016_2026
PYTHONUNBUFFERED=1 .venv/bin/python -m RenTech.strategy_stack.diverse_theta_strategies_v1.evaluate_theta_margin \
  --preset best-ideas-spy --capital 100000 --start 2016-01-04 --end 2026-04-02 \
  --out-daily RenTech/data/logs/best_ideas_spy6_margin_daily.csv \
  --out-trades RenTech/data/logs/best_ideas_spy6_margin_trades.csv \
  --out-meta RenTech/data/logs/best_ideas_spy6_margin_meta.json
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --with-d6 --mtm --start 2016-01-04 --end 2026-04-02 --capital 100000 \
  --out-prefix RenTech/data/logs/best_ideas_stack
```

One-shot (runs margin eval if missing): add `--run-spy-mtm` (very slow, ~hours).

---

## 5. S&P 500 pct-drop buy-the-dip (approved equity satellite)

| Field | Value |
|-------|--------|
| **Token** | `equity_dip` / `sp500_dip` |
| **Status** | **Approved for total portfolio** (replaces legacy `sector_dip` in Best Ideas, 2026-05) |
| **What** | **Prior-day return ≤ −3%**, close **> SMA200**; rank **ATR/price**; hold **10** days; **top 10** S&P names; equal weight + vol target |
| **Combine** | Approach B — `daily_pnl_usd = daily_ret × capital` (default **$100k** notional) |
| **Runner** | `RenTech/strategy_stack/run_sp500_dip_standard.py` |
| **Portfolio combine** | Part of `--with-equity-dip` split (default **46.2%** of equity-dip slot); `--sp500-dip-only` for S&P alone |
| **Daily / meta** | `RenTech/data/logs/sp500_dip_standard_daily.csv`, `sp500_dip_standard_meta.json` |
| **Experiment grid** | `experiment_buy_the_dip.py --universe sp500` → `buy_the_dip_experiment_sp500_20160104.md` |
| **Reference window** | **10y Yahoo:** 2016-05-27 → 2026-05-26 (2512 sessions) · $100k · `--yahoo-period 10y` |
| **Headline (10y)** | Return **+328%** · CAGR **15.7%** · Sharpe **1.38** · Max DD **−14.4%** |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/run_sp500_dip_standard.py \
  --start 2016-01-04 --yahoo-period 10y --top-n 10 --hold-days 10
```

**Legacy sector dip:** `run_sector_dip_standard.py` (11 SPDR ETFs, RSI<20, top-3) — benchmark only.

**Rationale:** Better **Sharpe** and **drawdown** than sector RSI dip on the same window; complements the options book with broad equity washout recovery.

---

## 5b. Russell 3000 pct-drop dip (other half of `equity_dip` slot)

| Field | Value |
|-------|--------|
| **Token** | `russell3000_dip` (paired with `sp500_dip` under `equity_dip`) |
| **What** | Same rules as §5 on **~2.1k** names (`RenTech/data/universe/russell3000_tickers.csv`; snapshot, not point-in-time) |
| **Runner** | `RenTech/strategy_stack/run_russell3000_dip_standard.py` |
| **Portfolio combine** | `--with-equity-dip` (default **53.8%** of slot); not a separate full-$100k add-on |
| **Daily / meta** | `RenTech/data/logs/russell3000_dip_standard_daily.csv`, `russell3000_dip_standard_meta.json` |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/run_russell3000_dip_standard.py \
  --start 2016-01-04 --yahoo-period max
```

| **Headline (10y)** | Return **+559%** · CAGR **20.8%** · Sharpe **1.61** · Max DD **−14.9%** (same effective window as S&P dip) |

---

## 6. VXX long OTM call (tail hedge, 1% NAV/entry)

| Field | Value |
|-------|--------|
| **Token** | `vxx_long_call` |
| **What** | Long **10% OTM** VXX call when futures contango ≥ 3%; default **~5%** of stacked-book PnL (`--book-pnl-frac 0.05`, ~0.22% NAV/entry). Use `--audit-1pct` to match `engine_vxx_1pct` audit |
| **Combine** | Approach B — `daily_pnl_usd` from MTM backtest |
| **Runner** | `RenTech/strategy_stack/run_vxx_long_call_daily.py` |
| **Portfolio combine** | `combine_best_ideas_stack.py --with-vxx-long-call` |
| **Daily / meta** | `RenTech/data/logs/vxx_long_call_standard_daily.csv`, `vxx_long_call_standard_meta.json` |
| **Audit trades** | `RenTech/data/logs/overall_portfolio_trade_audits/engine_vxx_1pct_2016_2026/vxx_portfolio_long_call.jsonl` |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/run_vxx_long_call_daily.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000
```

**Rationale:** Convex crisis payer (e.g. **~+$27k** on exit 2018-02-15 in audit) without replacing the six-sleeve VXX regime stack.

---

## 7. Best Ideas combined stack (preferred = § above)

| Field | Value |
|-------|--------|
| **Token** | `best_ideas_stack` |
| **Preferred flags** | `--mtm --nav-rebalance quarterly --with-equity-dip --with-vxx-long-call` |
| **What** | MTM sum + **quarterly NAV rebase** (VXX + lit4/VRP margin sim + split equity dip + long call) |
| **Optional** | `--sp500-dip-only`, `--equity-dip-equal-weight`, `--with-d6`; fixed-$ ref: omit `--nav-rebalance` |
| **Runner** | `combine_best_ideas_stack.py` |
| **Preferred artifacts** | `best_ideas_stack_plus_equity_dip_plus_vxx_long_call_plus_nav_q_mtm_{daily,meta,yearly}.csv` |
| **Base-only artifacts** | `best_ideas_stack_daily.csv` (no equity dip / long call) |
| **Inputs** | VXX stack CSV (required); lit+VRP equity CSV **or** `--run-lit` to regenerate |

### MTM daily view (headline risk metrics)

Uses **margin + MTM** for lit4+VRP (`evaluate_theta_margin`) and **per-sleeve MTM** for VXX stack.

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/run_vxx_regime_mtm_report.py \
  --combine-only --out-prefix RenTech/data/logs/vxx_regime_mtm_2016_2026
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --mtm --start 2016-01-04 --end 2026-04-02 --capital 100000 \
  --out-prefix RenTech/data/logs/best_ideas_stack
```

**Open:** `RenTech/data/logs/best_ideas_stack_mtm_daily.csv` (combined) · `lit_stack_vrp_margin_daily.csv` (lit4+VRP detail) · `vxx_regime_mtm_2016_2026_dynamic_vxx_regime_stack_daily_mtm.csv` (VXX sleeves)

Re-run after refreshing constituents (exit-day combine, not MTM):

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/run_sp500_dip_standard.py \
  --start 2016-01-04 --yahoo-period max
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/run_vxx_long_call_daily.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000 \
  --with-equity-dip --with-vxx-long-call
```

MTM headline risk (refresh VXX regime + lit MTM first):

```bash
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --mtm --with-equity-dip --with-vxx-long-call \
  --start 2016-01-04 --end 2026-04-02 --capital 100000
```

Full refresh including Theta literature + VRP (~long):

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python RenTech/strategy_stack/combine_best_ideas_stack.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000 --run-lit
```

---

## 8. TSMOM / Managed Futures

| Field | Value |
|-------|--------|
| **Token** | `tsmom` |
| **Status** | **Approved for total portfolio** (2026-05) |
| **What** | 8-asset time-series momentum: SPY, EFA, EEM (equity); TLT, IEF (bonds); GLD, DBC (commodities); UUP (dollar). **Signal:** 3/6/12m trailing return blended equally (normalized). **Direction:** long if signal > 0, short if < 0. **Sizing:** vol-normalized per asset (15% ann vol target). **Rebalance:** monthly. |
| **Why it helps** | Near-zero beta to equities (0.02 historical). Positive in 2008 (+9.5%), 2011 (+4.9%), 2022 (+10.8%). Acts as crisis diversifier that goes with prevailing trends across all asset classes. |
| **Combine** | Approach B — `daily_pnl_usd` from `run_tsmom_managed_futures.py` (at $100k notional on standalone basis; same as equity dip sleeve) |
| **Runner** | `RenTech/strategy_stack/run_tsmom_managed_futures.py` |
| **Portfolio combine** | `combine_best_ideas_stack.py --with-tsmom` |
| **Daily / meta** | `RenTech/data/logs/tsmom_managed_futures_daily.csv`, `tsmom_managed_futures_meta.json` |
| **Reference window** | 2016-01-04 → 2026-05-27 (10.4y) · $100k |
| **Standalone headline** | Return **+47%** · CAGR **3.9%** · Sharpe **0.61** · Max DD **−13.8%** · **β(SPY) = 0.02** |
| **2022 standalone** | **+10.8%** while SPY was −18.2% |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python \
  RenTech/strategy_stack/run_tsmom_managed_futures.py \
  --start 2008-01-01 --capital 100000
```

**Rationale:** Low absolute return on its own (equity premium is the dominant engine), but meaningfully positive in every major crisis period (2008, 2011, 2022). In the Best Ideas combine (+13.9% in 2022 vs +2.7% without), TSMOM converts a flat year into a strong positive, at the cost of slightly higher carry in bull years (trailing equity but not losing). The 2022 contribution was driven by shorts on TLT/IEF (rate rise) and longs on DBC (commodity boom) and UUP (dollar strength) — all established trends before January 2022.

**Limitation:** Only 8 ETF markets. Real CTA funds trade 50–150 futures contracts and achieve 2–3× higher returns (with matching leverage). This implementation targets ~12% portfolio vol but achieves ~6.5% (runs under-leveraged since ETFs can't use futures leverage). The concept and crisis behavior are proven; the absolute return would scale with leverage.

---

## 9. Johansen ETF triplet stat-arb

| Field | Value |
|-------|--------|
| **Token** | `johansen_etf` |
| **Status** | **Approved for total portfolio** (2026-06) |
| **What** | 6 equal-weight **Johansen cointegration triplets** (Chan Ex 2.7–2.8): GDXJ-IAU-SIL, GLD-UNG-USO, XLB-XLI-XLP, COP-USO-XOP, DBC-PDBC-USO, plus Chan classic **EWA-EWC-IGE** (book-fidelity expanding Johansen on that sleeve only). |
| **Why it helps** | ETF mean-reversion on macro-linked baskets; **very low correlation** to theta/VRP/VXX (mean daily \|ρ\| ≈ 0.02 vs other sleeves). ρ(SPY) ≈ −0.14. |
| **Combine** | Approach B — `daily_pnl_usd` from `run_johansen_triplet_etf_portfolio.py` at $100k standalone notional |
| **Runner** | `RenTech/strategy_stack/run_johansen_triplet_etf_portfolio.py` |
| **Portfolio combine** | `combine_best_ideas_stack.py --with-johansen-etf` (default fund weight **8%**, normalized ~8.7%) |
| **Daily / meta** | `RenTech/data/logs/johansen_triplet_etf_standard_daily.csv`, `johansen_triplet_etf_standard_meta.json` |
| **Reference window** | 2016-01-04 → 2026-04-02 · $100k |
| **Standalone headline** | Return **+43%** · CAGR **3.5%** · Sharpe **0.67** · Max DD **−16.0%** |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python \
  RenTech/strategy_stack/run_johansen_triplet_etf_portfolio.py \
  --start 2016-01-04 --end 2026-04-02 --capital 100000
```

**Scanner (find new triplets):** `run_johansen_triplet_scan.py` · **SP500 scan (negative OOS):** `run_johansen_triplet_sp500.py`

---

## 10. MA slope intraday day-trade

| Field | Value |
|-------|--------|
| **Token** | `ma_slope_intraday` |
| **Status** | **Approved for total portfolio** (2026-07) |
| **What** | Same-day Alpaca 5m MA-slope rotation: EMA10/50 dual-product rank, **confirm_entry_4b** (must stay in top-N after 4 bars), **top-5**, **max 20% weight/name** (cash if fewer names), hold MOC. |
| **Why it helps** | High standalone Sharpe (~1.48) with de-tailed sizing; equity day-trade diversifier vs theta/VRP. Edge is positive-skew (median name ≈ flat); liquidity filters remove most return — keep universe wide, size carefully. |
| **Combine** | Approach B — `daily_pnl_usd` / `daily_ret` from `run_ma_slope_intraday_standard.py` at $100k |
| **Runner** | `RenTech/strategy_stack/run_ma_slope_intraday_standard.py` |
| **Portfolio combine** | `combine_best_ideas_stack.py --with-ma-slope-intraday` (default fund weight **6%**, renormalized) |
| **Daily / meta** | `RenTech/data/logs/ma_slope_intraday_confirm4b_top5_cap20_standard_daily.csv`, `*_meta.json` |
| **Reference window** | 2020-01-02 → 2026-06-26 · $100k (CSV zero-padded from 2016 for calendars) |
| **Standalone headline** | Return **+1,264%** · CAGR **49.9%** · Sharpe **1.48** · Max DD **−32.4%** |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python \
  RenTech/strategy_stack/run_ma_slope_intraday_standard.py \
  --start 2020-01-02 --end 2026-06-26 --capital 100000
```

**Yearly (chained):** 2020 +42% · 2021 +14% · 2022 +29% · 2023 +74% · 2024 +99% · 2025 +24% · 2026 YTD +52%.

**Limitation:** Tail-dependent without the 20% cap / top-5 de-tail; micro/low-ADV names drive much of the uncapped edge. **On by default with `--stock-only`** (opt out: `--no-ma-slope-intraday`). Execution: entry ~10:45 ET, MOC exit.

---

## 11. Zarattini 5m ORB (`orb_zarattini`)

| Field | Value |
|-------|--------|
| **Token** | `orb_zarattini` |
| **Status** | Optional Best Ideas sleeve (2026-07) — default fund weight **5%** (taken primarily from `tactical_aw`) |
| **What** | 5-minute **Opening Range Breakout** on **Stocks in Play** (Zarattini / Barbon / Aziz). Same-session day-trade equity sleeve; not in the stock-only book. |
| **Combine** | Approach B — `daily_pnl_usd` from `run_orb_zarattini.py` at standalone notional (CSV also has `margin_usd`) |
| **Runner** | `RenTech/strategy_stack/run_orb_zarattini.py` |
| **Portfolio combine** | `combine_best_ideas_stack.py --with-orb-zarattini` |
| **Daily / meta** | `RenTech/data/logs/orb_zarattini_5m_standard_daily.csv` |
| **Data note** | Alpaca RTH history for this sleeve starts ~**2020**; earlier Best Ideas calendar days contribute **0** PnL from this sleeve. Research upper bound only until live sizing / PDT / borrow costs are modeled. |

```bash
cd /Users/robzingale/trading_bot
PYTHONUNBUFFERED=1 .venv/bin/python \
  RenTech/strategy_stack/run_orb_zarattini.py \
  --start 2020-01-02 --capital 100000 \
  --out-prefix RenTech/data/logs/orb_zarattini_5m_standard
```

See also `DAY_TRADING_BEST_OF_IDEAS.md` (token `orb_zarattini`).

---

## What is *not* in Best Ideas (yet)

- Legacy **sector RSI dip** (`run_sector_dip_standard.py`) — superseded by S&P/Russell pct-drop dip
- `multi_sleeve_default` IV overlays at optimizer weights (small $ contribution)
- Legacy `vxx_bear` + `vxx_long` 90/10 merge sleeve (replaced for research by **Dynamic VXX Regime Strategy Stack**)
- Equal-weight or regime-router VXX combinations (rejected in favor of Approach B)

---

## Changelog

| Date | Change |
|------|--------|
| 2026-05 | Initial file: VXX regime stack, S055/S057/S059/S089, VRP, combined `best_ideas_stack` |
| 2026-05 | Added D095/D081/D039/D018/D041/D065 via `best-ideas-spy` margin preset + `--with-d6` combine |
| 2026-05 | **Sector dip** approved; later **replaced** by S&P pct-drop (`run_sp500_dip_standard.py`, `--with-equity-dip`) |
| 2026-05 | **VXX long call** tail hedge; `run_vxx_long_call_daily.py`; `combine_best_ideas_stack.py --with-vxx-long-call` |
| 2026-05 | **Maintainer preferred stack** locked: VXX + lit4 + VRP + S&P dip + long call (~5% book); yearly table in § “Preferred total portfolio”; `.cursor/rules/best-ideas-stack.mdc` |
| 2026-05 | **Macro AW** (`--with-macro-aw`) and **sector momentum** (`--with-sector-momentum`, `run_sector_momentum_standard.py`) added to combine |
| 2026-05 | S&P dip **full history from 2016**: `yahoo-period max` → 30y + `--refresh-cache`; history filter on tickers |
| 2026-07 | **Zarattini 5m ORB** (`--with-orb-zarattini`); `run_orb_zarattini.py`; default fund weight 5% (from tactical_aw); not in stock-only book |
| 2026-07 | **MA slope intraday** (`--with-ma-slope-intraday`); `run_ma_slope_intraday_standard.py` (confirm_entry_4b + top-5 + max 20% weight); default fund weight 6%; **on by default with `--stock-only`** (~6.1% after normalize); standalone +1,264% / Sharpe 1.48 / DD −32% (2020–2026) |
| 2026-06 | **Johansen ETF triplets** (`--with-johansen-etf`); `run_johansen_triplet_etf_portfolio.py`; ~8% fund weight; low-ρ diversifier |
| 2026-05 | **TSMOM / Managed Futures** approved; `run_tsmom_managed_futures.py`; `--with-tsmom`; canonical headline updated to +6894% / Sharpe 1.14 / max DD −25.6% |
