# CrashTestYourStrategy > Stress-regime intelligence layer for trading strategies. > Tests strategy behavior against a curated catalog of historical and synthetic stress cases, > classified along an explicit 10-axis failure-mode taxonomy. > Synthetic cross-asset portfolio + strategy stress, available on request via a form, with a > machine-readable realism/value trust layer — see "Portfolio & Strategy Stress" below. ## Overview CrashTestYourStrategy is a research-grade backtest framework that evaluates how trading strategies behave under specific market stress conditions. Rather than producing a single backtest number conditional on one historical path, it runs each strategy against a curated catalog of stress cases — real historical OHLC slices combined with controllable synthetic probes — and reports performance by failure mode. This is NOT a financial advisory tool. It does not make forecasts, recommendations, or predictions. All outputs are model-based simulations under simplified assumptions. ## Investment-Thesis Catalog (home page) The home page (`/`) is a curated catalog of investment theses. Each entry is a three-layer case study: (1) an economic **framework** stated as falsifiable claims with evidence grades, (2) the **portfolio** that framework implies (assets × risk tiers), and (3) the **stress evidence** — how that allocation holds up across synthetic regimes and real historical episodes, with per-claim verdicts. Descriptive, never advisory. - `/catalog/{slug}` — a single thesis in full. Live: - `/catalog/regime-balanced-debasement` (the Systemic Money Model → a regime-balanced allocation with a debasement tilt) - `/catalog/free-rider-portfolio` (the Free-Rider Portfolio Framework → cap-weighted aggregate ownership, VT/BND/BIL, tested against a concentrated winner-pick benchmark) ## Portfolio & Strategy Stress (on request) Cross-asset portfolio and strategy stress diagnostics — descriptive, never advisory. Separate from the single-asset strategy reports below. - **Access:** on request via the form at `https://crashtestyourstrategy.com/contact`. Describe a strategy or a portfolio; it is run internally and the result returned by email. Direct agent access (REST + MCP) exists but is token-gated — tokens are issued individually after contact; there is no open, unauthenticated compute endpoint. Each diagnostic returns a uniform result: a factual `grounding_summary` (the omitted tail an optimistic view ignores), a gate-capable `revision_required` flag, and `methodological_limitations`. The user decides what the outcome means. - `portfolio_stress_test` — stress a multi-asset portfolio (SPY / TLT / GOLD / BTC) across cross-asset regimes (baseline / risk-off / rate-shock). Reports per-regime drawdown, tail (VaR + Expected Shortfall), a per-leg decomposition, and a `cross_asset_finding` (diversification_intact / hedge_holds / hedge_breaks / shared_drawdown) — including the bond hedge that can BREAK under a rate shock (the 2022 pattern). Plus the full per-path drawdown DISTRIBUTION (`path_drawdown_quantiles` p50–p95/worst, `n_paths`), `probability_weighting` (scenario weights: unconditional substrate shares + a nowcast tilt from the validated regime layer — model-conditional frequencies, not real-world probabilities), `derisk_comparison`: buy-and-hold vs a −10% drawdown-stop on the same paths, and `realism_basis` self-certifying the result's realism per asset. Optional `costs` (rebalancing policy + expense ratios + per-trade cost) adds a `cost_impact` block via a path-loop engine with real unit accounting — the rebalancing POLICY effect and the pure COST drag deliberately separated. - `challenge_strategy` — surface a strategy's structural vulnerabilities (no vulnerability-free claim survives). - `backtest_integrity` — deflated-Sharpe + regime-coverage check on a claimed backtest (catches selection-effect over-optimism). - `ips_gate` — check a portfolio against investment-policy constraints (max drawdown tolerance, time horizon, liquidity need). Checks the full drawdown DISTRIBUTION, not just the typical path: reports `breach_probability` (share of simulated paths exceeding the stated tolerance) and flags material tail risk (`drawdown_tail_risk`) even when the median path passes. - `factor_decomposition` — capital weight vs RISK contribution (where the risk actually sits). - `portfolio_compare` — paired comparison of two portfolios (reference vs candidate revision) on IDENTICAL simulated paths, so every delta is attributable to the weights, not seed noise. Flags a candidate that deepens the worst-path drawdown or introduces a new diversification failure. - `long_horizon_stress` — multi-year wealth paths for a savings plan (monthly contribution) or a withdrawal plan (inflation-indexed): terminal-wealth quantiles (nominal + real), ruin/shortfall probabilities, a sequence-of-returns diagnosis (same plan, bad vs good first two years), and a drift-sensitivity block. Long-run drift is a stated, overridable ASSUMPTION (re-anchored from the stress substrate — both disclosed); paths chain ~2y model blocks; costs on by default. Descriptive — no rate, allocation, or product is recommended. - `regime_outlook` — model-conditional probabilities that an asset (SPY / QQQ / GLD / TLT) is in each regime (BULL / SIDEWAYS / BEAR / CRISIS) after a 5- or 21-trading-day horizon, with the persistence and unconditional baselines alongside. Preregistered + out-of-sample validated (annual seasonality was tested and falsified — deliberately excluded); only validated assets/horizons are accepted. Descriptive probabilities of operationally defined regime classes — not a market prediction. **Trust layer — check the evidence before trusting a result:** - `validation://{asset}` — the model's daily stylized facts measured vs empirical bands, with a per-fact verdict (in-band / caveat). Honest by construction: a missed fact is a caveat, not hidden (e.g. SPY/TLT match all 18 facts; GOLD/BTC carry one kurtosis caveat). - `validation://value` — the numeric comparison vs a Gauss-copula baseline: where the cross-asset paths add value (regime-conditional correlation strengthening, joint-crash tail dependence) and where they do NOT (single-asset marginals). Universe + schema: `portfolio://universe`. BaFin/WpHG: reports what the simulated portfolio DID across stress regimes; no ranking, no buy/sell signal, no suitability claim. ## Architecture - **Case catalog**: 63 stress cases — 31 empirical anchors (real historical OHLC: Lehman 2008, Dotcom 2000, COVID 2020, Luna 2022, Volmageddon 2018, Taper Tantrum 2013, etc.) plus 32 synthetic stress probes (50 Monte-Carlo replicas each, across profile families: low-vol grind, controlled whipsaw, slow-stagflation, hyperinflation, demand-destruction, sharp-crash setup, vol-expansion setup, liquidity-stress setup, v-recovery setup, slow-decline-with-partial-recovery, slow-crash-no-recovery — the last two are intentionally distinct stress hardness levels). - **Failure-mode taxonomy (10 axes; 9 score buckets since May 2026)**: TREND_UP, TREND_DOWN, SIDEWAYS, VOL_EXPANSION, VOL_COMPRESSION, SHARP_CRASH, SLOW_BEAR, V_RECOVERY, WHIPSAW, LIQUIDITY_STRESS. V_RECOVERY is treated as a diagnostic path pattern (decomposed into SHARP_CRASH down-leg + TREND_UP up-leg) for score aggregation, leaving 9 effective score buckets. The 10-axis label is retained for case-tagging and UI continuity. Every case is tagged with one or more failure modes; a single case (e.g. Lehman 2008) can contribute to multiple buckets simultaneously. - **Conditional-Distribution-Engine (May 2026 — Phase 17/18a)**: profile names describe *imposed conditions* on the regime-switching simulator, not output guarantees. Per-replica ex-post FM-classification against operational gating definitions; replicas distribute across the FM spectrum, may be multi-tagged, may be sub-threshold. Per-FM-bucket scoring with shrinkage and dominance-weighted multi-FM attribution is implemented in V2 (`calculate_robustness_score_v2`). **V2 is live in production since 2026-05-15** with a-priori-augmentation (Phase 18d) for assets with sparse ex-post coverage. V1 retained as `calculate_robustness_score` for diagnostics. See `/verifiability` for full architecture-status disclosure. - **Aggregation**: Strategy performance is computed per case, then aggregated by failure mode to produce a robustness score (0-100) plus a per-mode breakdown. - **Synthetic-probe simulator**: a regime-switching stochastic-volatility model; per-asset character informed by CFTC Commitment-of-Traders data (~3,000 weekly reports). Used only for the 32 synthetic stress probes, not for replicating full instruments. - **Backtest correctness**: Implements the Löw, Maier-Paape & Platen (2015) methodology for ambiguous OHLC candles, defaulting to worst-case execution. ## Supported Assets SPY (S&P 500), QQQ (Nasdaq 100), BTC (Bitcoin), ETH (Ethereum), GOLD, WTI (Crude Oil), VIX (Volatility Index). Each asset has its own case set and CoT-derived agent calibration where applicable. ## Supported Indicators SMA, EMA, RSI, MACD, Bollinger Bands, ATR, Stochastic, CCI, Williams %R, Supertrend, Parabolic SAR, Aroon, Donchian, and others. Not yet supported: volume-based indicators (OBV, VWAP, MFI, CMF). Strategies referencing volume parse correctly, but volume-dependent signals do not fire. Synthetic case OHLCV data includes volume columns; the engine does not generate signals from volume. ## Pre-Computed Strategy Reports Thirteen curated strategies have pre-computed reports available at /s/{slug}, designed to span contrasting failure-mode profiles rather than indicator redundancy. Nine are calibrated against the SPY case set; four are asset-diversified variants on BTC and GOLD. The full catalog is browsable as a hub at /strategies (grouped by instrument), which carries ItemList JSON-LD enumerating every /s/{slug} report. Faceted landing pages narrow the catalog to a single instrument or strategy style — each is prerendered with its own canonical URL and ItemList JSON-LD, so they can be cited or indexed individually: - /strategies/asset/spy — strategies for the S&P 500 - /strategies/asset/btc — strategies for Bitcoin - /strategies/asset/gold — strategies for Gold - /strategies/style/trend-following — moving-average crossovers, Supertrend, trend-filters - /strategies/style/mean-reversion — RSI, Bollinger bounces, oscillator-based entries - /strategies/style/momentum — MACD crossovers, momentum filters - /strategies/style/passive — buy-and-hold baselines - /s/buy-hold-spy — Buy and Hold S&P 500 (passive equity baseline) - /s/buy-hold-btc — Buy and Hold Bitcoin (passive crypto baseline) - /s/sma-200-crossover — SMA 200 Crossover (long-term trend-following) - /s/sma-200-trend-gold — SMA 200 Trend Following (GOLD; secular-trend asset) - /s/ema-12-26-crossover — EMA 12/26 Crossover (short-term trend) - /s/ema-12-26-crossover-btc — EMA 12/26 Crossover (BTC; crypto momentum) - /s/macd-crossover — MACD Signal Line Crossover (composite trend + momentum) - /s/macd-rsi-confirmation-btc — MACD + RSI Confirmation (BTC; momentum + filter) - /s/rsi-30-70 — RSI 30/70 Mean Reversion (oscillator-based mean-reversion) - /s/rsi-30-70-btc — RSI 30/70 Mean Reversion (BTC; crypto mean-reversion) - /s/bollinger-bounce — Bollinger Band Bounce (volatility-band mean-reversion) - /s/rsi-sma-trend-filter — RSI with SMA-200 Trend Filter (hybrid) - /s/supertrend — Supertrend Strategy (volatility-adaptive trend) Each report contains: robustness score (0-100), failure-mode breakdown per regime, worst-case simulated drawdown (WCDD-95), distribution statistics, score decomposition (drawdown resilience, failure rate, regime consistency, return stability, path sensitivity), best/median/worst path equity curves, and example trades per regime. For long-warm-up indicators (e.g. SMA-200, requiring 300 days), synthetic cases are automatically skipped if the case duration cannot accommodate warm-up plus a tradeable window. The skip is reported transparently in the response. JSON access: `GET /api/v1/strategies/{slug}`. ## Per-Asset Case Coverage - **SPY**: Bull Run 2017, China Sideways 2015, Fed Bear 2022 H2, Lehman GFC 2008, COVID 2020, Vol Shock Feb 2018, plus 4 synthetic probes - **QQQ**: Dotcom Crash 2000, Tech Rally 2017, COVID + Tech V-Recovery, Tech Bear 2022, Vol Shock Feb 2018, plus 4 synthetic probes - **VIX**: Low Vol 2017, Volmageddon 2018, COVID Spike 2020 - **BTC**: 2017 Parabolic ATH, Crypto Winter 2018, Luna Collapse 2022, FTX Collapse 2022, Sideways 2023, plus 1 synthetic probe - **ETH**: Crypto Winter 2018, Vol Shock 2018, COVID + DeFi Recovery 2020, plus 1 synthetic probe - **WTI**: Pre-GFC Oil Boom, Saudi Oil War 2014-2015, Sideways 2018, Negative Oil 2020, plus 1 synthetic probe - **GOLD**: Post-GFC Inflation Hedge 2010, Sideways 2014, Taper Tantrum 2013, COVID + ATH 2020, plus 2 synthetic probes API endpoints: - `GET /api/v1/strategies/{slug}/cases?asset={asset}` — all cases for an asset (Strategy vs Buy-and-Hold reference) - `GET /api/v1/strategies/{slug}/cases/{asset}/{case_id}` — single case with equity curves - `GET /api/v1/strategies/case-assets/list` — assets with case studies ## Example Queries This Site Answers - "How does SMA 200 crossover perform in the 2008 financial crisis?" - "Is RSI 30/70 robust during the Luna collapse?" - "Which trading strategies survive sharp crashes historically?" - "How fragile are mean-reversion strategies under volatility expansion?" - "Strategy behavior during whipsaw markets — what works?" - "Worst-case drawdown for momentum strategies in COVID 2020?" - "Buy-and-hold vs trend-following during slow bear regimes?" - "Cross-asset robustness: does an SPY-tuned strategy work on Bitcoin?" Each case-study response provides: strategy total return, maximum drawdown, Sharpe ratio, equity curve (single curve for empirical anchors; median plus p25/p75 band for synthetic cases), and buy-and-hold reference for direct comparison. ## Failure-Mode Definitions The 10-axis failure-mode taxonomy is defined at `/methodology` with operational thresholds, historical examples, common strategy failure patterns, and distinctions between similar regimes. Each definition is published as a Schema.org DefinedTerm to support machine extraction. Direct anchors: `/methodology#failure-mode-{slug}` (e.g. sharp-crash, vol-expansion, whipsaw, liquidity-stress). ## Verifiability — Falsifiable Model Claims Synthetic stress profiles are accompanied by measurable statistical claims. For each profile-asset combination, the site publishes claimed operational properties (drawdown ranges, realized-volatility bounds, sign-change frequency, etc.) alongside the measured aggregate over 50 Monte Carlo replicas — including transparent disclosure of where measured values deviate from the claimed range. - `/verifiability` — browsable per-dataset claim validation with aggregated metrics across all 32 synthetic stress datasets, plus the full off-band calibration disclosure (BTC empirical-identifiability verification, Wilson 95% CI for marginal cases, 9-point methodology-limitations list including score definition-dependence) - `/verifiability_snapshot.json` — raw machine-readable snapshot (CC-BY 4.0, refreshed on data regeneration) - Schema.org Dataset markup published on the verifiability page This is the falsifiability layer: model behavior is not asserted but measured against published claims. ## Pages - `/` — Investment-thesis catalog (home): curated theses, each a framework → portfolio → stress-evidence case study - `/catalog/{slug}` — a single thesis in full (framework, derived portfolio, stress evidence); live: `/catalog/regime-balanced-debasement`, `/catalog/free-rider-portfolio` - `/contact` — commission a bespoke analysis or portfolio framework ("work with me") - `/s/{slug}` — Pre-computed strategy reports - `/methodology` — How it works, conceptually: the regime-switching simulator, stylized facts, the clustering gate, the failure-mode taxonomy, scope of claims - `/reference` — Deep technical reference: architecture, per-asset bands, the validated regime catalog, documented limits - `/legal/impressum` — Impressum (German) - `/legal/datenschutz` — DSGVO/GDPR privacy policy - `/legal/disclaimer` — Legal disclaimer ## API Endpoints (read-only, public) **Investment-thesis catalog (home page):** [https://crashtestyourstrategy.com/](https://crashtestyourstrategy.com/) — curated investment theses, each a framework → portfolio → stress-evidence case study. Descriptive, not advisory. The machine-readable agent capability declaration lives at /interop (below). **Full machine-readable capability declaration:** [https://crashtestyourstrategy.com/interop](https://crashtestyourstrategy.com/interop) — canonical input/output schemas, controlled vocabularies (behavior, severity, impact_type, regime classes), example agent workflows, methodological boundaries. **Query pages (natural-language retrieval, FAQPage JSON-LD):** [https://crashtestyourstrategy.com/queries](https://crashtestyourstrategy.com/queries) — question-shaped pages answering common queries with live catalog data: - `/queries/does-rsi-work-on-bitcoin` - `/queries/how-do-strategies-behave-in-liquidity-stress` - `/queries/how-do-strategies-behave-in-sharp-crashes` - `/queries/most-robust-spy-strategies` - `/queries/most-robust-btc-strategies` - `/queries/buy-and-hold-vs-active-strategies` - `/queries/worst-case-drawdowns-catalog` - `/queries/how-trading-strategies-are-stress-tested` **Failure-mode ontology (stable URLs, citation-ready):** [https://crashtestyourstrategy.com/ontology](https://crashtestyourstrategy.com/ontology) — DefinedTermSet root listing all 10 failure-modes. Each term has its own stable page with full operational definition + DefinedTerm JSON-LD: - `/ontology/trend-up` · TREND_UP - `/ontology/trend-down` · TREND_DOWN - `/ontology/sideways` · SIDEWAYS - `/ontology/vol-expansion` · VOL_EXPANSION - `/ontology/vol-compression` · VOL_COMPRESSION - `/ontology/sharp-crash` · SHARP_CRASH - `/ontology/slow-bear` · SLOW_BEAR - `/ontology/v-recovery` · V_RECOVERY (diagnostic only) - `/ontology/whipsaw` · WHIPSAW - `/ontology/liquidity-stress` · LIQUIDITY_STRESS ### Agent-optimised (recommended for LLM/agent consumers) - `POST /api/v1/agent/analyze` — one-shot strategy analysis with structured robustness semantics (behavior labels per regime, top failure modes with impact-type ontology, evaluation confidence, methodological limitations). Accepts either natural-language description or canonical strategy JSON. Output is descriptive, not advisory — the agent decides what "suitable" means. Schema family: `ctys-agent`, version: `ctys-agent-v1`. Request example (natural language): ```json { "input_type": "natural_language", "strategy_text": "Buy BTC when RSI(14) falls below 30, sell when above 70", "asset": "BTC", "num_runs": 30 } ``` Request example (canonical JSON): ```json { "input_type": "strategy_json", "strategy": { /* same shape as /backtest/robustness/quick */ }, "asset": "SPY" } ``` Response (excerpt): ```json { "robustness_score": 53.2, "robustness_class": "moderate", "evaluation_confidence": { "level": "moderate", "classified_ratio": 0.59, "sparse_bucket_count": 5, "augmented_replicas_total": 305 }, "summary": "Robustness 53/100 (moderate). Strong in TREND_UP, SLOW_BEAR. Weak in LIQUIDITY_STRESS.", "per_regime": [{ "regime": "TREND_UP", "behavior": "stable", "score": 81.6, ... }, ...], "top_failure_modes": [{ "mode": "LIQUIDITY_STRESS", "severity": "high", "impact_type": "drawdown_expansion", "expected_behavior": "drawdowns deeper than the pool baseline", "bucket_score": 37.0, "delta_from_pool": -14.5 }], "regime_class_summary": { "trend_regimes": { "avg_score": 73.7, "behavior": "stable", "buckets": ["TREND_UP", "TREND_DOWN", "SLOW_BEAR"] }, ... }, "caveats": [...], "methodological_limitations": [...], "report_url": "https://crashtestyourstrategy.com/s/buy-hold-btc", "schema_version": "ctys-agent-v1" } ``` - `GET /api/v1/catalog/query` — semantic discovery of pre-computed reports by indicator, asset, failure-mode coverage, regime class, or robustness class. Query params: `indicator`, `asset`, `failure_mode`, `regime_class`, `robustness_class`, `min_score`, `max_score`. Examples: - `?indicator=RSI&asset=BTC` — RSI strategies on BTC - `?failure_mode=SHARP_CRASH` — strategies scored against SHARP_CRASH bucket - `?robustness_class=robust&min_score=70` — top-tier strategies ### Read-only canonical reports - `GET /api/v1/strategies/` — list of pre-computed strategies - `GET /api/v1/strategies/{slug}` — full strategy report (JSON, UI-shape) - `GET /api/v1/strategies/{slug}/cases?asset={asset}` — case-study results per asset - `GET /api/v1/strategies/{slug}/cases/{asset}/{case_id}` — single case detail ### Lower-level execution (for callers that want to compose steps) - `POST /api/v1/nl/parse` — parse a natural-language description (UI-shape; agents should prefer `/agent/analyze`) - `POST /api/v1/backtest/robustness/quick` — run a strategy and return UI-shape JSON ## Technical Details - Backend: FastAPI (Python), async SQLAlchemy, deployed on Hetzner - Frontend: React 19 + TypeScript + Tailwind CSS + Vite - Strategy parsing: LLM-based with structured-output JSON-Schema enforcement (GPT-4o-mini via OpenRouter, Llama via Groq, Claude as fallback) - Synthetic-probe simulator: Numba JIT-compiled, per-asset CoT calibration - Backtest engine: Löw, Maier-Paape & Platen (2015) ambiguous-candle methodology ## Important Legal Notice This tool is for informational and educational purposes only. It does not constitute financial advice, investment recommendations, or forecasts. Results are based on model-driven simulations under simplified assumptions. Real market outcomes may differ significantly. Individual financial circumstances are not considered. Operated under German jurisdiction (BaFin/WpHG framework). All published analyses use neutral framing — no rankings, no directive language, no buy/sell signals. ## Contact Website: https://crashtestyourstrategy.com Legal: /legal/impressum