JARVIS COMMAND CENTER

Overview Strat Breadth Research Lab Backtests Volatility Bayesian Cross-Series Portfolio Growth/Value VIX Rates Rates 2 Bondistan Econ Ind Options Trading Intraday Intraday A/D One Pager Berg Signals Entropy Forensic Valuation Earnings ETF Rotation Factor Lab Leveraged Pairs LP Options Options Platform Macro SMA Filter Books McCullough Policy

Price Series

Lookback:
| Custom: to

MACD (19, 39, 1) (signal=1 ⇒ EMA(1) of MACD is MACD, so no signal line or histogram)

EMA(19) − EMA(39) of the selected price series — zero-centered

% from Moving Average

Current Signals

Strategy Research

Multi-variant beat-SPY research — select variant to display backtest results.

Current Allocation

Loading…

Current Holdings (top 8)

Loading…

Performance Metrics

Strategy CAGR Sharpe Max DD Calmar
Loading…

Layer 2 — Sector Rotation

Inactive

5 signals on each of 11 SECTOR/QQQ and 11 SECTOR/SPY ratios (22 signal sets, 55 votes per side). W_QQQ = QQQ votes / total votes. Backtest from 2019-04-05 (XLC inception + 200-bar warmup).

Loading…

Sector Signals (INACTIVE)

Loading…

Layer 2 Equity Curve (INACTIVE)

Layer 2 Performance (INACTIVE)

Strategy CAGR Sharpe Max DD Calmar
Loading…

Layer 2 — Nested Sector Engine

Rebuild

L1 sets QQQ/SPY sleeve weights (signals/5); each sleeve is sub-allocated into over/under-weight sector tilts via clean 2%/1% book-steps (overflow dropped). Spec is SSoT — distinct from the inactive vote-count build above.

Current Book

Loading…

Equity Curve (backtest)

Backtest loading…

Performance Metrics

2019+ (all sectors live)
Strategy CAGR Sharpe Max DD Calmar
Loading…
Full history
Strategy CAGR Sharpe Max DD Calmar
Loading…

Pair Trades — Relative Performance

Loading…

Loading…

Relative Performance —

Ratio rebased to 1.00 at the first signal-eligible day. Rising = the numerator is winning. For the equal-weight pairs that is the breadth read, priced: rising means the index is being carried by its largest members.

Equity Curve — Signal Tilt vs Benchmarks

Performance Metrics

Window Series CAGR Sharpe Max DD Calmar Days
Loading…

Lookback:
| Custom: to View Regime Signals Research Bloomberg Queue

Latest Day — Advancers vs Decliners

Cumulative A/D Line

% Members Above SMA & Trend

Short-term: % Above SMA(10) & SMA(20)
Long-term: % Above SMA(50) & SMA(200)
Trend: SMA(10)>SMA(20) & SMA(50)>SMA(200)

Distance-from-SMA — Cross-Section (magnitude, not sign)

Center: Bands:
SMA(50) — % distance from 50-day SMA (zero baseline; green above, red below)
SMA(200) — % distance from 200-day SMA
Bollinger Squeeze — Band Width (20-period BB on mean-dist; dashed = 1-yr 25th-pct threshold; badge fires when SMA(50) BBW below threshold)

MACD (19, 39, 1) — A/D Line & Overlay (signal=1 ⇒ EMA(1) of MACD is MACD, so no signal line or histogram)

EMA(19) − EMA(39) of the Cumulative A/D Line (left axis) and of the selected Overlay (right axis) — each axis zero-centered so the zero line is shared

McClellan Oscillator & Summation Index (RAMO — methodology-dependent)

Oscillator: EMA(19) − EMA(39) of ratio-adjusted A−D
Summation Index: cumulative sum of oscillator

Constituents — Drill-Down

Loading…
Autoresearch — Experiment Log
Loading experiments...
MA Sweep Results

SMA Crossover Heatmap

EMA Crossover Heatmap

Single MA Comparison
Loading...
Knowledge Base — Indicator Research
📊 Adaptive Kalman Filter
Theory, variants (Sage-Husa, IMM, Robust), financial applications (trend, pairs, beta, breadth smoothing), comparison vs SMA/EMA/HP. Implementation: finance/indicators/kalman_adaptive.py. Testing plan: plans/akf-testing-plan.md.
Added 2026-08-06 · Status: Implementation planned
📈 SMA 10/20 Market Filter
Dual SMA trend filter as market regime gate. Backtest results SPY 1993–2026. Connors/Alvarez methodology. Use as gate not standalone.
Added 2026-07-26 · Status: Live (see SMA Filter tab)
Finance Research Lab — Studies
Loading studies...
Out-of-Sample Validation
Loading...
MA Crossover Walk-Forward
Model Comparison
Volatility Regime Analysis

Realized Volatility (21d EMA)

Lookback:
| Custom: to
Vol Ratio Threshold Sweep
Loading...
Vol Regime Continuation Rates
Loading...
Bayesian Signal Analysis — P(positive return | signal)
Loading...
MA Spread Predictive Value
Loading...
Cross-Series Leaderboard — 49 Series (7 Tickers + 42 Ratios)
Full Leaderboard
Loading cross-series data...
File Paths
Growth vs Value Rotation
Loading growth/value data...
Lookback:
| Custom: to

VONG/VONV (Russell 1000)

VUG/VTV (Vanguard)

Rotation Backtest — Always 100% Long
Loading rotation data...
GV Signals on GLD/AGG
Loading...
Standalone Ratio Backtests
Loading...

Signal Tearsheet

Loading...
Loading...
Loading...

Cumulative Returns

Drawdown (%)

Signal Tearsheet — Page 2

Monthly Returns (%)

Yearly Returns (%)

Time Range:
Custom: →
VIX Futures Term Structure
Compare dates:
Dot color = contract expiry (tracks across dates) · Hover Spot History below to preview curves
Contango Mode:
VIX Spot History
Contango / Backwardation History
Related Volatility Indices
Volatility Compression Watch — Vixologist Squeeze Template 📄 docs
TTM Squeeze Status
—
Computing...
BBand Width %
—
vs 20d rolling mean
StdDev(10) Compression
—
current vs 20d MA
SPX Trend (3d)
—
Setup requires uptrend
6-Month Realized Volatility (StdDev 10-Day) — Compression Zones Highlighted
Light red zones = StdDev below 25th percentile (compression state). Thrasher framework: compression under buy pressure → explosive release. Cross-ref: Thrasher 2017 paper + Lakha correlation divergence
Docs: Vixologist Template (what & why) · Thrasher 2017 Paper (full methodology) · Compare both
Memory: reference_vixologist_thrasher_squeeze.md · reference_options_insight_imran_lakha.md · Sentinel: svix-squeeze-check (4:00 PM ET)
VIX Dispersion (Thrasher 2017) — Paper-Faithful Signal 📄 docs
VIX Signal
—
StdDev(20) vs 15th pct
VIX 20-Day StdDev
—
threshold: —
StdDev Percentile
—
vs full history
VVIX Signal (secondary)
—
15th pct of VVIX StdDev(20)
VIX 20-Day Standard Deviation vs Threshold (1Y) — Signal Days Marked
Blue line = VIX 20d StdDev. Dashed = 15th-percentile threshold (adaptive to full history). Red markers = signal-fired days (StdDev ≤ threshold with 10-day dedup).
Docs: Thrasher 2017 Paper (full methodology) · Vixologist Template (comparison) · Compare both
Memory: reference_thrasher_paper_methodology.md · Source PDF: /var/lib/jarvis/personal/research/papers/thrasher-2017-forecasting-volatility-tsunami.pdf · Sentinel: vix-dispersion-check (4:05 PM ET)
Active Strategy Signals
Loading strategy signals…
Library: finance/strategies/vix_library.json · Evaluator: finance/scripts/eval_strategies.py · Pipeline stage: strategy_eval (daily, depends on rv_compute + skew_capture + bubble_bounds) · API: /api/finance/strategies
VIX Spikes (Last 5 Years)
Loading...
Short-End Term Structure & Contract Roll
Today: Spot & Near-Dated Futures
Spot + M1 + M2, including first contract past 60 DTE. Dot color = contract identity (shared with spread charts below).
M1 − Spot Spread (Front Month vs VIX)
M2 − Spot Spread (2nd Month vs VIX)
M1 − M2 Spread (Short-End Contango, Raw Points)
Raw vol points (M2 settle − M1 settle). M1/M2 identity rolls on the Wednesday exactly 14 calendar days before the front contract's expiry — earlier than the actual-expiry roll used in the M1/M2 vs Spot charts above.
Line color flips at each contract roll — segments are colored by which contract was the M1/M2 on that date, matching dot colors on the short-end curve above and the full term structure chart at top.
KEY RATES —
CURVE SNAPSHOT
Treasury constant-maturity par yields (FRED CMT), all 11 published nodes 1M–30Y. REAL overlay: TIPS par real yields (DFII5/10/20/30) — 4 nodes, 5–30Y. BEI overlay: breakeven inflation = Nominal − TIPS real at those 4 tenors (par−par approximation; small coupon residual vs zero-coupon Fisher). Rates 2 serves the Fed’s GSW zero-coupon fit where the exact Fisher identity holds.
BREAKEVEN INFLATION —
MACRO CONTEXT —
EQUITY REPO —
Source: Capital Flows STIR Replication Playbook · Live data — Yahoo chart API (SR3 + ZQ futures) + NY Fed EFFR/SOFR CSV + FRED (DGS2/5/10/30, T5YIE/T10YIE, PSAVERT). Refresh: weekdays 16:30 ET.
Treasury Curve — Nominal · Real · Breakeven
GSW ZERO-COUPON —
Loading curve…
CURVE SNAPSHOT
Zero-coupon yields fitted by the Fed (Svensson). Nominal − Real = Breakeven holds exactly on this basis — it does not on the par basis, which carries a coupon residual. Nominal is fitted 1–30Y; the Fed fits TIPS only 2–20Y, so the real and breakeven curves end short by construction, not by data loss. FWD overlay adds instantaneous forward curves (SVENF/TIPSF/BKEVENF) from the same model.
HISTORY
SUPPLY & HOLDINGS
FED HOLDINGS — TREASURIES
—
—
MoM —
— Details →
TOTAL US TREASURY DEBT
—
—
MoM —
— Details →
FED MATURITY CONCENTRATION
—
— —
Peak bucket — Fed % of total outstanding
NY Fed SOMA · ex-Bills Details →
DOCUMENTATION & METHODOLOGY
PRIMARY SOURCES
📄 GSW: U.S. Treasury Yield Curve (FEDS 2006-28)
Gürkaynak, Sack & Wright (2006). Svensson-fit nominal zero-coupon curve, 1961–present. Source of all SVENY/BETA/TAU parameters and the nominal fitted yields shown here.
Federal Reserve FEDS · Nominal curve · Zero-coupon basis
📄 GSW TIPS Extension (FEDS 2008-05)
Gürkaynak, Sack & Wright (2008). Svensson-fit TIPS real zero-coupon curve using the same framework. Source of TIPSY/TIPSF columns. Fitted 2–20Y by construction.
Federal Reserve FEDS · TIPS real curve · Zero-coupon basis
📊 Kim-Wright Term Premium (FEDS 2005-33)
Kim & Wright (2005). 3-factor affine model decomposing nominal yields into rate expectations + term premium. Source of THREEFYTP10 (10Y TP). Updated weekly via FRED.
Federal Reserve FEDS · Term premium model · FRED: THREEFYTP10
KNOWLEDGE BASE
📋 Treasury Par Curve Methodology
HS (Hermite spline, pre-2021-12-06) vs MC (Monotone Convex, current). Par basis vs zero-coupon basis. 14 tenors, 1Mo–30Yr. MC uses secondary market prices, not yields, as primary input.
KB · knowledge/finance/treasury-methodology.md
📋 Treasury Data Source & Provenance
Canonical CSV endpoint, publication time (~17:30 ET same-day), schema breaks (MC/HS transition), series-level provenance, supersession vs revision distinctions.
KB · knowledge/finance/treasury/SOURCE.md
DESIGN & IMPLEMENTATION
📄 Data Hygiene — Immutable Historical Design
Frozen design doc (JDEC-20260817-011). Provenance schema, write-behavior rules, archive blob structure, INSERT-OR-IGNORE vs UPDATE partition, rollback strategy.
plans/data-hygiene-immutable-historical.md · FROZEN
📄 Data Hygiene — Implementation Status
Phase 0–3, 5 complete. Phase 4 (archive dedup) gated on loop #1981. Open: #1980 (fred_revisions PK), #1990 (DDL renames), #1902 (real-time feed). Verification queries included.
plans/data-hygiene-rates-implementation.md · Live
📄 Formula Verification Audit (2026-08-18)
Audited against live data: GLD gold constant corrected (factor rises, not falls), Kim-Wright confirmed as zero-coupon yields (not forwards), inversion depth unit bug fixed. Two expert findings reversed.
plans/rates-formula-verification.md · 2026-08-18
📄 Two-Tier Data Model Design
Provisional real-time lane (Treasury.gov same-day) alongside immutable historical record (FRED T+1). Supersession vs revision distinction. Gated on loop #1937 (Rob review).
plans/rates-two-tier-data-model.md · Design draft
Synthetic ATM Straddle — Bloomberg Methodology
Options Chain Snapshot
Underlying:
Loading options data...
Put/Call Ratio & Volume
IV Overview
Open Interest by Strike
Data Sources
Active: Polygon.io (via Massive MCP) — chains, historical OHLC, contract reference
Available: Theta Data ($80/mo — tick-level + Greeks), ORATS ($99/mo — backtester), DeltaNeutral ($575/yr — 20yr EOD)
Libraries: py_vollib (pricing/Greeks), Optopsy (backtesting), polygon-api-client
Full reference: /var/lib/jarvis/personal/finance/research/options/OPTIONS_DATA_SOURCES.md
Paper Trading Account
Open Positions
Loading positions...
Submit Order
Recent Orders
Loading orders...
Equity Curve
Kalman Pairs Signal — TLT/IEI
Status
Loading…
Rolling Sharpe vs OOS Benchmark (0.670)
…
—
Paper Equity Curve
Paper equity from Alpaca account (strategy + cash). Phase 3 tracking started 2026-06-26. Graduation gate: 8-week rolling Sharpe > 0.50.
Intraday 1-Min Bars
Stored Data Summary
Loading ticker summary...
Intraday Breadth — 9 Indices, 2 Methodologies
A = probe vs yesterday's adj close · B = vs prior 5-min bar · Auto-refresh 60s  ·  raw JSON
Live Signal Monitor
Loading portfolio data...
Pareto Frontier — Non-Dominated Solutions
Loading...
Full Rankings (Top 20)
Loading...
Signal Changes
No changes detected
Improvement History
Loading...
Risk Monitor — Correlation & Volatility
Loading risk data...
Post-2010 calibration only. Gate G2: 8/16 = 50% on full 1957-2026 precedent set. The 4 live combos (C2/C4/C6/C10) have demonstrated efficacy in recent regime. Use with care — blocked combos (C1/C3/C5/C7/C8/C9/C11) excluded from production.
Methodology & Sources
Internal docs
Plan: berg-atomic-indicators.md Indicator catalog (30k+ → 11 combos) Combos source (berg_combos.py) Atoms source (berg_atoms.py) Gate G2 harness
External (Berg's own material)
Shapiro/Berg interview (YouTube) @bergmilton (Twitter/X) miltonbergedge.com (retail $10/mo) miltonberg.com (institutional)
Today's Signal Status
Loading...
Combo Charts (click to view price + fire markers)
Historical Fires
Loading...
Suggested Stop (live signals)
Calculated from signal close minus (historical max_dd + 0.5% buffer). Only shown for signals where max_dd_60d is available.
Loading...
Forensic Accounting Screener
⚠ Threshold Breaches (literature thresholds — dashboard-only)
Loading...
Four deterministic forensic scores per 10-K (annual): Beneish M (earnings manipulation likelihood), Altman Z (bankruptcy proximity), Sloan accruals (earnings quality), Piotroski F (financial strength). Source: SEC EDGAR via edgartools; computed nightly. Literature thresholds — Beneish M>-1.78 = aggressive; Altman Z<1.81 = distress; Sloan >+0.10 = high accruals; Piotroski ≤2 = weak. Plan: forensic-scores-nightly.md.
Latest 10-K Scores
Ticker Period Beneish M Altman Z Sloan Piotroski F Quality
Enter a ticker to see all scored filings.
Plan & Lessons
Recent Screener Runs
Loading...
Earnings Tracker
This Week’s Earnings
Loading…
Historical Reaction Profile
Enter a ticker above to see historical earnings reaction data.
Hypothesis Matrix — All Tickers
Loading…
Phase Tracker
Status Phase Scope Completed
✓ DONEPhase 0Placeholder tab + open questions captured for Rob2026-07-23
✓ DONESpec7/7 design questions locked (JDEC-20260803-010 through -018); vintage-data principle + dedup falsification2026-08-03
✓ DONEPhase 1Data pipeline: schema (migration 047), EDGAR 8-K fetcher, reaction computer (1D/5D/20D), RSS real-time poller + daily sweep cron (A+C hybrid, JDEC-20260803-016)2026-08-03
✓ DONEPhase 2Calendar UI: this-week earnings table (ticker, timing BMO/AMC, EPS actual, 1D/5D/20D reactions); live from earnings_actuals + earnings_calendar via API2026-08-03
✓ DONEPhase 3Reaction profile: per-ticker historical EPS prints + 1D/5D/20D returns; quintile bucket engine (≥5 prints); ticker lookup UI2026-08-03
✓ DONEPhase 4Hypothesis matrix: 5-bucket EPS-surprise × 3-horizon aggregate table; per-bucket ticker list; auto-refines as pipeline populates data2026-08-03
Open Questions — answer to unblock the build
Click any question to expand it. Supporting context inside each one is drawn from our existing data sources, conventions, and trade-offs — everything you need to make the call. Resume on Telegram when ready; we'll walk these one at a time.
1. Companies scope ✓ ANSWERED — FULL UNIVERSE▼
✓ Rob, 2026-08-03 — FULL UNIVERSE. Verbatim: “track every ticker that has earnings… all tickers, all symbols and all earnings tracked and recorded.” Equities not currently in a portfolio or watchlist need to be built out — universe expansion is in scope, not a side effect. None of the four options below apply; they are kept for provenance. Decision JDEC-20260803-010.

⚠ Gap: research.db holds only 3,295 distinct tickers vs ~11k US listed; factor_universe is 0 rows. Open loop #766.
Which set of companies should this page track? A specific hand-picked watchlist, or auto-derive from an existing dashboard/portfolio universe?
Why it matters: Every other design decision (data volume, refresh cost, display density) scales with this number. A 20-name focused watchlist is very different from "all names in the Factor Lab universe."
Options
Hand-pickedYou maintain a curated list (e.g. 20–50 names you actively follow). Simplest; lowest data cost; nothing slips in accidentally.
Portfolio-derivedAuto-pull from whatever is currently in the Alpaca portfolio + watchlist. Always in sync; zero manual maintenance.
HybridHand-picked core + auto-supplement from portfolio. Recommended if the watchlist and live positions overlap but aren't identical.
Index-basedAll NDX-100 or S&P 500 names — broadest coverage; highest data volume; less focused.
What we have today: Full R3K universe (2,929 tickers) in research.db. Alpaca portfolio positions live via API. NDX-100 and SPX constituent lists available. A hand-picked watchlist would need a new small config file (e.g. data/earnings-watchlist.json).
2. Earnings data source ✓ ANSWERED — EDGAR-FIRST▼
✓ Rob, 2026-08-03 — EDGAR-first + multi-source corroboration. Verbatim: “start with EDGAR first for earnings… also look for other public announcements. Find the most up-to-date sources including news or places such as Bloomberg.com or Google Finance, Yahoo Finance, etc. Capture the data as soon as possible and also make sure that it’s verified and correct.” Two requirements beyond source choice: (a) latency — capture ASAP; (b) verification — cross-source confirmation. Consensus estimates DEFERRED (paid at full-universe scale). Decision JDEC-20260803-011.

Build to the standing data principles, not a bespoke scheme: sources independent (own fetcher + raw archive each, reconcile on backend, missing is missing); provenance on every row (source + fetched_at + raw_path, corrections supersede never overwrite); batched into shared windows. Reuse the wired EDGAR client finance/forensics/edgar_fetcher.py — do not build a second one.
⚠ The “Recommended path” below is FALSIFIED. Probed live 2026-08-03 — it was written from vendor docs, never tested against our key: /benzinga/v1/earnings 403, /tmx/v1/corporate-events 403, /stocks/financials/v1/income-statements 403. Only /v3/reference/tickers works, and the tier 429s after ~5 rapid calls (~5 req/min). Full-universe scope kills any per-ticker source. Kept below for provenance. Lesson: lesson_spec_recommended_source_is_untested_hypothesis.
Where do the consensus EPS estimate, estimate range (low/high), and the report date/time come from? How current does it need to be — real-time, daily refresh, or manual?
Why it matters: The data source determines what's free vs paid, how fresh the estimates are, and how much maintenance it takes to keep them live. Stale estimates make the calendar misleading.
Options
yfinanceFree, automated. ticker.calendar returns next earnings date + EPS estimates. ticker.earnings_dates gives historical prints. Works today with no new keys. Risk: Yahoo changes its internal API without notice (broken several times in the past 3 years).
Polygon/MassiveAlready wired. /vX/reference/financials provides historical EPS actuals but not forward consensus estimates on our free/starter tier. Good for backtesting past surprises; can't source next-quarter estimates.
Bloomberg CSVInbox at /var/lib/jarvis/inbox/bloomberg/ — Rob drops a CSV, Jarvis ingests it. Highest quality; fully manual; no automation possible without a paid Bloomberg API.
Manual entryRob types the key numbers into a config file or dashboard UI before each earnings week. Lowest dependency; highest friction.
Recommended path: yfinance for schedule + estimates (daily cron), Polygon for historical actual EPS (to backtest surprises). yfinance covers the estimate-range question out of the box (earningsLow, earningsHigh, earningsAverage, analyst count). Manual Bloomberg drop as an override path if yfinance data looks wrong.
3. Price-reaction hypothesis basis ✓ ANSWERED — DATA-DRIVEN▼
✓ Rob, 2026-08-03 — DATA-DRIVEN with iterative refinement. Verbatim: “It needs to be primarily data driven. We will need to research and build models for expectations, basically reaction functions in which we expect the price to do a specific thing tied to what the earnings number is. Then we can test the hypothesis against reality to improve over time.” Method: for each ticker, backtest historical EPS actuals (EDGAR) against next-day/next-week price returns, compute empirical reaction per earnings tier, surface the baseline to Rob for annotation and refinement. Iterative: patterns confirm or refute as new prints land. Decision JDEC-20260803-012.
What we have today: Full daily price history in research.db. EDGAR 8-K filings already wired via edgar_fetcher.py — historical EPS actuals parseable from Item 2.02 exhibits. The backtest engine is ~200 lines of Python given existing infrastructure. Polygon /vX/reference/financials available as a cross-check for large-caps.
4. Earnings surprise buckets ✓ ANSWERED — FIVE-LEVEL▼
✓ Rob, 2026-08-03 — FIVE-LEVEL bucketing. Verbatim: “We also need ways to quantify things such as possibly a five-level system much worse than expected, slightly worse than expected in line with expectations, slightly better than expected, much better than expected.” Buckets (mapped to YoY EPS growth): 1. Much worse (<−15% YoY), 2. Slightly worse (−15% to −5%), 3. In-line (−5% to +5%), 4. Slightly better (+5% to +15%), 5. Much better (>+15% YoY). These become the rows of the hypothesis matrix; price reaction is computed per bucket per horizon (Q5). Decision JDEC-20260803-013.
Data available: EDGAR actuals going back 10+ years for most issuers via edgar_fetcher.py. YoY computation is a single join on (ticker, fiscal_quarter). research.db has 3,295 tickers with daily price history for backtest correlation. Threshold refinement via iteration as more prints land.
5. Time horizons ✓ ANSWERED — 1D + 5D + 20D▼
✓ Rob, 2026-08-03 — 1D + 5D + 20D. Immediate reaction (1D), short-term follow-through (5D), and one-month reversion check (20D). These become the columns of the hypothesis matrix; rows are the five earnings buckets from Q4. No new data fetch required — daily closes in research.db cover all three horizons. Decision JDEC-20260803-014.
6. Pre-market / after-close timing▼
Does the reaction measurement account for when a company reports? "Before open" (BMO) vs "after close" (AMC) changes what "1-day reaction" even means.
Why it matters: If NVDA reports after close on Tuesday, the first chance the regular-hours market can react is Wednesday's open. Measuring from Tuesday's close to Wednesday's close is 1D. But if AAPL reports before open on Wednesday, the market reacts at Wednesday's 9:30 open and you measure Wednesday's close vs Tuesday's close — same calendar-day but different "event day 0" logic.
Options
Event-day alignedRecommended. Define "event day 0" as the first trading session where the market can react: for AMC reports that's the next calendar day; for BMO that's the report day itself. All returns measured from that session's open (or prior close). Consistent across the universe.
Calendar-day naiveAlways measure from the date the report is filed, regardless of time. Simple but mixes AMC/BMO effects — an AMC report's "1D" return would capture only 1 actual trading session of reaction, not 1 full day of reaction.
Display only, no backtestShow the report time on the calendar as context, but don't incorporate timing into the hypothesis math — use calendar-day naive for the backtest and note the caveat. Faster to build; less rigorous.
Data available: Report time (BMO/AMC/unconfirmed) is typically included in earnings-calendar feeds (yfinance ticker.calendar, Polygon earnings events). We can capture and store it alongside the date. Aligning the event-day baseline adds ~10 lines to the backtest logic.
7. Data maintenance cadence▼
Who keeps the earnings schedule + consensus estimates fresh, and how often? This decides whether the page is a living dashboard or a manual one.
Why it matters: Earnings dates shift (companies reschedule), estimates move as analysts update throughout the quarter, and whisper numbers diverge from consensus in the days before the print. A stale calendar is actively misleading.
Options
Automated dailySentinel cron (e.g. nightly at 11 PM ET) re-fetches schedule + estimates for the next 2 weeks via yfinance. Zero manual work after setup. Handles date changes and estimate revisions automatically. Risk: yfinance reliability (see Q2).
Weekly on SundayPull the upcoming week's calendar every Sunday morning. Less overhead than daily; fine if estimates don't move much intra-week for the names you follow. One missed Sunday = stale week.
On-demand (manual trigger)Rob sends a command or clicks a refresh button before each earnings week. Highest reliability (you decide when to pull); most friction.
Manual CSVRob drops a CSV into the inbox before each earnings week. Same pattern as Bloomberg ingestion. Simple, offline-capable; entirely manual.
Our automation patterns: We already run ~40 sentinel crons. Adding an earnings-calendar-refresh cron is a 1-hour build. The nightly universe refresh and breadth pipelines show this pattern works reliably. Recommended: automated daily at 11 PM ET, with a manual override button on the dashboard to force an immediate refresh.
Damodaran Valuation Integration
Valuation Surface — Live
Decision surface: cross-section Screener → Per-Ticker Valuation → Industry / Country browsers → EV-Premium tracker. Nightly RUA run (02:30 ET): WACC 2,929/2,929, DCF ~88 (Financials/REITs excluded correctly since Approach A; was 121 pre-guards), multiples 171 (gated by XBRL backfill). ✓ DCF input guards + XBRL unit-writer fix shipped 2026-07-13 (sector-aware growth cap, WACC floor, FCF scale guard, Financials/REIT exclusion; XBRL unit column corrected). Screener shows clean / suspect / flagged tiers. Remaining: XBRL value-scale errors on systematic wrong-scale filers (AEP, CALM — unit now correct, value still wrong for this subset).
Aswath Damodaran's intrinsic-valuation toolkit applied across the full equity universe: DCF (four value drivers: growth, margins, reinvestment, discount rate), WACC bottom-up from industry betas, implied ERP, relative multiples with peer z-scores, country risk premium. Source: NYU Stern annual dataset release.

Domain boundary: the existing Forensic tab answers "can I trust the numbers?" — this tab will answer "given the numbers, what is it worth?". Forensics is a quality gate; valuation is a decision input. Orthogonal domains sharing the EDGAR source data.
Phase Tracker
Status Phase Scope Completed
✓ DONEPhase 0Memory reference + plan + placeholder tab2026-06-04
✓ DONEPhase 1Static datasets ingest — 4 tables in research.db (industry metrics 94, country risk 178, ERP history 66, asset returns 98); sentinel cron damodaran-datasets-annual Jan 15 09:00 ET2026-06-04
✓ DONEPhase 1.5Historical archive ingest + verification harness — 17 vintages (2008-2024) backfilled (1,439 industry rows, 2,271 country rows). Ticker-industry map from indname.xls (48k rows). NDX-100 reconciliation runs end-to-end — 49 rows, 37% within ±0.15 (method gap, no data corruption). Gate partially passed — proceed cautiously to Phase 2 with diff disclosures.2026-06-05
✓ DONEPhase 2aDCF + WACC engine (NDX-100 baseline) — finance/damodaran/dcf.py; migration 023 valuation_snapshots/valuation_runs; reusable writer finance/common/snapshot_log.py. NDX-100 first run: WACC 93/97, DCF 2/97 — DCF gap = xbrl_concepts coverage (only 14/97 NDX tickers cached). Backfill blocker for Phase 2a′.2026-06-05
✓ DONEPhase 2a′R3K expansion — WACC 2900/2900 (100%); DCF 84/2900 (2.9%) gated by edgartools XBRL backfill (no_xbrl=2347/83.3%). 2816 gaps in valuation_gaps classified by root cause: no_xbrl/no_ocf/no_shares/financial_sector/reit/holdco/tracking_stock.2026-06-06
✓ DONEPhase 2bRelative multiples + peer z-scores — migration 032 damodaran_industry_multiples (94 industries × 24 cols: P/E + EV + Sales + Book/IC); finance/damodaran/multiples.py (model multiples_v1) computes trailing_pe, ev_ebitda, p_s, p_b, ev_ic per ticker + winsorized peer Z-scores across same-industry run peers (min 5). EV metrics suppressed for Banks/Insurance/REITs (Damodaran convention). Gaps logged uniform with DCF.2026-06-06
✓ DONEPhase 3Sensitivity tables + ERP overlay — 5×5 WACC×growth grid per ticker; ERP regime panel (66-year history, percentile, sparkline); backfilled 62 existing DCF rows; API: /api/finance/damodaran/erp + /api/finance/valuation/sensitivity-grid2026-06-06
✓ DONEPhase 4Real Valuation UI — per-ticker DCF card + industry/country browsers (2026-06-06); cross-section Screener added 2026-07-06 with plausibility quarantine2026-06-06
✓ DONEPhase 7EV Premium / Discount Tracker — market-vs-Damodaran premium per ticker, rolled to sector + index; nightly cron @ 03:30 ET2026-06-07
✓ MVPPhase 5Damodaran VEP — Blogspot RSS wired into expert-content-watcher; YouTube/backfill deferred (P3)2026-06-06
✓ DONE 2026-07-13DCF integrity (Approach A)Sector-aware growth cap (Utilities=5%, Financials=8%, default=10%), WACC floor rf+50bps, WACC−g ≥ 150bps guard, shares magnitude-continuity check, FCF scale guard. Screener now tracks clean / suspect / flagged tiers (G1, live counts above). Financials/REITs (banks — FCF-DCF inapplicable) now gap explicitly instead of ranking garbage (ASB was the #1 result). T1 synthetic tests 15/15. Pending (Approach B): XBRL unit fix for systematic wrong-scale filings (AEP, CALM). Commits ab1b0d0b·05f1d3cc2026-07-13
☐ PLANPhase 6Narrative-to-numbers tool (P3) — thesis → cash-flow projection → implied price—
Valuation Screener — cross-section /api/finance/valuation/screen
regime …
⚠ Directional only — not a buy list. Input guards shipped 2026-07-13 (sector-aware growth caps, WACC floor, shares continuity check, FCF scale guard). Three tiers: clean (computed without adjustments) · suspect (passed plausibility but a growth cap or spread floor was applied — treat as directional) · flagged (gross outliers, hidden by default). Remaining: XBRL value-scale errors on systematic wrong-scale filers (e.g. AEP, CALM) — unit column corrected 2026-07-13 (Approach B, 4f0ea571); value itself still wrong for this subset and will appear as suspect/flagged in the screener.
loading…
Ranks the latest nightly RUA valuation run by DCF margin-of-safety = (intrinsic − price)/price. Click any row to open it in the Per-Ticker card below. Coverage: live counts shown above; ~88 names have DCF intrinsic as of 2026-07-14 (Financials/REITs gap correctly since Approach A; was 121 pre-exclusion). WACC covers 2,929/2,929 names.
DIAGNOSTICS & PROVENANCE — beta reconciliation, per-run DCF/WACC dumps, ERP history. Foundation checks, not stock-picking tools.
Reconciliation — damodaran_reconciliation
Our median trailing-2y daily-return beta vs Damodaran's published cross-section. Universe: NDX-100 (N≥3 constituents per industry). Tolerance ±0.15.
loading…
Industry N Vintage Ours β Theirs β Δ ±0.15
Loading reconciliation data…
Method: finance/damodaran/reconcile_report_2026-06-04.md · Code: finance/damodaran/verify.py · Triage: 31 misses are method gaps (simple-median vs Damodaran's cap-weighted bottom-up), 0 are data corruption. Tighten by widening universe to R3K and switching to cap-weighted aggregation (Phase 1.5b, deferred).
DCF & WACC — valuation_snapshots (Phase 2a)
5y explicit + Gordon terminal. WACC from industry weights + ticker-level beta vs SPY. Δβ = ours − Damodaran industry β. Universe: NDX-100, latest run.
loading…
Ticker Industry WACC β Δβ Value/share TV %
Loading DCF data…
Code: finance/damodaran/dcf.py · Writer: finance/common/snapshot_log.py · DCF cells empty = xbrl_concepts coverage gap (FCF inputs not cached for that ticker; Phase 2a′ backfill blocker). Run a fresh baseline: finance/venv/bin/python -m finance.damodaran.dcf --universe NDX-100 --as-of YYYY-MM-DD.
ERP Overlay — Equity Risk Premium
Damodaran implied ERP (DCF on S&P 500 cash flows) · 1960–present · Regime: percentile vs history
loading…
Current ERP
—
Riskfree (T-Bond)
—
Expected Return
—
Percentile (1960–)
—
Historical Median
—
Year ERP (FCFE) T-Bond Rate Exp. Return S&P 500 Regime
Loading ERP history…
Source: damodaran_erp_history (Damodaran NYU Stern annual release) · Method: DCF/IRR on S&P 500 dividends + buybacks. Regime bands: <P25 = LOW (expensive), P25–P75 = NORMAL, >P75 = HIGH (cheap). ERP used as discount-rate input for all DCF valuations via finance/damodaran/dcf.py → cost_of_equity = rf + β × ERP.
Sensitivity Grid — 5×5 WACC × Growth
Per-ticker DCF value/share across (−200 → +200 bps) WACC × growth offsets. Base case highlighted. Color = relative value (green = higher, red = lower).
Enter a ticker and click Load Grid.
Grid cells = value/share ($). Rows = WACC offset (top = WACC −200 bps, bottom = +200 bps). Cols = growth offset (left = growth −200 bps, right = +200 bps). Base case (WACC offset=0, growth offset=0) is center cell, outlined in blue. Heatmap: color scaled within the 25-row grid; cells >P75 green, <P25 red, mid yellow. API: GET /api/finance/valuation/sensitivity-grid?ticker=AAPL
Per-Ticker Valuation — /api/finance/valuation/ticker
Composes DCF + WACC + multiples + ERP regime + forensic status. Click any row to drill in; intrinsic value is DCF-derived (5y explicit + Gordon TV), MoS is (intrinsic - market) / market.
Industry Snapshot — damodaran_industry_metrics × damodaran_industry_multiples
Default sort: cost_of_capital DESC (highest discount-rate industries first). Click headers to sort. Vintage shown is the latest Damodaran release.
Country Risk — damodaran_country_risk
Default sort: total_erp DESC (highest country-risk first). Country risk premium = base ERP + default-spread × risk multiplier. Apply when valuing non-US ops.
Plan & Memory
  • plans/damodaran-valuation-integration.md — locked 6-phase plan, §7 decisions, §8 execution order
  • memory/reference_damodaran_valuation_framework.md — canonical reference (DCF, ERP, country risk, narrative+numbers, lifecycle, sources)
  • memory/reference_damodaran_erp_2026.md — start-of-2026 ERP data point (4.23% at riskfree 4.18%; expected stock return 8.41%)
  • memory/MEMORY_finance_index.md — satellite index pointer
NYU Stern Datasets
EV Premium / Discount Tracker — Market vs Damodaran intrinsic
Daily Market Cap and Market EV vs Damodaran-implied intrinsic EV/equity, rolled up to GICS sector and index (SPX/NDX/RUI/RUT/RUA). Positive = market trades at premium; negative = discount. Bridge: market_ev = market_cap + total_debt + preferred + minority + leases - cash. APIs: /api/finance/valuation/ev-premium/{aggregate,snapshot,ticker}. Coverage % surfaces the XBRL backfill gap as a first-class signal — rises as ticker coverage expands.
Index: Window: Loading…
Sector Heatmap — latest
Sector N Cov $T MC EV vs Damo MC vs Damo EV vs Peer
Loading…
Per-Ticker Premium — /api/finance/valuation/ev-premium/ticker
 
Phase 7 shipped 2026-06-07 — EV premium tracker live. Daily Market-vs-Damodaran premium %s per ticker, rolled up to sector and index. Nightly cron valuation-ev-premium-daily @ 03:30 ET (4-stage: bridge → market_ev → ev_premium → aggregate). APIs: /api/finance/valuation/ev-premium/{aggregate,snapshot,ticker}. Coverage today: SPX 88/503 with market_ev, 2/503 with Damodaran intrinsic; expands with XBRL backfill. Phase 4 shipped 2026-06-06 — valuation-snapshots-nightly wired (DCF + WACC + multiples across R3K @ 02:30 ET). Next: Phase 5 (Damodaran VEP — blog/Substack/YouTube ingest).
ETF Trend Rotation
Momentum + trend-strength rotation across 12 ETFs (GLD, AGG, SPY, QQQ, TLT, UUP, VXX, SHY, VONV, VONG, VTV, VUG). Signal: 12-1 risk-adjusted momentum (skip last month) × trend filter (SMA-200). Top 4 = BUY. VXX excluded. Runner: python -m finance.scripts.run_etf_rotation
▲ BUY Signals
Loading…
↻ Last Rebalance
Loading…
Full Rankings —
Rank Ticker Signal Composite Momentum 12-1 Trend Vol 21d Ret 1m Ret 3m Ret 6m Ret 12m Price vs SMA200
BUY-Set Change History (last 30 days)
Loading…
Regime Call Accuracy SPY fwd return · risk-on→+ret correct · risk-off→−ret correct
Loading…
Date Flip SPY 5d ret 5d ✓ 10d ret 10d ✓ 20d ret 20d ✓ Src
Permutation Entropy (Bandt-Pompe)
Per-ticker complexity classifier — window=63 trading bars on adjusted close. Low PE → structured / trend-friendly. High PE → near-random / mean-reversion regime. Source: finance/indicators/entropy.py · gemchanger (@gemchange_ltd) ~2026-06-02 · Bandt & Pompe (2002).
Most structured (low PE·dim3)
Loading...
Most random (high PE·dim3)
Loading...
Factor Lab — Layer 4 Walk-Forward Leaderboard
Walk-forward cross-sectional IC + Sharpe for all Layer 3 factors (monthly eval dates, 12-month forward return). Regime split (mig 039): risk-on = n_buy ≥ 3 AND equity ETF in BUY, recomputed from prices_daily full history. NULL = bucket < 6 eval dates or < 4 months. Δ IC = risk-on minus risk-off (positive = factor stronger in risk-on). Regime columns fill as risk-off eval dates accumulate — risk-off periods are sparse so columns show — until ≥6 risk-off dates exist per metric. Runner: python -m finance.factor_lab.validate
View:
—
Metric Dir Gate IC Mean IC t Sharpe N IC risk-on IC risk-off Δ IC Sh risk-on Sh risk-off N on N off
—
ETF Factor Exposures — Holdings-Weighted
Holdings-weighted average factor score per ETF, built from SEC NPORT-P filings (fund_holdings) joined to metric_values on resolved ticker. Exposure = Σ(weight × score) / Σ(weight) over covered holdings. Cov% = fraction of ETF weight with a metric value. Top-3 dominant factors shown per ETF (by |exposure|). Large-cap blends with extreme factor tilt = crowding risk.
—
Leveraged-Pair Options — IV / Strategy Tracker
Daily EOD log of implied vol, realized vol and the IV−RV spread (the real edge) for the top leveraged pair (SOXL/SOXS), plus paper-tracked option structures marked-to-market so the data picks the winner. The edge is the variance risk premium (IV > RV) + IV mean-reversion, NOT the mechanical decay (~2.8% net CAGR — gross 9·σ² is a fantasy ceiling). Source: yfinance EOD chains (Massive options feed is not entitled on our key). Observational + paper-track only — no alerts, no orders (below the Factor-Lab L3 gate); defined-risk only (Rob's Rollover IRA). IV Rank accrues from 2026-06-22 (yfinance gives only current IV; RV-rank shown as a labelled day-one proxy).
Loading…
Current snapshot
LegSpot %ChgATM IV (front) ATM IV (next)RV 20d IV−RVIVR RV-rank*Exp. move
Loading…
IV / RV history
Paper-tracked structures — marked-to-market
Structure DTECredit/Debit Max lossP&L P&L / risk
Loading…
Leveraged 3× Pairs — Decay-Harvest Tracker
Strategy: short both legs of each 3× bull/bear pair, dollar-neutral, held with periodic rebalance — harvests daily-rebalance volatility decay (regime-agnostic; not mean-reversion). GROSS decay is a theoretical ceiling; NET CAGR is post-borrow and after rebalance + trend drawdowns — the gap is large and real. Thin legs (⚠ below the $20M liquidity floor) are likely hard-to-borrow, so realized net is worse still. Re-ranked daily from prices_daily (Bloomberg history + yfinance daily). Observational only — no alerts, no trading.
—
—
Loading…
Bubble Composite Monitor
Five-signal qualitative+quantitative composite anchored around the same bubble cluster: Michael Green passive-flow thesis · Scott Goodwin / Diameter Capital BDC credit risk · Ed Zitron AI no-business-model · BAB spread high-beta crowding proxy (flow) · BAB z-score crowding level (SPLV/SPHB ratio vs 1Y) · Thrasher VIX compression. Traffic light: 0–1 active = 🟢 LOW · 2 = 🟡 ELEVATED · 3 = 🟠 HIGH · ≥4 = 🔴 EXTREME.
⬜
Loading…
—
—
⬜ BAB Spread SPLV − SPHB
Loading…
⬜ VIX Dispersion Thrasher 2017
Loading…
⬜ BDC Credit Stress ARCC vs SPY
Loading…
⬜ AI No-Biz-Model Thesis Zitron / Goodwin
Loading…
⬜ BAB Z-Score SPLV/SPHB ratio vs 252d — crowding level
Loading…
⬜
Howell G3 Liquidity × Bubble Confluence cross-system trigger
Loading…
Integration hooks · BAB spread (flow) feeds ETF Rotation regime gate (risk-on = SPHB > SPLV) · BAB z-score (level) corroborates SpaceX/NDX QQQ entry thesis — high crowding = late cycle · BDC stress threshold (−5%) wires to Goodwin thesis trigger · Zitron flag is manual — edit /var/lib/jarvis/data/macro/zitron-flag.json to suppress · VIX dispersion: sentinel vix-dispersion-daily refreshes at 4:15 PM ET · Howell confluence: sentinel bubble-howell-confluence-daily at 6:30 PM ET weekdays (after rates-complex + global_liquidity)

📚 The Shelf

Each page: Overview · Core Theories · Formulas & Metrics · Key Ideas · Application to Jarvis · Known Issues · Sources
Where the real math is — prospect theory (λ ≈ 2.25) → Thinking, Fast and Slow · Brier score + Murphy decomposition → Superforecasting · power-law tail estimation (Clauset–Shalizi–Newman) → Ubiquity · allometric scaling (Kleiber ¾, urban β ≈ 0.85 / 1.15) → Scale · fat-tail moment conditions → Fooled by Randomness · valuation mechanics → Margin of Safety · capital-cycle factors → Capital Returns
Loading the shelf…
Corpus: knowledge/finance/books/ · seeded from Mauboussin's recommended reading · open master index · schema

📐 McCullough / Hedgeye — GIP Framework

@KeithMcCullough · Hedgeye Risk Management · updated 2026-08-28
Keith McCullough — Founder & CEO, Hedgeye Risk Management (2008). Buy-side PM at Carlyle-Blue Wave, Magnetar Capital, Falconhenge Partners & Dawson-Herman; Yale economics, captained Yale hockey. 40+ analysts covering the top 50 economies (~90% of global GDP). Framework: GIP (Growth · Inflation · Policy) — measures the year-over-year rate of change (2nd derivative), not the level, of Growth & Inflation. Free eBook: "Master the Market: A Hedge Fund Manager's Guide to Process and Profit" (54 pp) — ✅ PDF processed 2026-08-22. Paid tier (Hedgeye TV) has the full daily model; this tab tracks public content only.
📘 Landing: info.hedgeye.com/master-the-market  ·  📄 Download the actual PDF  ·  📝 Process KB  ·  🗞️ Hedgeye Daily archive — source links, parsed reads & captured PDFs
📐 Process / GIP 🗞️ Hedgeye Daily 📄 Daily Deck 📋 Weekly Notes 🗂️ Work Log
GIP Nowcast — Current Reading
Loading GIP nowcast…
📹 Video-confirmed (2026-08-28): Hedgeye runs a two-speed rate-of-change model — the YoY is the Quad classifier; a separate sequential (QoQ/MoM) signal is the early-warning/timing layer that generates the 3–6 month lead. Our GIP replica currently uses YoY only — the sequential component is the primary accuracy gap. Source: McCullough 2021-11-01 (n91gg9LBy9E @2:17) · KB §3
Nowcast Projections — CPI & GDP
Loading nowcast projections…
Current Quad Read — Monthly vs Quarterly
Loading current Quad read…
Hedgeye's published call vs our GIP-replica nowcast, split monthly (Macro Week Summary cadence) and quarterly. A ⚠ flags where the two lenses disagree on the regime.
Quad Positions — Hedgeye's Regime Map
The canonical Hedgeye map: Growth (vertical) × Inflation (horizontal), each measured as rate of change (2nd derivative). Where the economy sits dictates the positioning theme. Faithful replica of Hedgeye's published Quad Positions chart; the detailed per-quad asset grid is below.
📖 What Are The Quads? — Hedgeye's own definition (deck p.9, verbatim)
←———— GROWTH ————→

QUAD 1

Growth ↑   Inflation ↓
Pro-Growth Positioning

QUAD 2

Growth ↑   Inflation ↑
Pro-Growth + Inflation Hedges

QUAD 4

Growth ↓   Inflation ↓
Defensive + Volatility Assets

QUAD 3

Growth ↓   Inflation ↑
Stagflation Protection
←—————— INFLATION ——————→
© Hedgeye Risk Management — replica of their published Quad Positions map (Growth × Inflation, positioned Q1 Q2 / Q4 Q3). Detail + provenance: Process KB §3.
The Four Quads — GIP Regime Grid
McCullough measures GDP growth and inflation as rate of change (2nd derivative) — not whether they are high or low, but whether they are accelerating or decelerating. Policy (the third axis) determines which Quad a regime exits to. The current Quad drives sector rotation, asset allocation, and duration bets.
Canonical Hedgeye numbering (per the eBook, stated twice): Q1 Goldilocks · Q2 Reflation · Q3 Stagflation · Q4 Deflation. Asset rows are the published archetype, not a live portfolio.
Quad 1 — Goldilocks
Growth ↑  ·  Inflation ↓  ·  Policy: Neutral
Equities: Tech (XLK), Consumer Discretionary (XLY), Industrials (XLI), Nasdaq (QQQ)
Fixed income: Underweight long duration (TLT lags)
Commodities: Broadly positive; Gold: neutral / sideways
USD: Soft
Factors: High Beta, Momentum, Growth, Mid-caps  ·  Avoid: Utilities (XLU), Staples (XLP), Energy (XLE)
Quad 2 — Reflation
Growth ↑  ·  Inflation ↑  ·  Policy: Hawkish
Equities: Tech (XLK), Consumer Discretionary (XLY), Financials (XLF), Energy (XLE), Industrials (XLI)
Fixed income: Short duration — meaningful selloff in global duration
Commodities: Long — oil, copper, industrial metals; Gold: mixed→lower
USD: Softer vs risk currencies
Factors: High Beta, Secular Growth  ·  Avoid: Long-duration bonds, defensives
Quad 3 — Stagflation
Growth ↓  ·  Inflation ↑  ·  Policy: "In a box"
Long: Energy (XLE), Commodities (DBC), Gold (GLD) — signature Q3 winner, TIPS
Fixed income: Duration poor (inflation erodes hedge)
USD: Firm (usually) — very strong USD can cap commodities/gold
Factors: Low Beta, Value; the edge is commodity exposure
Avoid: Growth / high-beta equities, Financials
Quad 4 — Deflation
Growth ↓  ·  Inflation ↓  ·  Policy: Dovish
Equities: Defensives — Utilities (XLU), Staples (XLP), Healthcare (XLV), REITs (VNQ)
Fixed income: Long duration (TLT, SHY) — core long
Commodities: Short (oil); Gold (GLD): core long
USD: Long (UUP) — strengthens
Factors: Low Beta, Min-Vol, Quality, Div-Yield, Large-cap  ·  Avoid: Tech (XLK), Energy (XLE), high-beta
Risk Range™ Framework
Three Durations
Trade — immediate-term, ≤ 3 weeks
Trend — intermediate-term, ≥ 3 months (quarterly)
Tail — long-term, inside of ~3 years (secular / regime)

Inputs = Price, Volume, Volatility → a dynamic probable range (moves intraday). Buy the low end (#oversold), sell the high end (#overbought). Rooted in Mandelbrot fractal math (non-normal distribution); the exact formula is proprietary / undisclosed.
Bayesian Process
McCullough's process is explicitly Bayesian: he starts with a prior (the Quad), updates it with incoming macro data (non-farm payroll, CPI, PMI), and revises Quad calls in real time. Key signal hierarchy:
1. GDP growth rate of change (GIP: G)
2. Inflation rate of change (GIP: I)
3. Fed/policy response (GIP: P)
Quad calls typically change quarterly (aligned to data revisions), not daily.
Position Sizing & Trade Rules (from the eBook — Ch. 4)
MIN / MAX by asset class (sized to volatility)
Commodities (incl. crypto): 1% – 4%
Equities: 2% – 6%
Fixed Income: 3% – 10%
Single stocks — Long: 1% – 3% · Short: 0.5% – 2%

Stop-loss: −6% (evolved from −12%) — only after reaching MAX size. Add / trim in 50–150 bps increments; never all-in.
Buy the dip / stay in — bullish on TRADE and TREND, Risk Range printing higher-lows & higher-highs, and near the low end (LRR).

Get out — process-driven, not P&L-driven
Lower-Highs in Risk Range → reduce size
Lower-Highs + breaks TRADE support → cut to minimum
Lower-Highs + breaks TRADE + breaks TREND → out
Price + GIP-Quad Overlay
Q1 Goldilocks Q2 Reflation Q3 Stagflation Q4 Deflation
Regime shading behind adjusted price (view starts 2019, the earliest Quad coverage), split into quarterly and monthly reads. Hedgeye = published calls (gaps where no public call exists); Our Quad = GIP-replica nowcast (quarterly 2022Q4+, monthly ~2024+), experimental. Monthly bands are one month wide and coverage is shorter. The four toggles are independent — enable any combination; active overlays split the plot into equal horizontal strips (top→bottom in legend order). Hover for price + the active Quad on each strip.
Quad-Driven Model Portfolios
Loading model portfolios…
Archetype allocations sized to McCullough's §5 MIN/MAX bands — not a live trade list. Two models (monthly and quarterly), each showing our replica beside Hedgeye's published call; holdings diverge when the lenses disagree.
Sector Rotation by Quad
Sector / ETF Q1 Goldilocks
G↑ I↓
Q2 Reflation
G↑ I↑
Q3 Stagflation
G↓ I↑
Q4 Deflation
G↓ I↓
Technology (XLK)✅ BestGood❌ Avoid❌ Worst
Cons. Discretionary (XLY)✅ BestGood❌ Avoid❌ Avoid
Industrials (XLI)Good✅ BestNeutral❌ Avoid
Financials (XLF)Neutral✅ Best❌ Avoid❌ Avoid
Energy (XLE)❌ Avoid✅ Best✅ Best❌ Avoid
Materials (XLB)Neutral✅ GoodGood❌ Avoid
Cons. Staples (XLP)AvoidNeutralNeutral✅ Best
Utilities (XLU)❌ AvoidAvoidNeutral✅ Best
Healthcare (XLV)NeutralNeutralNeutral✅ Best
Real Estate (VNQ/XLRE)NeutralAvoid❌ Avoid✅ Best
Long Bonds (TLT)❌ Avoid❌ Avoid❌ Avoid✅ Best
Gold (GLD)NeutralNeutral✅ Best✅ Best
Commodities (DBC)Good✅ Best✅ Best❌ Avoid
Nasdaq (QQQ)✅ BestGood❌ Avoid❌ Avoid
Small Caps (IWM)NeutralGood❌ Avoid❌ Worst
USD (UUP)AvoidNeutralNeutral✅ Best
Cash / T-billsAvoidNeutralGood✅ Best
Quad → Forward Equity Returns Backtest
Quarterly quad_nowcast signal vs SPY/QQQ/TLT/GLD/IWM forward returns (3mo = 63td, 6mo = 126td). Entry = first trading day of the quarter. Latest-revised vintage — ex-post, not live out-of-sample. Run: python3 finance/macro/quad/backtest_quad_returns.py
Loading backtest…
Current Calls Tracker (last 30d · parsed from X posts + video transcripts · re-run: parse_mcc_calls.py --backfill 30)
Date Call Type Asset / Sector Direction Quad Context Source Status
No calls logged yet. Seed this table from @KeithMcCullough X posts and Hedgeye free content.
Rob: start populating as you read public calls — I'll wire a watcher once there's a baseline.
Video Library — YouTube Round 1 (2026-08-28)
84 videos identified · 25 processed · 14 transcribed · 78 methodology segments extracted. Full corpus: KB §13. High-priority Whisper ASR targets: 2fWVrKiDkq0 (Trade-Trend-Tail, 2015) · eOcq8Ni2YsI (Durations, 2021) · mkYqq0RYu5o (Evolution of signaling, 2021).
YearTitleChannelTXSegsLink
2016Macro Mentoring Session 11 — Inside Hedgeye's Macro ProcessHedgeye✅382▶
2017Macro Mentoring Session 12 — How to Invest For A Growing U.S. EconomyHedgeye✅317▶
2021The Outlook — USA Quad 2 in Q4? (30 segments — most dense)Hedgeye✅1158▶
2021Keith McCullough's Outlook for Chinese EquitiesHedgeye✅178▶
2020Here's What's Signaling Quad 4 In U.S. EconomyHedgeye✅119▶
2023What is the Difference Between a Shallow vs Deep Quad?Hedgeye✅110▶
2021How To Outperform In MacroHedgeye✅98▶
2021How To Increase Your Conviction Using A Multi-Factor ProcessHedgeye✅98▶
2019Improving Your Investment Process — The One Thing (Real Vision)Real Vision✅92▶
2024Growth + Inflation Slowing: China a Perfect Example of Quad 4Hedgeye✅79▶
2026How Hedgeye's Global Process Is Beating ConsensusHedgeye✅75▶
2020How My Personal Account Changes, When The Quads ChangeHedgeye✅63▶
2019Macro Show — Stay With This Exposure In Quad 3Hedgeye✅39▶
2019Macro Show Highlights: GDP↓ Inflation↑ = Quad 3Hedgeye✅32▶
2015The Thinking Behind My "Trade-Trend-Tail" Process ⚠️ Whisper targetHedgeye❌—▶
2016How To Think About VolumeHedgeye❌—▶
2018Quad 4 Is Here. Where Can You Still Get Long?Hedgeye❌—▶
2018What's Behind The Quad 4 Market HurricaneHedgeye❌—▶
2019How to "A/B Test" Your Investing PositionsHedgeye❌—▶
2019Quad 4 = Short TechHedgeye❌—▶
2019Quad 3 = Long Cannabis?Hedgeye❌—▶
2021How To Understand Trade and Trend Durations ⚠️ Whisper targetHedgeye❌—▶
2021Evolution Of Keith's Signaling Process Since Calling the 2008 Crash ⚠️ Whisper targetHedgeye❌—▶
2018The Macro Show (4/2/2018): A Hedge Fund Manager's PlaybookHedgeye❌—▶
📘 Resolved by processing the eBook
  • Quad numbering corrected — canonical is Q1 Goldilocks · Q2 Reflation · Q3 Stagflation · Q4 Deflation. The prior grid had the numbers scrambled; fixed above (source states it twice).
  • Risk Range formula — the eBook does not disclose it. Inputs are Price / Volume / Volatility; basis is Mandelbrot fractal math; the weighting is proprietary. A faithful replica isn't possible from public material — only a volatility-band approximation.
  • GIP data series — the eBook does not name the specific series (just "predictive tracking algorithms" for the top 50 economies). An independent nowcast would use FRED / BLS / BEA (GDP, CPI/PCE, PMI, NFP) + market proxies.
  • Position sizing, stops, durations, daily workflow — fully captured (sections above + KB).
📹 Resolved by video corpus (2026-08-28 — 14 transcripts, 78 segments)
  • GIP axis layout verbatim — Growth YoY on Y-axis, CPI YoY on X-axis; Q1=top-left, Q2=top-right, Q4=bottom-left, Q3=bottom-right. Confirmed by Director of Research Jones (2017-01-23). Source: NBVin93Y4M4 @0:40
  • Two-speed RoC ("sequential AND year over year") — McCullough explicitly tracks BOTH a YoY Quad classifier AND a sequential (QoQ/MoM) early-warning signal. Our engine is YoY-only — this is the primary replica gap. Source: n91gg9LBy9E @2:17 (McCullough 2021-11-01)
  • Bayesian overlay confirmed — after Quad-based factor ranking, apply a Bayesian overlay: Quad → factor ranking → Risk Range confirmation gate. Quad is necessary but not sufficient; the Signal must confirm. Source: NBVin93Y4M4 @3:28 (Jones 2017-01-23)
  • Gold Quad cross confirmed verbatim — "flip from Quad 3 to Quad 2 → go from long gold in Quad 3 to short gold in Quad 2." Source: n91gg9LBy9E @4:05
  • Quad 4 → Policy dovish confirmed verbatim — "when you have neither growth or inflation... Policy goes dovish." Source: n3u8fMYKmwA @1:10
  • Risk Range vol windows confirmed — 30/60/90-day realized vol + implied vol. Source: NBVin93Y4M4 @8:13
  • No contradictions with KB — all 11 key findings corroborate existing keith-mccullough-gip.md; new nuances (two-speed RoC, base effects, Bayesian gate) added to KB §13.
New gaps found: (a) base effect modeling — Hedgeye explicitly flags easy/hard comps; our engine doesn't. (b) 11 no-transcript videos — especially "Trade-Trend-Tail Process" (2015) and "Trade and Trend Durations" (2021), best Whisper ASR targets.
⚠️ Open — for Rob
  1. Homemade Quad tracker? — build a live GIP nowcast from our own FRED + Polygon data to mirror his framework without the paywall. Recommend: yes — highest-leverage next step; gives a live Quad estimate to key the sector table to.
  2. Calls tracker seeding — pull @KeithMcCullough's public posts and pre-populate the calls table. Recommend: yes — seed the last 30 days, then wire the 2h watcher.
  3. Hedgeye TV subscription — do you have one? Determines whether coverage stays public (X + YouTube) or can flag paywall-free segments.
  4. Whisper ASR on 11 no-transcript videos — especially "Trade-Trend-Tail Process" (2015, videoId: 2fWVrKiDkq0) and "Trade and Trend Durations" (2021, videoId: eOcq8Ni2YsI). These are the methodology-densest titles without captions. Est. 2–3h local Whisper run. Recommend: run next; highest-priority gap after sequential RoC.
Public Sources Being Monitored
X / Twitter
@KeithMcCullough — daily macro calls, Quad updates, Risk Range levels, sector rotation
Expert content watcher: highFreq: false (every 2h)
VEP expertId: keith-mccullough
YouTube — @Hedgeye ✅ Round 1 processed 2026-08-28
Channel: UCkDxvN-bcxsKkvJ3yyiGSVQ · 84 unique videos identified · 25 processed · 14 transcribed · 78 methodology segments
KB: §13 Video Corpus
Ongoing: VEP enrichment loop (30-min tick)
eBook — Master the Market (54 pp) ✅ processed 2026-08-22
KB: keith-mccullough-gip.md
📄 Actual PDF  ·  📘 Landing page
Hedgeye Free Content
app.hedgeye.com/feed_items — some free research items
hedgeye.com/research — free summaries
Monitoring: manual review or watcher expansion (pending Rob direction)
🗂️ Work Log — Proposed & Pending
Live from proposed_work + open_loops. Refreshed daily 18:00 ET. → Completed work & detail
Loading work log…
KB: keith-mccullough-gip.md · VEP ID: keith-mccullough · Framework: GIP Quads © Hedgeye Risk Management — methodology from public disclosures + the eBook · Last updated: 2026-08-28 (video corpus round 1 — 25 videos, 14 transcribed, 78 segments)
✅ Work Log — Completed
Every closed proposed_work item and resolved open loop in the McCullough/Hedgeye domain. Refreshed daily 18:00 ET alongside the pending card. ← back to pending
Loading completed work…

🗞️ Hedgeye Daily — capture archive & parsed reads

← McCullough / GIP tab
Captured through Rob's own authenticated Hedgeye subscription via hedgeye-collect.mjs. Personal reference only — Hedgeye prohibits redistribution. Gated assets are never bypassed; blocked items are recorded as blocked (see each day's collection report).
Capture dates
Loading…
Captured artifacts
Select a date.
Positions — hedgeye_positions
Select a date.
Claims — hedgeye_claims
Select a date.
Parsed reads — hedgeye_reads
Select a date.
Collection report
Select a date.
Instrument → Ticker map — hedgeye_ticker_map
Loading…

📄 Daily Deck — Macro Show slide reproduction

Each card is a rendered page from the Macro Show deck PDF — exact, auth-gated, personal-reference only.
📐 Our GIP Read Loading…
Loading…
⏳ Loading deck…

📋 Weekly Notes — Macro Week Summary

Structured reproduction of the Macro Week Summary Notes — prose sections, ticker links, and calendar. Auth-gated, personal-reference only.
⏳ No weekly notes rendered yet — renderer is being built (Phase 1).
—
Loading…
Close vs SMA(short) vs SMA(long) — — —
10/20 SMA Market Filter — Research basis
Filter is ON when Close > SMA(10) and Close > SMA(20). Otherwise OFF (hold cash/bonds). Popularized by Connors/Alvarez; validated by QuantifiedStrategies.com 20-year RSI study. Applied to SPY: ~65–70% time in market; max drawdown cut ~40–50% vs buy-and-hold with modest CAGR sacrifice (~1–3%). Most effective as a gate for other signals (RSI, momentum) rather than standalone. Crossover variant: SMA(10) > SMA(20) — same concept but smoother (fewer whipsaws, more lag). Risk-off asset when filter is OFF: cash, SHY (1-3y T-bill), or TLT (duration hedge). Source: QuantifiedStrategies.com — 20-Year RSI Study ↗

Price + SMA Filter — SPY

Shaded = signal ON (long); unshaded = signal OFF (cash)
Backtest — Full History
Signal Log — Last 50 Flips
Date State Close Direction
Loading…

Policy Makers

Treasury · Federal Reserve · Key officials shaping fiscal & monetary conditions
Scott Bessent Treasury Secretary 2025–present
Founder & CIO, Key Square Group (2015–2025). Former CIO, Soros Fund Management (2011–2015). Yale BA. Confirmed Jan 27, 2025 as 79th Treasury Secretary.
⚡ 3-3-3 Fiscal Plan
3%
Deficit / GDP by 2028
3%
Real GDP growth
+3M
boe/day energy
Newman counter-thesis: 2-6-0. CBO gap: ~$499B/yr to close. Track: reference_bessent_333_newman_260.md
"The Fed owns over 50% of all bonds maturing between 10 and 15 years from now." — Bessent, 2023
→ Distorted price discovery in the 10-15Y bucket; fiscal dominance trajectory; structural QT constraint.
FALSIFIABLE PLEDGES — monitor for reversal
⚠No Medicaid cuts — "empowering states"; block-grant language is the falsification vector
⚠TCJA pay-fors named — not dynamic-scoring only
⚠Entitlements off-table — SS/Medicare for full 4-year term
LINKS & SOURCES
🎬2023 Video — Fed 50% 10-15Y 📰Fox Business — 3-3-3 Plan 📚KB: scott-bessent-treasury.md
VEP ID: scott-bessent
Kevin Warsh Fed Gov. 2006–2011 🎯 Chair Frontrunner
Distinguished Visiting Fellow, Hoover Institution (Stanford). Former Fed Governor; Morgan Stanley M&A; NEC adviser to George W. Bush. Stanford BA · Harvard Law JD. Resigned Fed in 2011 over QE direction disagreements. Expected nomination for Fed Chair when Powell term expires May 2026.
On QE / Balance Sheet
Consistent critic since 2010. QE = financial repression, wealth redistribution to asset holders. QT is prerequisite to credible policy.
On Framework
Rules over discretion. Modified Taylor rule. FAIT (2020 framework) should be revised. Data-dependent language = backward-looking.
On Inflation
Hawkish. Early warning on 2021 transitory narrative. Fiscal dominance is the transmission mechanism for durable inflation.
On Independence
Defends political independence; opposes accountability opacity. Fed buying Treasuries ≈ fiscal agent of Treasury = independence compromised.
"Large-scale asset purchases are fiscal operations wearing monetary clothing." — Warsh, paraphrased from Hoover/WSJ commentary
→ Aligns with Bessent 2023 (Fed owns 50%+ of 10-15Y bucket). Shared diagnosis, complementary policy roles.
IF CONFIRMED AS CHAIR — MARKET IMPLICATIONS
↑ Long-end yields (less Fed buying) ↑ Accelerated QT FAIT framework review Tighter financial conditions ↑ Rules-based credibility premium
LINKS & SOURCES
🏛️Hoover Institution Profile 📰WSJ: "The Fed's Risky Experiment" (2012) 📜FOMC Historical Transcripts 📚KB: kevin-warsh-fed-governor.md
VEP ID: kevin-warsh
🔗 BESSENT ↔ WARSH — SHARED DIAGNOSIS
Both identify the same structural problem from complementary positions: the Fed's QE programs concentrated ownership of the 10-15Y Treasury bucket to the point where price discovery is impaired, and fiscal deficits running at 6-7% GDP have advanced the US toward fiscal dominance. Bessent (Treasury) controls the supply side of that equation — issuance duration management, deficit trajectory. Warsh (potential Chair) would control the demand side — QT pace, balance-sheet composition. If Warsh is confirmed, the fiscal/monetary coordination framework becomes the central macro signal to track.
STAGING — future policy makers
Jerome Powell (Fed Chair, through May 2026) Christopher Waller (Fed Governor — hawkish) Neel Kashkari (Minneapolis Fed) Janet Yellen (predecessor, context) Lutnick (Commerce) — tariff policy
Add cards above following this page's pattern. KB in knowledge/macro/ · VEP ID in expert-chat.db.

Options Platform

Multi-leg · Black-Scholes · now→expiration — computed on carbon checking…
Position
Legs — quantity is + long / − short
Type Strike Qty Expiration DTE IV Entry $
Net —
P&L — now to expiration
each leg valued at its own remaining time
Each leg's IV is held constant across time and spot. Vol term structure, skew, post-event vol crush, early assignment and discrete dividends are not modelled. DTE is calendar days to the expiration date you enter.
Days from now T+0
Position at T+0 — at the entered spot
Leg DTE left Theo Value Delta Gamma Vega Theta
Risk Summary — at expiration, net of cost basis
Stress Scenarios
Scenario Spot Vol Value P&L vs base