income_desk Release Readiness

v1.0.0 • 2026-03-26 • Markets: US, India
✅ GO
31
APIs Tested
118/118 (100.0%)
Invariants Passed
149263ms
Total Duration
8/8
Stages Passed

Trading Workflow Validation

1 SCAN ✅ PASS
Market context assessment and candidate screening 10270ms 8 APIs | 23 checks | 23 passed
context.assess income_desk.service.context 2266ms PASS — 4/4 invariants

Invariant Checks

context returns MarketContext
environment_label is valid
position_size_factor is 0-1
trading_allowed is bool

API Replay (eTrading Verification)

Inputs
{}
Outputs (MarketContext)
{
  "as_of_date": "2026-03-26",
  "market": "US",
  "macro": {
    "events": [
      {
        "event_type": "pce",
        "date": "2026-03-27",
        "name": "PCE Price Index",
        "impact": "medium",
        "description": "Fed's preferred inflation measure.",
        "options_impact": "Moderate IV impact. Watch for surprises vs expectations."
      },
      {
        "event_type": "nfp",
        "date": "2026-04-03",
        "name": "Non-Farm Payrolls",
        "impact": "high",
        "description": "Monthly employment report from BLS.",
        "options_impact": "Pre-market volatility spike. Short-dated options repriced."
      },
      {
        "event_type": "rbi_mpc",
        "date": "2026-04-08",
        "name": "RBI MPC Rate Decision",
        "impact": "high",
        "description": "Reserve Bank of India Monetary Policy Committee rate decision.",
        "options_impact": "High impact on NIFTY/BANKNIFTY options. IV crush after announcement. Bank stocks sensitive."
      },
      {
        "event_type": "cpi",
        "date": "2026-04-14",
        "name": "CPI Report",
        "impact": "high",
        "description": "Consumer Price Index \u2014 inflation gauge.",
        "options_impact": "Major IV event. Impacts rate expectations and equity vol."
      },
      {
        "event_type": "pce",
        "date": "2026-04-24",
        "name": "PCE Price Index",
        "impact": "medium",
        "description": "Fed's preferred inflation measure.",
        "options_impact": "Moderate IV impact. Watch for surprises vs expectations."
      },
      {
        "event_type": "fomc",
        "date": "2026-04-29",
        "name": "FOMC Rate Decision",
        "impact": "high",
        "description": "Federal Reserve interest rate decision and policy statement.",
        "options_impact": "IV crush after announcement. Straddle sellers target this date."
      },
      {
        "event_type": "gdp",
        "date": "2026-04-30",
        "name": "GDP Report",
        "impact": "medium",
        "description": "Quarterly GDP advance estimate.",
        "options_impact": "Moderate impact. Sector rotation possible on surprises."
      },
      {
        "event_type": "nfp",
        "date": "2026-05-01",
        "name": "Non-Farm Payrolls",
        "impact": "high",
        "description": "Monthly employment report from BLS.",
        "options_impact": "Pre-market volatility spike. Short-dated options repriced."
      },
      {
        "event_type": "cpi",
        "date": "2026-05-12",
        "name": "CPI Report",
        "impact": "high",
        "description": "Consumer Price Index \u2014 inflation gauge.",
        "options_impact": "Major IV event. Impacts rate expectations and equity vol."
      }
    ],
    "next_event": {
      "event_type": "pce",
      "date": "2026-03-27",
      "name": "PCE Price Index",
      "impact": "medium",
      "description": "Fed's preferred inflation measure.",
      "options_impact": "Moderate IV impact. Watch for surprises vs expectations."
    },
    "days_to_next": 1,
    "next_fomc": {
      "event_type": "fomc",
      "date": "2026-04-29",
      "name": "FOMC Rate Decision",
      "impact": "high",
      "description": "Federal Reserve interest rate decision and policy statement.",
      "options_impact": "IV crush after announcement. Straddle sellers target this date."
    },
    "days_to_next_fomc": 34,
    "next_rbi": {
      "event_type": "rbi_mpc",
      "date": "2026-04-08",
      "name": "RBI MPC Rate Decision",
      "impact": "high",
      "description": "Reserve Bank of India Monetary Policy Committee rate decision.",
      "options_impact": "High impact on NIFTY/BANKNIFTY options. IV crush after announcement. Bank stocks sensitive."
    },
    "days_to_next_rbi": 13,
    "events_next_7_days": [
      {
        "event_type": "pce",
        "date": "2026-03-27",
        "name": "PCE Price Index",
        "impact": "medium",
        "description": "Fed's preferred inflation measure.",
        "options_impact": "Moderate IV impact. Watch for surprises vs expectations."
      }
    ],
    "events_next_30_days": [
      {
        "event_type": "pce",
        "date": "2026-03-27",
        "name": "PCE Price Index",
        "impact": "medium",
        "description": "Fed's preferred inflation measure.",
        "options_impact": "Moderate IV impact. Watch for surprises vs expectations."
      },
      {
        "event_type": "nfp",
        "date": "2026-04-03",
        "name": "Non-Farm Payrolls",
        "impact": "high",
        "description": "Monthly employment report from BLS.",
        "options_impact": "Pre-market volatility spike. Short-dated options repriced."
      },
      {
        "event_type": "rbi_mpc",
        "date": "2026-04-08",
        "name": "RBI MPC Rate Decision",
        "impact": "high",
        "description": "Reserve Bank of India Monetary Policy Committee rate decision.",
        "options_impact": "High impact on NIFTY/BANKNIFTY options. IV crush after announcement. Bank stocks sensitive."
      },
      {
        "event_type": "cpi",
        "date": "2026-04-14",
        "name": "CPI Report",
        "impact": "high",
        "description": "Consumer Price Index \u2014 inflation gauge.",
        "options_impact": "Major IV event. Impacts rate expectations and equity vol."
      },
      {
        "event_type": "pce",
        "date": "2026-04-24",
        "name": "PCE Price Index",
        "impact": "medium",
        "description": "Fed's preferred inflation measure.",
        "options_impact": "Moderate IV impact. Watch for surprises vs expectations."
      }
    ]
  },
  "black_swan": {
    "as_of_date": "2026-03-26",
    "alert_level": "elevated",
    "composite_score": 0.2807,
    "circuit_breakers": [
      {
        "name": "vix_extreme",
        "triggered": false,
        "value": 27.440000534057617,
        "threshold": 40.0,
        "description": "VIX > 40"
      },
      {
        "name": "vix_backwardation",
        "triggered": false,
        "value": 1.010309303689933,
        "threshold": 1.2,
        "description": "VIX/VIX3M > 1.20"
      },
      {
        "name": "spy_crash",
        "triggered": false,
        "value": -1.7858744158138706,
        "threshold": -4.0,
        "description": "SPY 1-day return < -4%"
      },
      {
        "name": "credit_collapse",
        "triggered": false,
        "value": 0.15339336515216573,
        "threshold": -3.0,
        "description": "HYG/LQD 1-day drop > 3%"
      }
    ],
    "indicators": [
      {
        "name": "VIX Level",
        "value": 27.440000534057617,
        "score": 0.4232,
        "status": "warning",
        "weight": 0.2,
        "description": "VIX at 27.4"
      },
      {
        "name": "VIX Term Structure",
        "value": 1.010309303689933,
        "score": 0.4809,
        "status": "warning",
        "weight": 0.12,
        "description": "VIX/VIX3M ratio 1.010 (backwardation)"
      },
      {
        "name": "Credit Stress",
        "value": 0.5256754460436053,
        "score": 0.0,
        "status": "normal",
        "weight": 0.15,
        "description": "HYG/LQD ratio change +0.53% from 20d avg"
      },
      {
        "name": "SPY Drawdown",
        "value": -1.7858744158138706,
        "score": 0.5358,
        "status": "danger",
        "weight": 0.13,
        "description": "SPY 1-day return -1.79%"
      },
      {
        "name": "RV vs IV",
        "value": -13.529338236808455,
        "score": 0.0,
        "status": "normal",
        "weight": 0.1,
        "description": "20d RV minus VIX: -13.5 pts"
      },
      {
        "name": "Treasury Stress",
        "value": 0.8406215549557117,
        "score": 0.0,
        "status": "normal",
        "weight": 0.08,
        "description": "TLT absolute 1-day return 0.84%"
      },
      {
        "name": "EM Contagion",
        "value": -1.4471015197613069,
        "score": 0.3671,
        "status": "warning",
        "weight": 0.08,
        "description": "EEM/SPY ratio change -1.45% from 20d avg"
      },
      {
        "name": "Yield Curve",
        "value": null,
        "score": 0.0,
        "status": "unavailable",
        "weight": 0.07,
        "description": "Yield curve data unavailable (FRED)"
      },
      {
        "name": "Put/Call Ratio",
        "value": null,
        "score": 0.0,
        "status": "unavailable",
        "weight": 0.07,
        "description": "Put/call data unavailable (FRED)"
      }
    ],
    "triggered_breakers": 0,
    "action": "Reduce new position sizes. Tighten stops on existing positions.",
    "summary": "ELEVATED: Composite stress 28%. 1 indicator(s) at danger/critical. Reduce new position sizes. Tighten stops on existing positions."
  },
  "intermarket": {
    "entries": [
      {
        "ticker": "SPY",
        "regime": 4,
        "confidence": 0.9836054561184302,
        "trend_direction": "bearish"
      },
      {
        "ticker": "QQQ",
        "regime": 3,
        "confidence": 0.9966115442732469,
        "trend_direction": "bullish"
      },
      {
        "ticker": "TLT",
        "regime": 2,
        "confidence": 0.999946515334789,
        "trend_direction": null
      },
      {
        "ticker": "GLD",
        "regime": 3,
        "confidence": 0.9625419571649921,
        "trend_direction": "bearish"
      },
      {
        "ticker": "HYG",
        "regime": 2,
        "confidence": 0.8905240426012557,
        "trend_direction": null
      }
    ],
    "dominant_regime": 3,
    "risk_on_count": 2,
    "risk_off_count": 3,
    "divergence": true,
    "summary": "Risk-on: 2, Risk-off: 3 | Dominant: R3 | Divergence detected"
  },
  "environment_label": "cautious",
  "trading_allowed": true,
  "position_size_factor": 0.75,
  "tradeable": {
    "options_available": true,
    "options_note": "R3 trending \u2014 directional spreads preferred. Light theta.",
    "options_strategies": [
      "debit_spread",
      "credit_spread (with trend)",
      "diagonal"
    ],
    "stocks_available": true,
    "stocks_note": "Normal \u2014 all equity strategies available.",
    "stocks_strategies": [
      "value",
      "growth",
      "dividend",
      "quality_momentum",
      "turnaround"
    ],
    "futures_available": true,
    "futures_note": "R3 trending \u2014 directional futures viable. Follow the trend.",
    "futures_strategies": [
      "directional (with trend)",
      "calendar spread",
      "futures options (defined risk)"
    ],
    "india_weekly_expiry_today": false,
    "india_expiry_instrument": "",
    "summary": "Options: YES (3 strategies) | Stocks: YES (5 strategies) | Futures: YES (3 strategies)"
  },
  "summary": "Environment: cautious | Black swan: elevated | Macro events next 7d: 1 | Intermarket divergence detected",
  "commentary": [],
  "data_gaps": []
}
regime.detect income_desk.service.regime_service 47ms PASS — 3/3 invariants

Invariant Checks

regime returns RegimeResult for SPY
regime_id in 1-4
confidence > 0

API Replay (eTrading Verification)

Inputs
{
  "ticker": "SPY"
}
Outputs (RegimeResult)
{
  "ticker": "SPY",
  "regime": 4,
  "confidence": 0.9836054561184302,
  "regime_probabilities": {
    "2": 0.01639423836166004,
    "1": 3.051210322975043e-07,
    "3": 3.9878337821984374e-10,
    "4": 0.9836054561184302
  },
  "trend_direction": "bearish",
  "as_of_date": "2026-03-26",
  "model_version": "hmm-v1",
  "model_fit_date": "2026-03-20",
  "model_age_days": 6,
  "regime_stability": 2,
  "commentary": [],
  "data_gaps": []
}
regime.detect income_desk.service.regime_service 42ms PASS — 3/3 invariants

Invariant Checks

regime returns RegimeResult for QQQ
regime_id in 1-4
confidence > 0

API Replay (eTrading Verification)

Inputs
{
  "ticker": "QQQ"
}
Outputs (RegimeResult)
{
  "ticker": "QQQ",
  "regime": 3,
  "confidence": 0.9966115442732469,
  "regime_probabilities": {
    "1": 0.0026395656656069758,
    "2": 9.755678831225112e-08,
    "3": 0.9966115442732469,
    "4": 0.0007487925045383189
  },
  "trend_direction": "bullish",
  "as_of_date": "2026-03-26",
  "model_version": "hmm-v1",
  "model_fit_date": "2026-03-20",
  "model_age_days": 6,
  "regime_stability": 1,
  "commentary": [],
  "data_gaps": []
}
regime.detect income_desk.service.regime_service 258ms PASS — 3/3 invariants

Invariant Checks

regime returns RegimeResult for IWM
regime_id in 1-4
confidence > 0

API Replay (eTrading Verification)

Inputs
{
  "ticker": "IWM"
}
Outputs (RegimeResult)
{
  "ticker": "IWM",
  "regime": 3,
  "confidence": 0.9999877272105602,
  "regime_probabilities": {
    "4": 1.0489091054480456e-06,
    "3": 0.9999877272105602,
    "1": 1.1223880242466311e-05,
    "2": 0.0
  },
  "trend_direction": "bearish",
  "as_of_date": "2026-03-26",
  "model_version": "hmm-v1",
  "model_fit_date": "2026-03-20",
  "model_age_days": 6,
  "regime_stability": 2,
  "commentary": [],
  "data_gaps": []
}
regime.detect income_desk.service.regime_service 47ms PASS — 3/3 invariants

Invariant Checks

regime returns RegimeResult for GLD
regime_id in 1-4
confidence > 0

API Replay (eTrading Verification)

Inputs
{
  "ticker": "GLD"
}
Outputs (RegimeResult)
{
  "ticker": "GLD",
  "regime": 3,
  "confidence": 0.9625419571649921,
  "regime_probabilities": {
    "3": 0.9625419571649921,
    "2": 7.745253597598091e-07,
    "1": 1.3430523068408802e-06,
    "4": 0.03745592525729341
  },
  "trend_direction": "bearish",
  "as_of_date": "2026-03-26",
  "model_version": "hmm-v1",
  "model_fit_date": "2026-03-20",
  "model_age_days": 6,
  "regime_stability": 0,
  "commentary": [],
  "data_gaps": []
}
regime.detect income_desk.service.regime_service 163ms PASS — 3/3 invariants

Invariant Checks

regime returns RegimeResult for TLT
regime_id in 1-4
confidence > 0

API Replay (eTrading Verification)

Inputs
{
  "ticker": "TLT"
}
Outputs (RegimeResult)
{
  "ticker": "TLT",
  "regime": 2,
  "confidence": 0.999946515334789,
  "regime_probabilities": {
    "4": 5.348466527814197e-05,
    "3": 4.903371995124154e-19,
    "2": 0.999946515334789,
    "1": 2.2345247484442997e-52
  },
  "trend_direction": null,
  "as_of_date": "2026-03-26",
  "model_version": "hmm-v1",
  "model_fit_date": "2026-03-20",
  "model_age_days": 6,
  "regime_stability": 1,
  "commentary": [],
  "data_gaps": []
}
regime.detect income_desk.service.regime_service 6821ms PASS — 2/2 invariants

Invariant Checks

India regime returns RegimeResult for NIFTY
regime_id in 1-4

API Replay (eTrading Verification)

Inputs
{
  "ticker": "NIFTY",
  "market": "India"
}
Outputs (RegimeResult)
{
  "ticker": "NIFTY",
  "regime": 4,
  "confidence": 0.9997207340640168,
  "regime_probabilities": {
    "1": 3.475332653421816e-15,
    "4": 0.9997207340640168,
    "3": 0.00027926473204821717,
    "2": 1.2037212969617446e-09
  },
  "trend_direction": "bearish",
  "as_of_date": "2026-03-25",
  "model_version": "hmm-v1",
  "model_fit_date": "2026-03-20",
  "model_age_days": 6,
  "regime_stability": 2,
  "commentary": [],
  "data_gaps": []
}
regime.detect income_desk.service.regime_service 620ms PASS — 2/2 invariants

Invariant Checks

India regime returns RegimeResult for BANKNIFTY
regime_id in 1-4

API Replay (eTrading Verification)

Inputs
{
  "ticker": "BANKNIFTY",
  "market": "India"
}
Outputs (RegimeResult)
{
  "ticker": "BANKNIFTY",
  "regime": 4,
  "confidence": 0.9998451646503768,
  "regime_probabilities": {
    "1": 2.1421994528974598e-15,
    "2": 0.00015483534941341064,
    "4": 0.9998451646503768,
    "3": 1.1522362655163665e-34
  },
  "trend_direction": "bearish",
  "as_of_date": "2026-03-25",
  "model_version": "hmm-v1",
  "model_fit_date": "2026-03-20",
  "model_age_days": 6,
  "regime_stability": 2,
  "commentary": [],
  "data_gaps": []
}
2 RANK ✅ PASS
Trade ranking and opportunity scoring 48594ms 1 APIs | 5 checks | 5 passed
ranking.rank income_desk.service.ranking 48590ms PASS — 5/5 invariants

Invariant Checks

ranking returns TradeRankingResult
top_trades is non-empty
all scores in 0-1
actionable entries (verdict=go) have trade_spec
entries are sorted by score descending

API Replay (eTrading Verification)

Inputs
{
  "tickers": [
    "SPY",
    "GLD",
    "TLT"
  ],
  "skip_intraday": true,
  "iv_rank_map": {
    "SPY": 55,
    "GLD": 48,
    "TLT": 45
  }
}
Outputs (TradeRankingResult)
{
  "as_of_date": "2026-03-26",
  "tickers": [
    "SPY",
    "GLD",
    "TLT"
  ],
  "top_trades": [
    {
      "rank": 1,
      "ticker": "GLD",
      "strategy_type": "momentum",
      "verdict": "go",
      "composite_score": 0.5647,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.92,
        "regime_alignment": 1.0,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.6,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "trend_continuation",
      "direction": "bearish",
      "rationale": "Confirmed momentum \u2014 ride the trend.",
      "risk_notes": [
        "Trail stops.",
        "Monitor for divergence signals."
      ],
      "trade_spec": {
        "ticker": "GLD",
        "legs": [
          {
            "role": "long_put",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 400.0,
            "strike_label": "ATM put",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.42946432357788084
          },
          {
            "role": "short_put",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 395.0,
            "strike_label": "0.5 ATR OTM put",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.42946432357788084
          }
        ],
        "underlying_price": 400.6400146484375,
        "target_dte": 36,
        "target_expiration": "2026-05-01",
        "front_expiration": null,
        "front_dte": null,
        "back_expiration": null,
        "back_dte": null,
        "iv_at_front": null,
        "iv_at_back": null,
        "iv_differential_pct": null,
        "wing_width_points": null,
        "max_risk_per_spread": null,
        "spec_rationale": "Suggested default: bearish debit spread (directional, R3). 36 DTE.",
        "structure_type": "debit_spread",
        "order_side": "debit",
        "profit_target_pct": 0.5,
        "stop_loss_pct": 0.5,
        "exit_dte": 14,
        "max_profit_desc": "Spread width minus debit paid",
        "max_loss_desc": "Net debit paid",
        "exit_notes": [
          "Suggested default structure for setup",
          "Target 50% of max profit",
          "Close at 50% loss of debit paid"
        ],
        "max_entry_price": null,
        "entry_window_start": null,
        "entry_window_end": null,
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 2,
      "ticker": "TLT",
      "strategy_type": "iron_butterfly",
      "verdict": "go",
      "composite_score": 0.5593,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.85,
        "regime_alignment": 1.0,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.8,
        "income_bias_boost": 0.05,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "standard_iron_butterfly",
      "direction": "neutral",
      "rationale": "R2 high-vol MR \u2014 maximum premium collection at ATM",
      "risk_notes": [
        "Max loss = wing width - credit received",
        "Profit zone narrow around ATM"
      ],
      "trade_spec": {
        "ticker": "TLT",
        "legs": [
          {
            "role": "short_put",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 86.0,
            "strike_label": "ATM put (short straddle)",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "short_call",
            "action": "STO",
            "quantity": 1,
            "option_type": "call",
            "strike": 86.0,
            "strike_label": "ATM call (short straddle)",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "long_put",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 85.0,
            "strike_label": "wing 1.0 ATR below ATM",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "long_call",
            "action": "BTO",
            "quantity": 1,
            "option_type": "call",
            "strike": 87.0,
            "strike_label": "wing 1.0 ATR above ATM",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          }
        ],
        "underlying_price": 86.11000061035156,
        "target_dte": 36,
        "target_expiration": "2026-05-01",
        "front_expiration": null,
        "front_dte": null,
        "back_expiration": null,
        "back_dte": null,
        "iv_at_front": null,
        "iv_at_back": null,
        "iv_differential_pct": null,
        "wing_width_points": 1.0,
        "max_risk_per_spread": "Wing 1 pts - credit received",
        "spec_rationale": "Target 30-45 DTE, matched 2026-05-01 (36d). Short straddle at ATM, wings 1.0 ATR.",
        "structure_type": "iron_butterfly",
        "order_side": "credit",
        "profit_target_pct": 0.25,
        "stop_loss_pct": 2.0,
        "exit_dte": 14,
        "max_profit_desc": "Credit received (larger than IC due to ATM straddle)",
        "max_loss_desc": "Wing width (1 pts) minus credit",
        "exit_notes": [
          "Close at 25% of credit received",
          "Close if underlying moves beyond ATM strike significantly",
          "Close at 14 DTE to avoid pin risk"
        ],
        "max_entry_price": null,
        "entry_window_start": "10:00:00",
        "entry_window_end": "15:00:00",
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": [
        {
          "field": "max_entry_price",
          "reason": "broker not connected",
          "impact": "high",
          "affects": "entry pricing and POP"
        }
      ]
    },
    {
      "rank": 3,
      "ticker": "TLT",
      "strategy_type": "calendar",
      "verdict": "go",
      "composite_score": 0.5506,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.8820000000000001,
        "regime_alignment": 0.8,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.05,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "double_calendar",
      "direction": "neutral",
      "rationale": "R2 high-vol MR \u2014 wide range, double calendar covers more ground",
      "risk_notes": [
        "Higher capital outlay",
        "Still loses if price breaks range"
      ],
      "trade_spec": {
        "ticker": "TLT",
        "legs": [
          {
            "role": "short_front_put",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 86.0,
            "strike_label": "sell front put (below)",
            "expiration": "2026-04-17",
            "days_to_expiry": 22,
            "atm_iv_at_expiry": 0.1606529248046875
          },
          {
            "role": "long_back_put",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 86.0,
            "strike_label": "buy back put (below)",
            "expiration": "2026-05-15",
            "days_to_expiry": 50,
            "atm_iv_at_expiry": 0.1526573992919922
          },
          {
            "role": "short_front_call",
            "action": "STO",
            "quantity": 1,
            "option_type": "call",
            "strike": 87.0,
            "strike_label": "sell front call (above)",
            "expiration": "2026-04-17",
            "days_to_expiry": 22,
            "atm_iv_at_expiry": 0.1606529248046875
          },
          {
            "role": "long_back_call",
            "action": "BTO",
            "quantity": 1,
            "option_type": "call",
            "strike": 87.0,
            "strike_label": "buy back call (above)",
            "expiration": "2026-05-15",
            "days_to_expiry": 50,
            "atm_iv_at_expiry": 0.1526573992919922
          }
        ],
        "underlying_price": 86.11000061035156,
        "target_dte": 22,
        "target_expiration": "2026-04-17",
        "front_expiration": "2026-04-17",
        "front_dte": 22,
        "back_expiration": "2026-05-15",
        "back_dte": 50,
        "iv_at_front": 0.1606529248046875,
        "iv_at_back": 0.1526573992919922,
        "iv_differential_pct": 5.237561723033179,
        "wing_width_points": null,
        "max_risk_per_spread": null,
        "spec_rationale": "Double calendar: put cal + call cal bracketing price. Front 2026-04-17 (22d, IV 16.1%) / Back 2026-05-15 (50d, IV 15.3%). IV diff: +5.2%.",
        "structure_type": "double_calendar",
        "order_side": "debit",
        "profit_target_pct": 0.25,
        "stop_loss_pct": 0.5,
        "exit_dte": 15,
        "max_profit_desc": "Front leg decay minus back leg decay",
        "max_loss_desc": "Net debit paid",
        "exit_notes": [
          "Close before front leg expiry to avoid assignment risk",
          "Roll front legs on 25% profit",
          "Close if underlying moves beyond either strike"
        ],
        "max_entry_price": null,
        "entry_window_start": "10:00:00",
        "entry_window_end": "15:00:00",
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": [
        {
          "field": "max_entry_price",
          "reason": "broker not connected",
          "impact": "high",
          "affects": "entry pricing and POP"
        }
      ]
    },
    {
      "rank": 4,
      "ticker": "TLT",
      "strategy_type": "iron_condor",
      "verdict": "go",
      "composite_score": 0.5433,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.8415,
        "regime_alignment": 0.8,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.05,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "wide_iron_condor",
      "direction": "neutral",
      "rationale": "R2 high-vol MR \u2014 wider short strikes to accommodate bigger swings",
      "risk_notes": [
        "Wider strikes = less premium but more room",
        "Consider 2x wing width vs standard",
        "More patient management \u2014 may need to hold longer"
      ],
      "trade_spec": {
        "ticker": "TLT",
        "legs": [
          {
            "role": "short_put",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 85.0,
            "strike_label": "1.5 ATR OTM put",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "long_put",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 84.0,
            "strike_label": "wing 0.7 ATR below short put",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "short_call",
            "action": "STO",
            "quantity": 1,
            "option_type": "call",
            "strike": 87.0,
            "strike_label": "1.5 ATR OTM call",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "long_call",
            "action": "BTO",
            "quantity": 1,
            "option_type": "call",
            "strike": 88.0,
            "strike_label": "wing 0.7 ATR above short call",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          }
        ],
        "underlying_price": 86.11000061035156,
        "target_dte": 36,
        "target_expiration": "2026-05-01",
        "front_expiration": null,
        "front_dte": null,
        "back_expiration": null,
        "back_dte": null,
        "iv_at_front": null,
        "iv_at_back": null,
        "iv_differential_pct": null,
        "wing_width_points": 1.0,
        "max_risk_per_spread": "Wing 1 pts - credit received",
        "spec_rationale": "Target 30-45 DTE, matched 2026-05-01 (36d). Short strikes at 1.5 ATR OTM, wings 0.7 ATR wide.",
        "structure_type": "iron_condor",
        "order_side": "credit",
        "profit_target_pct": 0.5,
        "stop_loss_pct": 2.0,
        "exit_dte": 21,
        "max_profit_desc": "Credit received",
        "max_loss_desc": "Wing width (1 pts) minus credit",
        "exit_notes": [
          "Close at 50% of credit received",
          "Close if short strike tested on either side",
          "Close at 21 DTE to avoid gamma risk"
        ],
        "max_entry_price": null,
        "entry_window_start": "10:00:00",
        "entry_window_end": "15:00:00",
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": [
        {
          "field": "max_entry_price",
          "reason": "broker not connected",
          "impact": "high",
          "affects": "entry pricing and POP"
        }
      ]
    },
    {
      "rank": 5,
      "ticker": "GLD",
      "strategy_type": "diagonal",
      "verdict": "go",
      "composite_score": 0.5341,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.75,
        "regime_alignment": 1.0,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.6,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "bear_put_diagonal",
      "direction": "bearish",
      "rationale": "R3 + bearish \u2014 diagonal captures downtrend + theta",
      "risk_notes": [
        "Max loss = net debit",
        "Short put can be assigned if deep ITM"
      ],
      "trade_spec": {
        "ticker": "GLD",
        "legs": [
          {
            "role": "short_front",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 395.0,
            "strike_label": "OTM front put",
            "expiration": "2026-04-17",
            "days_to_expiry": 22,
            "atm_iv_at_expiry": 0.46439134246826175
          },
          {
            "role": "long_back",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 400.0,
            "strike_label": "ATM back put",
            "expiration": "2026-06-18",
            "days_to_expiry": 84,
            "atm_iv_at_expiry": 0.374456939086914
          }
        ],
        "underlying_price": 400.6400146484375,
        "target_dte": 22,
        "target_expiration": "2026-04-17",
        "front_expiration": "2026-04-17",
        "front_dte": 22,
        "back_expiration": "2026-06-18",
        "back_dte": 84,
        "iv_at_front": 0.46439134246826175,
        "iv_at_back": 0.374456939086914,
        "iv_differential_pct": 24.017288503358014,
        "wing_width_points": null,
        "max_risk_per_spread": null,
        "spec_rationale": "Front 2026-04-17 (22d) sell OTM / Back 2026-06-18 (84d) buy ATM. Bearish diagonal. IV diff: +24.0%.",
        "structure_type": "diagonal",
        "order_side": "debit",
        "profit_target_pct": 0.25,
        "stop_loss_pct": 0.5,
        "exit_dte": 15,
        "max_profit_desc": "Front leg decay minus back leg decay",
        "max_loss_desc": "Net debit paid",
        "exit_notes": [
          "Roll front leg on profit for recurring income",
          "Close if underlying moves against back leg significantly",
          "Monitor back leg delta \u2014 adjust if trend reverses"
        ],
        "max_entry_price": null,
        "entry_window_start": "10:00:00",
        "entry_window_end": "15:00:00",
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": [
        {
          "field": "max_entry_price",
          "reason": "broker not connected",
          "impact": "high",
          "affects": "entry pricing and POP"
        }
      ]
    },
    {
      "rank": 6,
      "ticker": "SPY",
      "strategy_type": "momentum",
      "verdict": "go",
      "composite_score": 0.5125,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.63,
        "regime_alignment": 0.8,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.6,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "trend_continuation",
      "direction": "bearish",
      "rationale": "Confirmed momentum \u2014 ride the trend.",
      "risk_notes": [
        "Trail stops.",
        "Monitor for divergence signals."
      ],
      "trade_spec": {
        "ticker": "SPY",
        "legs": [
          {
            "role": "long_put",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 645.0,
            "strike_label": "ATM put",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.24486533950805664
          },
          {
            "role": "short_put",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 640.0,
            "strike_label": "0.5 ATR OTM put",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.24486533950805664
          }
        ],
        "underlying_price": 645.0900268554688,
        "target_dte": 36,
        "target_expiration": "2026-05-01",
        "front_expiration": null,
        "front_dte": null,
        "back_expiration": null,
        "back_dte": null,
        "iv_at_front": null,
        "iv_at_back": null,
        "iv_differential_pct": null,
        "wing_width_points": null,
        "max_risk_per_spread": null,
        "spec_rationale": "Suggested default: bearish debit spread (directional, R4). 36 DTE.",
        "structure_type": "debit_spread",
        "order_side": "debit",
        "profit_target_pct": 0.5,
        "stop_loss_pct": 0.5,
        "exit_dte": 14,
        "max_profit_desc": "Spread width minus debit paid",
        "max_loss_desc": "Net debit paid",
        "exit_notes": [
          "Suggested default structure for setup",
          "Target 50% of max profit",
          "Close at 50% loss of debit paid"
        ],
        "max_entry_price": null,
        "entry_window_start": null,
        "entry_window_end": null,
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 7,
      "ticker": "GLD",
      "strategy_type": "mean_reversion",
      "verdict": "go",
      "composite_score": 0.4891,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 1.0,
        "regime_alignment": 0.3,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.4,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "oversold_bounce",
      "direction": "bullish",
      "rationale": "GO: GLD | RSI 31 \u2014 approaching oversold | Score: 100%",
      "risk_notes": [],
      "trade_spec": {
        "ticker": "GLD",
        "legs": [
          {
            "role": "long_call",
            "action": "BTO",
            "quantity": 1,
            "option_type": "call",
            "strike": 400.0,
            "strike_label": "ATM call",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.42946432357788084
          },
          {
            "role": "short_call",
            "action": "STO",
            "quantity": 1,
            "option_type": "call",
            "strike": 405.0,
            "strike_label": "0.5 ATR OTM call",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.42946432357788084
          }
        ],
        "underlying_price": 400.6400146484375,
        "target_dte": 36,
        "target_expiration": "2026-05-01",
        "front_expiration": null,
        "front_dte": null,
        "back_expiration": null,
        "back_dte": null,
        "iv_at_front": null,
        "iv_at_back": null,
        "iv_differential_pct": null,
        "wing_width_points": null,
        "max_risk_per_spread": null,
        "spec_rationale": "Suggested default: bullish debit spread (directional, R3). 36 DTE.",
        "structure_type": "debit_spread",
        "order_side": "debit",
        "profit_target_pct": 0.5,
        "stop_loss_pct": 0.5,
        "exit_dte": 14,
        "max_profit_desc": "Spread width minus debit paid",
        "max_loss_desc": "Net debit paid",
        "exit_notes": [
          "Suggested default structure for setup",
          "Target 50% of max profit",
          "Close at 50% loss of debit paid"
        ],
        "max_entry_price": null,
        "entry_window_start": null,
        "entry_window_end": null,
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 8,
      "ticker": "GLD",
      "strategy_type": "calendar",
      "verdict": "go",
      "composite_score": 0.472,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.5850000000000001,
        "regime_alignment": 0.5,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "otm_put_calendar",
      "direction": "bearish",
      "rationale": "R3 mild downtrend \u2014 OTM put calendar captures downside bias",
      "risk_notes": [
        "Loses if trend reverses",
        "Requires price to reach strike by back expiry"
      ],
      "trade_spec": {
        "ticker": "GLD",
        "legs": [
          {
            "role": "short_front",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 395.0,
            "strike_label": "sell front 0.5 ATR OTM put",
            "expiration": "2026-04-17",
            "days_to_expiry": 22,
            "atm_iv_at_expiry": 0.46439134246826175
          },
          {
            "role": "long_back",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 395.0,
            "strike_label": "buy back 0.5 ATR OTM put",
            "expiration": "2026-05-15",
            "days_to_expiry": 50,
            "atm_iv_at_expiry": 0.405981282043457
          }
        ],
        "underlying_price": 400.6400146484375,
        "target_dte": 22,
        "target_expiration": "2026-04-17",
        "front_expiration": "2026-04-17",
        "front_dte": 22,
        "back_expiration": "2026-05-15",
        "back_dte": 50,
        "iv_at_front": 0.46439134246826175,
        "iv_at_back": 0.405981282043457,
        "iv_differential_pct": 14.38737769652947,
        "wing_width_points": null,
        "max_risk_per_spread": null,
        "spec_rationale": "Front 2026-04-17 (22d, IV 46.4%) / Back 2026-05-15 (50d, IV 40.6%). IV diff: +14.4%.",
        "structure_type": "calendar",
        "order_side": "debit",
        "profit_target_pct": 0.25,
        "stop_loss_pct": 0.5,
        "exit_dte": 15,
        "max_profit_desc": "Front leg decay minus back leg decay",
        "max_loss_desc": "Net debit paid",
        "exit_notes": [
          "Close before front leg expiry to avoid assignment risk",
          "Roll front leg on 25% profit",
          "Close if underlying moves >1 ATR from strike"
        ],
        "max_entry_price": null,
        "entry_window_start": "10:00:00",
        "entry_window_end": "15:00:00",
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": [
        {
          "field": "max_entry_price",
          "reason": "broker not connected",
          "impact": "high",
          "affects": "entry pricing and POP"
        }
      ]
    },
    {
      "rank": 9,
      "ticker": "TLT",
      "strategy_type": "mean_reversion",
      "verdict": "go",
      "composite_score": 0.4586,
      "breakdown": {
        "verdict_score": 1.0,
        "confidence_score": 0.65,
        "regime_alignment": 1.0,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.4,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "GO: TLT | R2 supports mean reversion | Score: 65%",
      "risk_notes": [],
      "trade_spec": {
        "ticker": "TLT",
        "legs": [
          {
            "role": "short_put",
            "action": "STO",
            "quantity": 1,
            "option_type": "put",
            "strike": 85.0,
            "strike_label": "1.0 ATR OTM put",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "long_put",
            "action": "BTO",
            "quantity": 1,
            "option_type": "put",
            "strike": 85.0,
            "strike_label": "wing 0.5 ATR below short",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          }
        ],
        "underlying_price": 86.11000061035156,
        "target_dte": 36,
        "target_expiration": "2026-05-01",
        "front_expiration": null,
        "front_dte": null,
        "back_expiration": null,
        "back_dte": null,
        "iv_at_front": null,
        "iv_at_back": null,
        "iv_differential_pct": null,
        "wing_width_points": 0.0,
        "max_risk_per_spread": "Wing 0 pts - credit received",
        "spec_rationale": "Suggested default: bullish credit spread (income-first, R2). 36 DTE.",
        "structure_type": "credit_spread",
        "order_side": "credit",
        "profit_target_pct": 0.5,
        "stop_loss_pct": 2.0,
        "exit_dte": 21,
        "max_profit_desc": "Credit received",
        "max_loss_desc": "Wing width (0 pts) minus credit",
        "exit_notes": [
          "Suggested default structure for setup",
          "Close at 50% of credit received",
          "Close if short strike tested"
        ],
        "max_entry_price": null,
        "entry_window_start": null,
        "entry_window_end": null,
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 10,
      "ticker": "GLD",
      "strategy_type": "leap",
      "verdict": "caution",
      "composite_score": 0.3453,
      "breakdown": {
        "verdict_score": 0.5,
        "confidence_score": 0.4,
        "regime_alignment": 1.0,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.1,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Markdown phase \u2014 wait for accumulation (P1) before bullish LEAPs.",
      "risk_notes": [
        "Wait for better conditions."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 11,
      "ticker": "TLT",
      "strategy_type": "momentum",
      "verdict": "caution",
      "composite_score": 0.25,
      "breakdown": {
        "verdict_score": 0.5,
        "confidence_score": 0.41,
        "regime_alignment": 0.3,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.4,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "trend_continuation",
      "direction": "bearish",
      "rationale": "Confirmed momentum \u2014 ride the trend.",
      "risk_notes": [
        "Trail stops.",
        "Monitor for divergence signals."
      ],
      "trade_spec": {
        "ticker": "TLT",
        "legs": [
          {
            "role": "short_call",
            "action": "STO",
            "quantity": 1,
            "option_type": "call",
            "strike": 87.0,
            "strike_label": "1.0 ATR OTM call",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          },
          {
            "role": "long_call",
            "action": "BTO",
            "quantity": 1,
            "option_type": "call",
            "strike": 87.0,
            "strike_label": "wing 0.5 ATR above short",
            "expiration": "2026-05-01",
            "days_to_expiry": 36,
            "atm_iv_at_expiry": 0.1562584375
          }
        ],
        "underlying_price": 86.11000061035156,
        "target_dte": 36,
        "target_expiration": "2026-05-01",
        "front_expiration": null,
        "front_dte": null,
        "back_expiration": null,
        "back_dte": null,
        "iv_at_front": null,
        "iv_at_back": null,
        "iv_differential_pct": null,
        "wing_width_points": 0.0,
        "max_risk_per_spread": "Wing 0 pts - credit received",
        "spec_rationale": "Suggested default: bearish credit spread (income-first, R2). 36 DTE.",
        "structure_type": "credit_spread",
        "order_side": "credit",
        "profit_target_pct": 0.5,
        "stop_loss_pct": 2.0,
        "exit_dte": 21,
        "max_profit_desc": "Credit received",
        "max_loss_desc": "Wing width (0 pts) minus credit",
        "exit_notes": [
          "Suggested default structure for setup",
          "Close at 50% of credit received",
          "Close if short strike tested"
        ],
        "max_entry_price": null,
        "entry_window_start": null,
        "entry_window_end": null,
        "entry_window_timezone": "US/Eastern",
        "entry_mode": null,
        "limit_price": null,
        "pullback_levels": null,
        "strike_proximity_score": null,
        "exit_plan": null,
        "currency": "USD",
        "lot_size": 100,
        "settlement": "physical",
        "exercise_style": "american"
      },
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 12,
      "ticker": "TLT",
      "strategy_type": "zero_dte",
      "verdict": "no_go",
      "composite_score": 0.2467,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.67,
        "regime_alignment": 0.6,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.7,
        "income_bias_boost": 0.05,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for 0DTE.",
      "risk_notes": [
        "Wait for better conditions."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": [
        {
          "field": "orb",
          "reason": "no intraday data available",
          "impact": "medium",
          "affects": "ORB-based strategy selection and strike placement"
        }
      ]
    },
    {
      "rank": 13,
      "ticker": "SPY",
      "strategy_type": "breakout",
      "verdict": "no_go",
      "composite_score": 0.2122,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 1.0,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.2,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for breakout.",
      "risk_notes": [
        "Wait for better setup."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 14,
      "ticker": "TLT",
      "strategy_type": "ratio_spread",
      "verdict": "no_go",
      "composite_score": 0.1906,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.6,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.05,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for ratio spread",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 15,
      "ticker": "SPY",
      "strategy_type": "leap",
      "verdict": "no_go",
      "composite_score": 0.187,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.2,
        "regime_alignment": 0.5,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.1,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for LEAP entry.",
      "risk_notes": [
        "Wait for better conditions."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 16,
      "ticker": "SPY",
      "strategy_type": "calendar",
      "verdict": "no_go",
      "composite_score": 0.187,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.3,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for calendar spread",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 17,
      "ticker": "GLD",
      "strategy_type": "breakout",
      "verdict": "no_go",
      "composite_score": 0.178,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.05,
        "regime_alignment": 0.8,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.2,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for breakout.",
      "risk_notes": [
        "Wait for better setup."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 18,
      "ticker": "GLD",
      "strategy_type": "ratio_spread",
      "verdict": "no_go",
      "composite_score": 0.1762,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.4,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for ratio spread",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 19,
      "ticker": "SPY",
      "strategy_type": "earnings",
      "verdict": "no_go",
      "composite_score": 0.169,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.4,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.5,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 20,
      "ticker": "SPY",
      "strategy_type": "iron_condor",
      "verdict": "no_go",
      "composite_score": 0.1654,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.1,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for iron condor",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 21,
      "ticker": "SPY",
      "strategy_type": "diagonal",
      "verdict": "no_go",
      "composite_score": 0.1654,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.3,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.6,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for diagonal spread",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 22,
      "ticker": "SPY",
      "strategy_type": "ratio_spread",
      "verdict": "no_go",
      "composite_score": 0.1654,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.1,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for ratio spread",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 23,
      "ticker": "SPY",
      "strategy_type": "iron_butterfly",
      "verdict": "no_go",
      "composite_score": 0.1582,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.1,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.8,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for iron butterfly",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 24,
      "ticker": "GLD",
      "strategy_type": "earnings",
      "verdict": "no_go",
      "composite_score": 0.1582,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.5,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.5,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 25,
      "ticker": "GLD",
      "strategy_type": "iron_condor",
      "verdict": "no_go",
      "composite_score": 0.1546,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.2,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.9,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for iron condor",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 26,
      "ticker": "TLT",
      "strategy_type": "diagonal",
      "verdict": "no_go",
      "composite_score": 0.1544,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.2585,
        "regime_alignment": 0.5,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.4,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for diagonal spread",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 27,
      "ticker": "GLD",
      "strategy_type": "zero_dte",
      "verdict": "no_go",
      "composite_score": 0.1478,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.14,
        "regime_alignment": 0.5,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.7,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for 0DTE.",
      "risk_notes": [
        "Wait for better conditions."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": [
        {
          "field": "orb",
          "reason": "no intraday data available",
          "impact": "medium",
          "affects": "ORB-based strategy selection and strike placement"
        }
      ]
    },
    {
      "rank": 28,
      "ticker": "GLD",
      "strategy_type": "iron_butterfly",
      "verdict": "no_go",
      "composite_score": 0.1475,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.2,
        "risk_reward": 0.4,
        "technical_quality": 0.55,
        "phase_alignment": 0.8,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions not favorable for iron butterfly",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 29,
      "ticker": "TLT",
      "strategy_type": "earnings",
      "verdict": "no_go",
      "composite_score": 0.1367,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.7,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.5,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 30,
      "ticker": "SPY",
      "strategy_type": "mean_reversion",
      "verdict": "no_go",
      "composite_score": 0.1295,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.1,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.4,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "NO_GO: High-vol trending regime \u2014 mean reversion unreliable",
      "risk_notes": [],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 31,
      "ticker": "SPY",
      "strategy_type": "zero_dte",
      "verdict": "no_go",
      "composite_score": 0.1226,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.0,
        "regime_alignment": 0.3,
        "risk_reward": 0.7,
        "technical_quality": 0.4,
        "phase_alignment": 0.7,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for 0DTE.",
      "risk_notes": [
        "Wait for better conditions."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": [
        {
          "field": "orb",
          "reason": "no intraday data available",
          "impact": "medium",
          "affects": "ORB-based strategy selection and strike placement"
        }
      ]
    },
    {
      "rank": 32,
      "ticker": "TLT",
      "strategy_type": "leap",
      "verdict": "no_go",
      "composite_score": 0.0971,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.2,
        "regime_alignment": 0.2,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.2,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for LEAP entry.",
      "risk_notes": [
        "Wait for better conditions."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    },
    {
      "rank": 33,
      "ticker": "TLT",
      "strategy_type": "breakout",
      "verdict": "no_go",
      "composite_score": 0.0953,
      "breakdown": {
        "verdict_score": 0.0,
        "confidence_score": 0.09,
        "regime_alignment": 0.3,
        "risk_reward": 0.1,
        "technical_quality": 0.4,
        "phase_alignment": 0.3,
        "income_bias_boost": 0.0,
        "black_swan_penalty": 0.2807,
        "macro_penalty": 0.02,
        "earnings_penalty": 0.0
      },
      "strategy_name": "no_trade",
      "direction": "neutral",
      "rationale": "Conditions unfavorable for breakout.",
      "risk_notes": [
        "Wait for better setup."
      ],
      "trade_spec": null,
      "commentary": [],
      "data_gaps": []
    }
  ],
  "by_ticker": {
    "GLD": [
      {
        "rank": 1,
        "ticker": "GLD",
        "strategy_type": "momentum",
        "verdict": "go",
        "composite_score": 0.5647,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.92,
          "regime_alignment": 1.0,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "trend_continuation",
        "direction": "bearish",
        "rationale": "Confirmed momentum \u2014 ride the trend.",
        "risk_notes": [
          "Trail stops.",
          "Monitor for divergence signals."
        ],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 400.0,
              "strike_label": "ATM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            },
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "0.5 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Suggested default: bearish debit spread (directional, R3). 36 DTE.",
          "structure_type": "debit_spread",
          "order_side": "debit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 0.5,
          "exit_dte": 14,
          "max_profit_desc": "Spread width minus debit paid",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Suggested default structure for setup",
            "Target 50% of max profit",
            "Close at 50% loss of debit paid"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 5,
        "ticker": "GLD",
        "strategy_type": "diagonal",
        "verdict": "go",
        "composite_score": 0.5341,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.75,
          "regime_alignment": 1.0,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "bear_put_diagonal",
        "direction": "bearish",
        "rationale": "R3 + bearish \u2014 diagonal captures downtrend + theta",
        "risk_notes": [
          "Max loss = net debit",
          "Short put can be assigned if deep ITM"
        ],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "short_front",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "OTM front put",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.46439134246826175
            },
            {
              "role": "long_back",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 400.0,
              "strike_label": "ATM back put",
              "expiration": "2026-06-18",
              "days_to_expiry": 84,
              "atm_iv_at_expiry": 0.374456939086914
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 22,
          "target_expiration": "2026-04-17",
          "front_expiration": "2026-04-17",
          "front_dte": 22,
          "back_expiration": "2026-06-18",
          "back_dte": 84,
          "iv_at_front": 0.46439134246826175,
          "iv_at_back": 0.374456939086914,
          "iv_differential_pct": 24.017288503358014,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Front 2026-04-17 (22d) sell OTM / Back 2026-06-18 (84d) buy ATM. Bearish diagonal. IV diff: +24.0%.",
          "structure_type": "diagonal",
          "order_side": "debit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 0.5,
          "exit_dte": 15,
          "max_profit_desc": "Front leg decay minus back leg decay",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Roll front leg on profit for recurring income",
            "Close if underlying moves against back leg significantly",
            "Monitor back leg delta \u2014 adjust if trend reverses"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 7,
        "ticker": "GLD",
        "strategy_type": "mean_reversion",
        "verdict": "go",
        "composite_score": 0.4891,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 1.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "oversold_bounce",
        "direction": "bullish",
        "rationale": "GO: GLD | RSI 31 \u2014 approaching oversold | Score: 100%",
        "risk_notes": [],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 400.0,
              "strike_label": "ATM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            },
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 405.0,
              "strike_label": "0.5 ATR OTM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Suggested default: bullish debit spread (directional, R3). 36 DTE.",
          "structure_type": "debit_spread",
          "order_side": "debit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 0.5,
          "exit_dte": 14,
          "max_profit_desc": "Spread width minus debit paid",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Suggested default structure for setup",
            "Target 50% of max profit",
            "Close at 50% loss of debit paid"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 8,
        "ticker": "GLD",
        "strategy_type": "calendar",
        "verdict": "go",
        "composite_score": 0.472,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.5850000000000001,
          "regime_alignment": 0.5,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "otm_put_calendar",
        "direction": "bearish",
        "rationale": "R3 mild downtrend \u2014 OTM put calendar captures downside bias",
        "risk_notes": [
          "Loses if trend reverses",
          "Requires price to reach strike by back expiry"
        ],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "short_front",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "sell front 0.5 ATR OTM put",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.46439134246826175
            },
            {
              "role": "long_back",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "buy back 0.5 ATR OTM put",
              "expiration": "2026-05-15",
              "days_to_expiry": 50,
              "atm_iv_at_expiry": 0.405981282043457
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 22,
          "target_expiration": "2026-04-17",
          "front_expiration": "2026-04-17",
          "front_dte": 22,
          "back_expiration": "2026-05-15",
          "back_dte": 50,
          "iv_at_front": 0.46439134246826175,
          "iv_at_back": 0.405981282043457,
          "iv_differential_pct": 14.38737769652947,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Front 2026-04-17 (22d, IV 46.4%) / Back 2026-05-15 (50d, IV 40.6%). IV diff: +14.4%.",
          "structure_type": "calendar",
          "order_side": "debit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 0.5,
          "exit_dte": 15,
          "max_profit_desc": "Front leg decay minus back leg decay",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Close before front leg expiry to avoid assignment risk",
            "Roll front leg on 25% profit",
            "Close if underlying moves >1 ATR from strike"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 10,
        "ticker": "GLD",
        "strategy_type": "leap",
        "verdict": "caution",
        "composite_score": 0.3453,
        "breakdown": {
          "verdict_score": 0.5,
          "confidence_score": 0.4,
          "regime_alignment": 1.0,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.1,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Markdown phase \u2014 wait for accumulation (P1) before bullish LEAPs.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 17,
        "ticker": "GLD",
        "strategy_type": "breakout",
        "verdict": "no_go",
        "composite_score": 0.178,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.05,
          "regime_alignment": 0.8,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.2,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for breakout.",
        "risk_notes": [
          "Wait for better setup."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 18,
        "ticker": "GLD",
        "strategy_type": "ratio_spread",
        "verdict": "no_go",
        "composite_score": 0.1762,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.4,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for ratio spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 24,
        "ticker": "GLD",
        "strategy_type": "earnings",
        "verdict": "no_go",
        "composite_score": 0.1582,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.5,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.5,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 25,
        "ticker": "GLD",
        "strategy_type": "iron_condor",
        "verdict": "no_go",
        "composite_score": 0.1546,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.2,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron condor",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 27,
        "ticker": "GLD",
        "strategy_type": "zero_dte",
        "verdict": "no_go",
        "composite_score": 0.1478,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.14,
          "regime_alignment": 0.5,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.7,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for 0DTE.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": [
          {
            "field": "orb",
            "reason": "no intraday data available",
            "impact": "medium",
            "affects": "ORB-based strategy selection and strike placement"
          }
        ]
      },
      {
        "rank": 28,
        "ticker": "GLD",
        "strategy_type": "iron_butterfly",
        "verdict": "no_go",
        "composite_score": 0.1475,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.2,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.8,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron butterfly",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "TLT": [
      {
        "rank": 2,
        "ticker": "TLT",
        "strategy_type": "iron_butterfly",
        "verdict": "go",
        "composite_score": 0.5593,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.85,
          "regime_alignment": 1.0,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.8,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "standard_iron_butterfly",
        "direction": "neutral",
        "rationale": "R2 high-vol MR \u2014 maximum premium collection at ATM",
        "risk_notes": [
          "Max loss = wing width - credit received",
          "Profit zone narrow around ATM"
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 86.0,
              "strike_label": "ATM put (short straddle)",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 86.0,
              "strike_label": "ATM call (short straddle)",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "wing 1.0 ATR below ATM",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "wing 1.0 ATR above ATM",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 1.0,
          "max_risk_per_spread": "Wing 1 pts - credit received",
          "spec_rationale": "Target 30-45 DTE, matched 2026-05-01 (36d). Short straddle at ATM, wings 1.0 ATR.",
          "structure_type": "iron_butterfly",
          "order_side": "credit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 2.0,
          "exit_dte": 14,
          "max_profit_desc": "Credit received (larger than IC due to ATM straddle)",
          "max_loss_desc": "Wing width (1 pts) minus credit",
          "exit_notes": [
            "Close at 25% of credit received",
            "Close if underlying moves beyond ATM strike significantly",
            "Close at 14 DTE to avoid pin risk"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 3,
        "ticker": "TLT",
        "strategy_type": "calendar",
        "verdict": "go",
        "composite_score": 0.5506,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.8820000000000001,
          "regime_alignment": 0.8,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "double_calendar",
        "direction": "neutral",
        "rationale": "R2 high-vol MR \u2014 wide range, double calendar covers more ground",
        "risk_notes": [
          "Higher capital outlay",
          "Still loses if price breaks range"
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_front_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 86.0,
              "strike_label": "sell front put (below)",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.1606529248046875
            },
            {
              "role": "long_back_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 86.0,
              "strike_label": "buy back put (below)",
              "expiration": "2026-05-15",
              "days_to_expiry": 50,
              "atm_iv_at_expiry": 0.1526573992919922
            },
            {
              "role": "short_front_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "sell front call (above)",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.1606529248046875
            },
            {
              "role": "long_back_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "buy back call (above)",
              "expiration": "2026-05-15",
              "days_to_expiry": 50,
              "atm_iv_at_expiry": 0.1526573992919922
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 22,
          "target_expiration": "2026-04-17",
          "front_expiration": "2026-04-17",
          "front_dte": 22,
          "back_expiration": "2026-05-15",
          "back_dte": 50,
          "iv_at_front": 0.1606529248046875,
          "iv_at_back": 0.1526573992919922,
          "iv_differential_pct": 5.237561723033179,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Double calendar: put cal + call cal bracketing price. Front 2026-04-17 (22d, IV 16.1%) / Back 2026-05-15 (50d, IV 15.3%). IV diff: +5.2%.",
          "structure_type": "double_calendar",
          "order_side": "debit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 0.5,
          "exit_dte": 15,
          "max_profit_desc": "Front leg decay minus back leg decay",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Close before front leg expiry to avoid assignment risk",
            "Roll front legs on 25% profit",
            "Close if underlying moves beyond either strike"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 4,
        "ticker": "TLT",
        "strategy_type": "iron_condor",
        "verdict": "go",
        "composite_score": 0.5433,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.8415,
          "regime_alignment": 0.8,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "wide_iron_condor",
        "direction": "neutral",
        "rationale": "R2 high-vol MR \u2014 wider short strikes to accommodate bigger swings",
        "risk_notes": [
          "Wider strikes = less premium but more room",
          "Consider 2x wing width vs standard",
          "More patient management \u2014 may need to hold longer"
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "1.5 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 84.0,
              "strike_label": "wing 0.7 ATR below short put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "1.5 ATR OTM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 88.0,
              "strike_label": "wing 0.7 ATR above short call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 1.0,
          "max_risk_per_spread": "Wing 1 pts - credit received",
          "spec_rationale": "Target 30-45 DTE, matched 2026-05-01 (36d). Short strikes at 1.5 ATR OTM, wings 0.7 ATR wide.",
          "structure_type": "iron_condor",
          "order_side": "credit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 2.0,
          "exit_dte": 21,
          "max_profit_desc": "Credit received",
          "max_loss_desc": "Wing width (1 pts) minus credit",
          "exit_notes": [
            "Close at 50% of credit received",
            "Close if short strike tested on either side",
            "Close at 21 DTE to avoid gamma risk"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 9,
        "ticker": "TLT",
        "strategy_type": "mean_reversion",
        "verdict": "go",
        "composite_score": 0.4586,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.65,
          "regime_alignment": 1.0,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "GO: TLT | R2 supports mean reversion | Score: 65%",
        "risk_notes": [],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "1.0 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "wing 0.5 ATR below short",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 0.0,
          "max_risk_per_spread": "Wing 0 pts - credit received",
          "spec_rationale": "Suggested default: bullish credit spread (income-first, R2). 36 DTE.",
          "structure_type": "credit_spread",
          "order_side": "credit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 2.0,
          "exit_dte": 21,
          "max_profit_desc": "Credit received",
          "max_loss_desc": "Wing width (0 pts) minus credit",
          "exit_notes": [
            "Suggested default structure for setup",
            "Close at 50% of credit received",
            "Close if short strike tested"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 11,
        "ticker": "TLT",
        "strategy_type": "momentum",
        "verdict": "caution",
        "composite_score": 0.25,
        "breakdown": {
          "verdict_score": 0.5,
          "confidence_score": 0.41,
          "regime_alignment": 0.3,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "trend_continuation",
        "direction": "bearish",
        "rationale": "Confirmed momentum \u2014 ride the trend.",
        "risk_notes": [
          "Trail stops.",
          "Monitor for divergence signals."
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "1.0 ATR OTM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "wing 0.5 ATR above short",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 0.0,
          "max_risk_per_spread": "Wing 0 pts - credit received",
          "spec_rationale": "Suggested default: bearish credit spread (income-first, R2). 36 DTE.",
          "structure_type": "credit_spread",
          "order_side": "credit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 2.0,
          "exit_dte": 21,
          "max_profit_desc": "Credit received",
          "max_loss_desc": "Wing width (0 pts) minus credit",
          "exit_notes": [
            "Suggested default structure for setup",
            "Close at 50% of credit received",
            "Close if short strike tested"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 12,
        "ticker": "TLT",
        "strategy_type": "zero_dte",
        "verdict": "no_go",
        "composite_score": 0.2467,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.67,
          "regime_alignment": 0.6,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.7,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for 0DTE.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": [
          {
            "field": "orb",
            "reason": "no intraday data available",
            "impact": "medium",
            "affects": "ORB-based strategy selection and strike placement"
          }
        ]
      },
      {
        "rank": 14,
        "ticker": "TLT",
        "strategy_type": "ratio_spread",
        "verdict": "no_go",
        "composite_score": 0.1906,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.6,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for ratio spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 26,
        "ticker": "TLT",
        "strategy_type": "diagonal",
        "verdict": "no_go",
        "composite_score": 0.1544,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.2585,
          "regime_alignment": 0.5,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for diagonal spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 29,
        "ticker": "TLT",
        "strategy_type": "earnings",
        "verdict": "no_go",
        "composite_score": 0.1367,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.7,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.5,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 32,
        "ticker": "TLT",
        "strategy_type": "leap",
        "verdict": "no_go",
        "composite_score": 0.0971,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.2,
          "regime_alignment": 0.2,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.2,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for LEAP entry.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 33,
        "ticker": "TLT",
        "strategy_type": "breakout",
        "verdict": "no_go",
        "composite_score": 0.0953,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.09,
          "regime_alignment": 0.3,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.3,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for breakout.",
        "risk_notes": [
          "Wait for better setup."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "SPY": [
      {
        "rank": 6,
        "ticker": "SPY",
        "strategy_type": "momentum",
        "verdict": "go",
        "composite_score": 0.5125,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.63,
          "regime_alignment": 0.8,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "trend_continuation",
        "direction": "bearish",
        "rationale": "Confirmed momentum \u2014 ride the trend.",
        "risk_notes": [
          "Trail stops.",
          "Monitor for divergence signals."
        ],
        "trade_spec": {
          "ticker": "SPY",
          "legs": [
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 645.0,
              "strike_label": "ATM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.24486533950805664
            },
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 640.0,
              "strike_label": "0.5 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.24486533950805664
            }
          ],
          "underlying_price": 645.0900268554688,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Suggested default: bearish debit spread (directional, R4). 36 DTE.",
          "structure_type": "debit_spread",
          "order_side": "debit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 0.5,
          "exit_dte": 14,
          "max_profit_desc": "Spread width minus debit paid",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Suggested default structure for setup",
            "Target 50% of max profit",
            "Close at 50% loss of debit paid"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 13,
        "ticker": "SPY",
        "strategy_type": "breakout",
        "verdict": "no_go",
        "composite_score": 0.2122,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 1.0,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.2,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for breakout.",
        "risk_notes": [
          "Wait for better setup."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 15,
        "ticker": "SPY",
        "strategy_type": "leap",
        "verdict": "no_go",
        "composite_score": 0.187,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.2,
          "regime_alignment": 0.5,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.1,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for LEAP entry.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 16,
        "ticker": "SPY",
        "strategy_type": "calendar",
        "verdict": "no_go",
        "composite_score": 0.187,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for calendar spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 19,
        "ticker": "SPY",
        "strategy_type": "earnings",
        "verdict": "no_go",
        "composite_score": 0.169,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.4,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.5,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 20,
        "ticker": "SPY",
        "strategy_type": "iron_condor",
        "verdict": "no_go",
        "composite_score": 0.1654,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron condor",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 21,
        "ticker": "SPY",
        "strategy_type": "diagonal",
        "verdict": "no_go",
        "composite_score": 0.1654,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for diagonal spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 22,
        "ticker": "SPY",
        "strategy_type": "ratio_spread",
        "verdict": "no_go",
        "composite_score": 0.1654,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for ratio spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 23,
        "ticker": "SPY",
        "strategy_type": "iron_butterfly",
        "verdict": "no_go",
        "composite_score": 0.1582,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.8,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron butterfly",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 30,
        "ticker": "SPY",
        "strategy_type": "mean_reversion",
        "verdict": "no_go",
        "composite_score": 0.1295,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: High-vol trending regime \u2014 mean reversion unreliable",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 31,
        "ticker": "SPY",
        "strategy_type": "zero_dte",
        "verdict": "no_go",
        "composite_score": 0.1226,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.7,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for 0DTE.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": [
          {
            "field": "orb",
            "reason": "no intraday data available",
            "impact": "medium",
            "affects": "ORB-based strategy selection and strike placement"
          }
        ]
      }
    ]
  },
  "by_strategy": {
    "momentum": [
      {
        "rank": 1,
        "ticker": "GLD",
        "strategy_type": "momentum",
        "verdict": "go",
        "composite_score": 0.5647,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.92,
          "regime_alignment": 1.0,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "trend_continuation",
        "direction": "bearish",
        "rationale": "Confirmed momentum \u2014 ride the trend.",
        "risk_notes": [
          "Trail stops.",
          "Monitor for divergence signals."
        ],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 400.0,
              "strike_label": "ATM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            },
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "0.5 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Suggested default: bearish debit spread (directional, R3). 36 DTE.",
          "structure_type": "debit_spread",
          "order_side": "debit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 0.5,
          "exit_dte": 14,
          "max_profit_desc": "Spread width minus debit paid",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Suggested default structure for setup",
            "Target 50% of max profit",
            "Close at 50% loss of debit paid"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 6,
        "ticker": "SPY",
        "strategy_type": "momentum",
        "verdict": "go",
        "composite_score": 0.5125,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.63,
          "regime_alignment": 0.8,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "trend_continuation",
        "direction": "bearish",
        "rationale": "Confirmed momentum \u2014 ride the trend.",
        "risk_notes": [
          "Trail stops.",
          "Monitor for divergence signals."
        ],
        "trade_spec": {
          "ticker": "SPY",
          "legs": [
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 645.0,
              "strike_label": "ATM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.24486533950805664
            },
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 640.0,
              "strike_label": "0.5 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.24486533950805664
            }
          ],
          "underlying_price": 645.0900268554688,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Suggested default: bearish debit spread (directional, R4). 36 DTE.",
          "structure_type": "debit_spread",
          "order_side": "debit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 0.5,
          "exit_dte": 14,
          "max_profit_desc": "Spread width minus debit paid",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Suggested default structure for setup",
            "Target 50% of max profit",
            "Close at 50% loss of debit paid"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 11,
        "ticker": "TLT",
        "strategy_type": "momentum",
        "verdict": "caution",
        "composite_score": 0.25,
        "breakdown": {
          "verdict_score": 0.5,
          "confidence_score": 0.41,
          "regime_alignment": 0.3,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "trend_continuation",
        "direction": "bearish",
        "rationale": "Confirmed momentum \u2014 ride the trend.",
        "risk_notes": [
          "Trail stops.",
          "Monitor for divergence signals."
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "1.0 ATR OTM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "wing 0.5 ATR above short",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 0.0,
          "max_risk_per_spread": "Wing 0 pts - credit received",
          "spec_rationale": "Suggested default: bearish credit spread (income-first, R2). 36 DTE.",
          "structure_type": "credit_spread",
          "order_side": "credit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 2.0,
          "exit_dte": 21,
          "max_profit_desc": "Credit received",
          "max_loss_desc": "Wing width (0 pts) minus credit",
          "exit_notes": [
            "Suggested default structure for setup",
            "Close at 50% of credit received",
            "Close if short strike tested"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      }
    ],
    "iron_butterfly": [
      {
        "rank": 2,
        "ticker": "TLT",
        "strategy_type": "iron_butterfly",
        "verdict": "go",
        "composite_score": 0.5593,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.85,
          "regime_alignment": 1.0,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.8,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "standard_iron_butterfly",
        "direction": "neutral",
        "rationale": "R2 high-vol MR \u2014 maximum premium collection at ATM",
        "risk_notes": [
          "Max loss = wing width - credit received",
          "Profit zone narrow around ATM"
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 86.0,
              "strike_label": "ATM put (short straddle)",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 86.0,
              "strike_label": "ATM call (short straddle)",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "wing 1.0 ATR below ATM",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "wing 1.0 ATR above ATM",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 1.0,
          "max_risk_per_spread": "Wing 1 pts - credit received",
          "spec_rationale": "Target 30-45 DTE, matched 2026-05-01 (36d). Short straddle at ATM, wings 1.0 ATR.",
          "structure_type": "iron_butterfly",
          "order_side": "credit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 2.0,
          "exit_dte": 14,
          "max_profit_desc": "Credit received (larger than IC due to ATM straddle)",
          "max_loss_desc": "Wing width (1 pts) minus credit",
          "exit_notes": [
            "Close at 25% of credit received",
            "Close if underlying moves beyond ATM strike significantly",
            "Close at 14 DTE to avoid pin risk"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 23,
        "ticker": "SPY",
        "strategy_type": "iron_butterfly",
        "verdict": "no_go",
        "composite_score": 0.1582,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.8,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron butterfly",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 28,
        "ticker": "GLD",
        "strategy_type": "iron_butterfly",
        "verdict": "no_go",
        "composite_score": 0.1475,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.2,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.8,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron butterfly",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "calendar": [
      {
        "rank": 3,
        "ticker": "TLT",
        "strategy_type": "calendar",
        "verdict": "go",
        "composite_score": 0.5506,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.8820000000000001,
          "regime_alignment": 0.8,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "double_calendar",
        "direction": "neutral",
        "rationale": "R2 high-vol MR \u2014 wide range, double calendar covers more ground",
        "risk_notes": [
          "Higher capital outlay",
          "Still loses if price breaks range"
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_front_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 86.0,
              "strike_label": "sell front put (below)",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.1606529248046875
            },
            {
              "role": "long_back_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 86.0,
              "strike_label": "buy back put (below)",
              "expiration": "2026-05-15",
              "days_to_expiry": 50,
              "atm_iv_at_expiry": 0.1526573992919922
            },
            {
              "role": "short_front_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "sell front call (above)",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.1606529248046875
            },
            {
              "role": "long_back_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "buy back call (above)",
              "expiration": "2026-05-15",
              "days_to_expiry": 50,
              "atm_iv_at_expiry": 0.1526573992919922
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 22,
          "target_expiration": "2026-04-17",
          "front_expiration": "2026-04-17",
          "front_dte": 22,
          "back_expiration": "2026-05-15",
          "back_dte": 50,
          "iv_at_front": 0.1606529248046875,
          "iv_at_back": 0.1526573992919922,
          "iv_differential_pct": 5.237561723033179,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Double calendar: put cal + call cal bracketing price. Front 2026-04-17 (22d, IV 16.1%) / Back 2026-05-15 (50d, IV 15.3%). IV diff: +5.2%.",
          "structure_type": "double_calendar",
          "order_side": "debit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 0.5,
          "exit_dte": 15,
          "max_profit_desc": "Front leg decay minus back leg decay",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Close before front leg expiry to avoid assignment risk",
            "Roll front legs on 25% profit",
            "Close if underlying moves beyond either strike"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 8,
        "ticker": "GLD",
        "strategy_type": "calendar",
        "verdict": "go",
        "composite_score": 0.472,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.5850000000000001,
          "regime_alignment": 0.5,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "otm_put_calendar",
        "direction": "bearish",
        "rationale": "R3 mild downtrend \u2014 OTM put calendar captures downside bias",
        "risk_notes": [
          "Loses if trend reverses",
          "Requires price to reach strike by back expiry"
        ],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "short_front",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "sell front 0.5 ATR OTM put",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.46439134246826175
            },
            {
              "role": "long_back",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "buy back 0.5 ATR OTM put",
              "expiration": "2026-05-15",
              "days_to_expiry": 50,
              "atm_iv_at_expiry": 0.405981282043457
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 22,
          "target_expiration": "2026-04-17",
          "front_expiration": "2026-04-17",
          "front_dte": 22,
          "back_expiration": "2026-05-15",
          "back_dte": 50,
          "iv_at_front": 0.46439134246826175,
          "iv_at_back": 0.405981282043457,
          "iv_differential_pct": 14.38737769652947,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Front 2026-04-17 (22d, IV 46.4%) / Back 2026-05-15 (50d, IV 40.6%). IV diff: +14.4%.",
          "structure_type": "calendar",
          "order_side": "debit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 0.5,
          "exit_dte": 15,
          "max_profit_desc": "Front leg decay minus back leg decay",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Close before front leg expiry to avoid assignment risk",
            "Roll front leg on 25% profit",
            "Close if underlying moves >1 ATR from strike"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 16,
        "ticker": "SPY",
        "strategy_type": "calendar",
        "verdict": "no_go",
        "composite_score": 0.187,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for calendar spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "iron_condor": [
      {
        "rank": 4,
        "ticker": "TLT",
        "strategy_type": "iron_condor",
        "verdict": "go",
        "composite_score": 0.5433,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.8415,
          "regime_alignment": 0.8,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "wide_iron_condor",
        "direction": "neutral",
        "rationale": "R2 high-vol MR \u2014 wider short strikes to accommodate bigger swings",
        "risk_notes": [
          "Wider strikes = less premium but more room",
          "Consider 2x wing width vs standard",
          "More patient management \u2014 may need to hold longer"
        ],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "1.5 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 84.0,
              "strike_label": "wing 0.7 ATR below short put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 87.0,
              "strike_label": "1.5 ATR OTM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 88.0,
              "strike_label": "wing 0.7 ATR above short call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 1.0,
          "max_risk_per_spread": "Wing 1 pts - credit received",
          "spec_rationale": "Target 30-45 DTE, matched 2026-05-01 (36d). Short strikes at 1.5 ATR OTM, wings 0.7 ATR wide.",
          "structure_type": "iron_condor",
          "order_side": "credit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 2.0,
          "exit_dte": 21,
          "max_profit_desc": "Credit received",
          "max_loss_desc": "Wing width (1 pts) minus credit",
          "exit_notes": [
            "Close at 50% of credit received",
            "Close if short strike tested on either side",
            "Close at 21 DTE to avoid gamma risk"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 20,
        "ticker": "SPY",
        "strategy_type": "iron_condor",
        "verdict": "no_go",
        "composite_score": 0.1654,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron condor",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 25,
        "ticker": "GLD",
        "strategy_type": "iron_condor",
        "verdict": "no_go",
        "composite_score": 0.1546,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.2,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for iron condor",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "diagonal": [
      {
        "rank": 5,
        "ticker": "GLD",
        "strategy_type": "diagonal",
        "verdict": "go",
        "composite_score": 0.5341,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.75,
          "regime_alignment": 1.0,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "bear_put_diagonal",
        "direction": "bearish",
        "rationale": "R3 + bearish \u2014 diagonal captures downtrend + theta",
        "risk_notes": [
          "Max loss = net debit",
          "Short put can be assigned if deep ITM"
        ],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "short_front",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 395.0,
              "strike_label": "OTM front put",
              "expiration": "2026-04-17",
              "days_to_expiry": 22,
              "atm_iv_at_expiry": 0.46439134246826175
            },
            {
              "role": "long_back",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 400.0,
              "strike_label": "ATM back put",
              "expiration": "2026-06-18",
              "days_to_expiry": 84,
              "atm_iv_at_expiry": 0.374456939086914
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 22,
          "target_expiration": "2026-04-17",
          "front_expiration": "2026-04-17",
          "front_dte": 22,
          "back_expiration": "2026-06-18",
          "back_dte": 84,
          "iv_at_front": 0.46439134246826175,
          "iv_at_back": 0.374456939086914,
          "iv_differential_pct": 24.017288503358014,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Front 2026-04-17 (22d) sell OTM / Back 2026-06-18 (84d) buy ATM. Bearish diagonal. IV diff: +24.0%.",
          "structure_type": "diagonal",
          "order_side": "debit",
          "profit_target_pct": 0.25,
          "stop_loss_pct": 0.5,
          "exit_dte": 15,
          "max_profit_desc": "Front leg decay minus back leg decay",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Roll front leg on profit for recurring income",
            "Close if underlying moves against back leg significantly",
            "Monitor back leg delta \u2014 adjust if trend reverses"
          ],
          "max_entry_price": null,
          "entry_window_start": "10:00:00",
          "entry_window_end": "15:00:00",
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": [
          {
            "field": "max_entry_price",
            "reason": "broker not connected",
            "impact": "high",
            "affects": "entry pricing and POP"
          }
        ]
      },
      {
        "rank": 21,
        "ticker": "SPY",
        "strategy_type": "diagonal",
        "verdict": "no_go",
        "composite_score": 0.1654,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.6,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for diagonal spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 26,
        "ticker": "TLT",
        "strategy_type": "diagonal",
        "verdict": "no_go",
        "composite_score": 0.1544,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.2585,
          "regime_alignment": 0.5,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for diagonal spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "mean_reversion": [
      {
        "rank": 7,
        "ticker": "GLD",
        "strategy_type": "mean_reversion",
        "verdict": "go",
        "composite_score": 0.4891,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 1.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "oversold_bounce",
        "direction": "bullish",
        "rationale": "GO: GLD | RSI 31 \u2014 approaching oversold | Score: 100%",
        "risk_notes": [],
        "trade_spec": {
          "ticker": "GLD",
          "legs": [
            {
              "role": "long_call",
              "action": "BTO",
              "quantity": 1,
              "option_type": "call",
              "strike": 400.0,
              "strike_label": "ATM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            },
            {
              "role": "short_call",
              "action": "STO",
              "quantity": 1,
              "option_type": "call",
              "strike": 405.0,
              "strike_label": "0.5 ATR OTM call",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.42946432357788084
            }
          ],
          "underlying_price": 400.6400146484375,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": null,
          "max_risk_per_spread": null,
          "spec_rationale": "Suggested default: bullish debit spread (directional, R3). 36 DTE.",
          "structure_type": "debit_spread",
          "order_side": "debit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 0.5,
          "exit_dte": 14,
          "max_profit_desc": "Spread width minus debit paid",
          "max_loss_desc": "Net debit paid",
          "exit_notes": [
            "Suggested default structure for setup",
            "Target 50% of max profit",
            "Close at 50% loss of debit paid"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 9,
        "ticker": "TLT",
        "strategy_type": "mean_reversion",
        "verdict": "go",
        "composite_score": 0.4586,
        "breakdown": {
          "verdict_score": 1.0,
          "confidence_score": 0.65,
          "regime_alignment": 1.0,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "GO: TLT | R2 supports mean reversion | Score: 65%",
        "risk_notes": [],
        "trade_spec": {
          "ticker": "TLT",
          "legs": [
            {
              "role": "short_put",
              "action": "STO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "1.0 ATR OTM put",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            },
            {
              "role": "long_put",
              "action": "BTO",
              "quantity": 1,
              "option_type": "put",
              "strike": 85.0,
              "strike_label": "wing 0.5 ATR below short",
              "expiration": "2026-05-01",
              "days_to_expiry": 36,
              "atm_iv_at_expiry": 0.1562584375
            }
          ],
          "underlying_price": 86.11000061035156,
          "target_dte": 36,
          "target_expiration": "2026-05-01",
          "front_expiration": null,
          "front_dte": null,
          "back_expiration": null,
          "back_dte": null,
          "iv_at_front": null,
          "iv_at_back": null,
          "iv_differential_pct": null,
          "wing_width_points": 0.0,
          "max_risk_per_spread": "Wing 0 pts - credit received",
          "spec_rationale": "Suggested default: bullish credit spread (income-first, R2). 36 DTE.",
          "structure_type": "credit_spread",
          "order_side": "credit",
          "profit_target_pct": 0.5,
          "stop_loss_pct": 2.0,
          "exit_dte": 21,
          "max_profit_desc": "Credit received",
          "max_loss_desc": "Wing width (0 pts) minus credit",
          "exit_notes": [
            "Suggested default structure for setup",
            "Close at 50% of credit received",
            "Close if short strike tested"
          ],
          "max_entry_price": null,
          "entry_window_start": null,
          "entry_window_end": null,
          "entry_window_timezone": "US/Eastern",
          "entry_mode": null,
          "limit_price": null,
          "pullback_levels": null,
          "strike_proximity_score": null,
          "exit_plan": null,
          "currency": "USD",
          "lot_size": 100,
          "settlement": "physical",
          "exercise_style": "american"
        },
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 30,
        "ticker": "SPY",
        "strategy_type": "mean_reversion",
        "verdict": "no_go",
        "composite_score": 0.1295,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.4,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: High-vol trending regime \u2014 mean reversion unreliable",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "leap": [
      {
        "rank": 10,
        "ticker": "GLD",
        "strategy_type": "leap",
        "verdict": "caution",
        "composite_score": 0.3453,
        "breakdown": {
          "verdict_score": 0.5,
          "confidence_score": 0.4,
          "regime_alignment": 1.0,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.1,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Markdown phase \u2014 wait for accumulation (P1) before bullish LEAPs.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 15,
        "ticker": "SPY",
        "strategy_type": "leap",
        "verdict": "no_go",
        "composite_score": 0.187,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.2,
          "regime_alignment": 0.5,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.1,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for LEAP entry.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 32,
        "ticker": "TLT",
        "strategy_type": "leap",
        "verdict": "no_go",
        "composite_score": 0.0971,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.2,
          "regime_alignment": 0.2,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.2,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for LEAP entry.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "zero_dte": [
      {
        "rank": 12,
        "ticker": "TLT",
        "strategy_type": "zero_dte",
        "verdict": "no_go",
        "composite_score": 0.2467,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.67,
          "regime_alignment": 0.6,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.7,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for 0DTE.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": [
          {
            "field": "orb",
            "reason": "no intraday data available",
            "impact": "medium",
            "affects": "ORB-based strategy selection and strike placement"
          }
        ]
      },
      {
        "rank": 27,
        "ticker": "GLD",
        "strategy_type": "zero_dte",
        "verdict": "no_go",
        "composite_score": 0.1478,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.14,
          "regime_alignment": 0.5,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.7,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for 0DTE.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": [
          {
            "field": "orb",
            "reason": "no intraday data available",
            "impact": "medium",
            "affects": "ORB-based strategy selection and strike placement"
          }
        ]
      },
      {
        "rank": 31,
        "ticker": "SPY",
        "strategy_type": "zero_dte",
        "verdict": "no_go",
        "composite_score": 0.1226,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.3,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.7,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for 0DTE.",
        "risk_notes": [
          "Wait for better conditions."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": [
          {
            "field": "orb",
            "reason": "no intraday data available",
            "impact": "medium",
            "affects": "ORB-based strategy selection and strike placement"
          }
        ]
      }
    ],
    "breakout": [
      {
        "rank": 13,
        "ticker": "SPY",
        "strategy_type": "breakout",
        "verdict": "no_go",
        "composite_score": 0.2122,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 1.0,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.2,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for breakout.",
        "risk_notes": [
          "Wait for better setup."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 17,
        "ticker": "GLD",
        "strategy_type": "breakout",
        "verdict": "no_go",
        "composite_score": 0.178,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.05,
          "regime_alignment": 0.8,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.2,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for breakout.",
        "risk_notes": [
          "Wait for better setup."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 33,
        "ticker": "TLT",
        "strategy_type": "breakout",
        "verdict": "no_go",
        "composite_score": 0.0953,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.09,
          "regime_alignment": 0.3,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.3,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions unfavorable for breakout.",
        "risk_notes": [
          "Wait for better setup."
        ],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "ratio_spread": [
      {
        "rank": 14,
        "ticker": "TLT",
        "strategy_type": "ratio_spread",
        "verdict": "no_go",
        "composite_score": 0.1906,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.6,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.05,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for ratio spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 18,
        "ticker": "GLD",
        "strategy_type": "ratio_spread",
        "verdict": "no_go",
        "composite_score": 0.1762,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.4,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for ratio spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 22,
        "ticker": "SPY",
        "strategy_type": "ratio_spread",
        "verdict": "no_go",
        "composite_score": 0.1654,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.1,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.9,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "Conditions not favorable for ratio spread",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ],
    "earnings": [
      {
        "rank": 19,
        "ticker": "SPY",
        "strategy_type": "earnings",
        "verdict": "no_go",
        "composite_score": 0.169,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.4,
          "risk_reward": 0.7,
          "technical_quality": 0.4,
          "phase_alignment": 0.5,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 24,
        "ticker": "GLD",
        "strategy_type": "earnings",
        "verdict": "no_go",
        "composite_score": 0.1582,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.5,
          "risk_reward": 0.4,
          "technical_quality": 0.55,
          "phase_alignment": 0.5,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      },
      {
        "rank": 29,
        "ticker": "TLT",
        "strategy_type": "earnings",
        "verdict": "no_go",
        "composite_score": 0.1367,
        "breakdown": {
          "verdict_score": 0.0,
          "confidence_score": 0.0,
          "regime_alignment": 0.7,
          "risk_reward": 0.1,
          "technical_quality": 0.4,
          "phase_alignment": 0.5,
          "income_bias_boost": 0.0,
          "black_swan_penalty": 0.2807,
          "macro_penalty": 0.02,
          "earnings_penalty": 0.0
        },
        "strategy_name": "no_trade",
        "direction": "neutral",
        "rationale": "NO_GO: Earnings date unknown \u2014 cannot assess earnings play without known event date",
        "risk_notes": [],
        "trade_spec": null,
        "commentary": [],
        "data_gaps": []
      }
    ]
  },
  "black_swan_level": "elevated",
  "black_swan_gate": false,
  "total_assessed": 33,
  "total_actionable": 11,
  "summary": "Ranked 33 ticker/strategy pairs. 11 actionable (9 GO, 2 CAUTION). Top: GLD momentum (score=0.56, go). Alert: elevated.",
  "watch_items": [
    {
      "ticker": "SPY",
      "current_regime": 4,
      "target_regime": 2,
      "iv_rank": 55.0,
      "trigger": "R4 \u2192 R2 transition",
      "rationale": "IVR 55.0% \u2014 post-crash recovery is the highest premium cycle for income strategies"
    }
  ],
  "commentary": [],
  "data_gaps": []
}
3 GATE ✅ PASS
Account and portfolio risk gating 4ms 2 APIs | 9 checks | 9 passed
filter_trades_by_account income_desk.trade_lifecycle 0ms PASS — 4/4 invariants

Invariant Checks

returns FilteredTrades
total_input matches
affordable + filtered = total
available_buying_power preserved

API Replay (eTrading Verification)

Inputs
{
  "ranked_entries": "[2 RankedEntry]",
  "available_buying_power": 25000
}
Outputs (FilteredTrades)
{
  "affordable": [
    {
      "rank": 1,
      "ticker": "SPY",
      "strategy_type": "iron_condor",
      "composite_score": 0.78,
      "verdict": "go",
      "direction": "neutral",
      "structure_type": "iron_condor",
      "wing_width": 5.0,
      "max_entry_price": 1.6
    },
    {
      "rank": 2,
      "ticker": "GLD",
      "strategy_type": "iron_condor",
      "composite_score": 0.72,
      "verdict": "go",
      "direction": "neutral",
      "structure_type": "credit_spread",
      "wing_width": 5.0,
      "max_entry_price": 1.2
    }
  ],
  "filtered_out": [],
  "total_input": 2,
  "total_affordable": 2,
  "available_buying_power": 25000.0
}
filter_trades_with_portfolio income_desk.trade_lifecycle 3ms PASS — 5/5 invariants

Invariant Checks

returns PortfolioFilterResult
approved + rejected = total
portfolio_risk_pct >= 0
slots_remaining >= 0
summary is non-empty

API Replay (eTrading Verification)

Inputs
{
  "ranked_entries": "[2 RankedEntry]",
  "open_positions": [
    {
      "ticker": "QQQ",
      "structure_type": "iron_condor",
      "sector": "tech",
      "max_loss": 500.0,
      "buying_power_used": 500.0
    }
  ],
  "account_nlv": 100000,
  "available_buying_power": 25000,
  "risk_limits": {
    "max_positions": 5,
    "max_per_ticker": 2,
    "max_sector_concentration_pct": 0.4,
    "max_portfolio_risk_pct": 0.25,
    "min_trade_quality_score": 0.5
  }
}
Outputs (PortfolioFilterResult)
{
  "approved": [
    {
      "rank": 1,
      "ticker": "SPY",
      "strategy_type": "iron_condor",
      "composite_score": 0.78,
      "verdict": "go",
      "structure_type": "iron_condor",
      "trade_risk": 500.0
    },
    {
      "rank": 2,
      "ticker": "GLD",
      "strategy_type": "iron_condor",
      "composite_score": 0.72,
      "verdict": "go",
      "structure_type": "credit_spread",
      "trade_risk": 500.0
    }
  ],
  "rejected": [],
  "total_input": 2,
  "total_approved": 2,
  "open_positions_count": 1,
  "portfolio_risk_pct": 0.015,
  "slots_remaining": 2,
  "summary": "2 approved, 0 rejected | 1 open + 2 new = 3 total | Risk: 2% of NLV | 2 slots remaining"
}
4 SIZE ✅ PASS
Kelly criterion position sizing 0ms 3 APIs | 9 checks | 9 passed
compute_kelly_fraction income_desk.features.position_sizing 0ms PASS — 3/3 invariants

Invariant Checks

kelly fraction is float
kelly >= 0 (positive EV trade)
kelly <= 0.25 (hard cap)

API Replay (eTrading Verification)

Inputs
{
  "pop_pct": 0.65,
  "max_profit": 310.0,
  "max_loss": 190.0
}
Outputs (float)
0.25
compute_position_size income_desk.features.position_sizing 0ms PASS — 5/5 invariants

Invariant Checks

returns KellyResult
recommended_contracts >= 0
recommended <= max_contracts
full_kelly >= half_kelly
rationale is non-empty

API Replay (eTrading Verification)

Inputs
{
  "pop_pct": 0.65,
  "max_profit": 310.0,
  "max_loss": 190.0,
  "capital": 100000.0,
  "risk_per_contract": 190.0,
  "regime_id": 1,
  "wing_width": 5.0,
  "safety_factor": 0.5,
  "max_contracts": 20
}
Outputs (KellyResult)
{
  "full_kelly_fraction": 0.25,
  "half_kelly_fraction": 0.125,
  "portfolio_adjusted_fraction": 0.125,
  "recommended_contracts": 10,
  "max_contracts_by_risk": 10,
  "rationale": "Kelly 25.0% | x0.5 safety = 12.5% | | R1 margin 1.0x | -> 10 contracts",
  "components": {
    "full_kelly": 0.25,
    "safety_factor": 0.5,
    "after_safety": 0.125,
    "portfolio_adjusted": 0.125,
    "regime_margin_cap": 50.0
  }
}
compute_kelly_fraction income_desk.features.position_sizing 0ms PASS — 1/1 invariants

Invariant Checks

negative EV returns kelly <= 0

API Replay (eTrading Verification)

Inputs
{
  "pop_pct": 0.3,
  "max_profit": 100.0,
  "max_loss": 500.0,
  "_note": "negative_EV_trade"
}
Outputs (float)
null
5 ENTER ✅ PASS
Entry confirmation, yield metrics, Greeks aggregation 2ms 7 APIs | 32 checks | 32 passed
compute_income_yield income_desk.trade_lifecycle 0ms PASS — 8/8 invariants

Invariant Checks

returns IncomeYield
max_profit > 0
max_loss > 0
max_profit = credit * lot_size
credit_to_width_pct in 0-1
annualized_roc > 0
breakeven_low < underlying
breakeven_high > underlying

API Replay (eTrading Verification)

Inputs
{
  "trade_spec": "SPY iron_condor",
  "entry_credit": 1.6,
  "contracts": 1
}
Outputs (IncomeYield)
{
  "credit_per_spread": 1.6,
  "wing_width": 5.0,
  "max_profit": 160.0,
  "max_loss": 340.0,
  "credit_to_width_pct": 0.32,
  "return_on_capital_pct": 0.4706,
  "annualized_roc_pct": 7.8075,
  "breakeven_low": 568.4,
  "breakeven_high": 591.6,
  "contracts": 1
}
compute_income_yield income_desk.trade_lifecycle 0ms PASS — 3/3 invariants

Invariant Checks

returns IncomeYield
contracts reflected
max_profit = credit * lot * contracts

API Replay (eTrading Verification)

Inputs
{
  "trade_spec": "GLD credit_spread",
  "entry_credit": 1.2,
  "contracts": 2
}
Outputs (IncomeYield)
{
  "credit_per_spread": 1.2,
  "wing_width": 5.0,
  "max_profit": 240.0,
  "max_loss": 760.0,
  "credit_to_width_pct": 0.24,
  "return_on_capital_pct": 0.3158,
  "annualized_roc_pct": 5.2392,
  "breakeven_low": 453.8,
  "breakeven_high": null,
  "contracts": 2
}
compute_breakevens income_desk.trade_lifecycle 0ms PASS — 6/6 invariants

Invariant Checks

returns Breakevens
low breakeven present
high breakeven present
low < high
low = short_put - credit = 568.40
high = short_call + credit = 591.60

API Replay (eTrading Verification)

Inputs
{
  "trade_spec": "SPY iron_condor",
  "entry_price": 1.6
}
Outputs (Breakevens)
{
  "low": 568.4,
  "high": 591.6,
  "structure_type": "iron_condor"
}
estimate_pop income_desk.trade_lifecycle 0ms PASS — 6/6 invariants

Invariant Checks

returns POPEstimate
pop_pct in 0-1
expected_value is computed
method is regime_historical
trade_quality is set
trade_quality_score in 0-1

API Replay (eTrading Verification)

Inputs
{
  "trade_spec": {
    "ticker": "SPY",
    "legs": [
      {
        "role": "short_put",
        "action": "STO",
        "quantity": 1,
        "option_type": "put",
        "strike": 570.0,
        "strike_label": "570 put",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      },
      {
        "role": "long_put",
        "action": "BTO",
        "quantity": 1,
        "option_type": "put",
        "strike": 565.0,
        "strike_label": "565 put",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      },
      {
        "role": "short_call",
        "action": "STO",
        "quantity": 1,
        "option_type": "call",
        "strike": 590.0,
        "strike_label": "590 call",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      },
      {
        "role": "long_call",
        "action": "BTO",
        "quantity": 1,
        "option_type": "call",
        "strike": 595.0,
        "strike_label": "595 call",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      }
    ],
    "underlying_price": 580.0,
    "target_dte": 22,
    "target_expiration": "2026-04-17",
    "front_expiration": null,
    "front_dte": null,
    "back_expiration": null,
    "back_dte": null,
    "iv_at_front": null,
    "iv_at_back": null,
    "iv_differential_pct": null,
    "wing_width_points": 5.0,
    "max_risk_per_spread": "$500 - credit",
    "spec_rationale": "Manual iron_condor via create_trade_spec",
    "structure_type": "iron_condor",
    "order_side": "credit",
    "profit_target_pct": 0.5,
    "stop_loss_pct": 2.0,
    "exit_dte": 21,
    "max_profit_desc": "Credit received",
    "max_loss_desc": "Wing width ($5) minus credit",
    "exit_notes": [],
    "max_entry_price": 1.6,
    "entry_window_start": null,
    "entry_window_end": null,
    "entry_window_timezone": "US/Eastern",
    "entry_mode": null,
    "limit_price": null,
    "pullback_levels": null,
    "strike_proximity_score": null,
    "exit_plan": null,
    "currency": "USD",
    "lot_size": 100,
    "settlement": null,
    "exercise_style": null
  },
  "entry_price": 1.6,
  "regime_id": 1,
  "atr_pct": 1.2,
  "current_price": 580.0,
  "contracts": 1,
  "iv_rank": 43.0
}
Outputs (POPEstimate)
{
  "pop_pct": 0.7137,
  "expected_value": 16.87,
  "max_profit": 160.0,
  "max_loss": 340.0,
  "risk_reward_ratio": 2.12,
  "trade_quality": "good",
  "trade_quality_score": 0.634,
  "method": "regime_historical",
  "regime_id": 1,
  "notes": "Regime R1 Low-Vol MR: expected 22d move \u00b1$10.9 (ATR 1.2%, regime factor 0.40, IV rank 43)",
  "data_gaps": []
}
check_income_entry income_desk.trade_lifecycle 0ms PASS — 4/4 invariants

Invariant Checks

returns IncomeEntryCheck
score in 0-1
ideal conditions confirmed
conditions list populated

API Replay (eTrading Verification)

Inputs
{
  "iv_rank": 50.0,
  "iv_percentile": 55.0,
  "dte": 35,
  "rsi": 48.0,
  "atr_pct": 1.2,
  "regime_id": 1
}
Outputs (IncomeEntryCheck)
{
  "confirmed": true,
  "score": 1.0,
  "conditions": [
    {
      "name": "iv_rank_sweet_spot",
      "passed": true,
      "value": 50.0,
      "threshold": "25-80",
      "weight": 0.25
    },
    {
      "name": "dte_sweet_spot",
      "passed": true,
      "value": 35,
      "threshold": "25-50",
      "weight": 0.2
    },
    {
      "name": "rsi_neutral",
      "passed": true,
      "value": 48.0,
      "threshold": "35-65",
      "weight": 0.15
    },
    {
      "name": "regime_income_friendly",
      "passed": true,
      "value": "R1",
      "threshold": "R1 or R2",
      "weight": 0.2
    },
    {
      "name": "no_earnings_risk",
      "passed": true,
      "value": false,
      "threshold": "no earnings within DTE",
      "weight": 0.1
    },
    {
      "name": "no_macro_event",
      "passed": true,
      "value": false,
      "threshold": "no FOMC/CPI/NFP today",
      "weight": 0.1
    }
  ],
  "summary": "Income entry CONFIRMED (score 100%)"
}
check_income_entry income_desk.trade_lifecycle 0ms PASS — 2/2 invariants

Invariant Checks

bad conditions NOT confirmed
score < 0.6 for bad conditions

API Replay (eTrading Verification)

Inputs
{
  "iv_rank": 10.0,
  "iv_percentile": 12.0,
  "dte": 5,
  "rsi": 82.0,
  "atr_pct": 3.5,
  "regime_id": 4,
  "_note": "bad_conditions"
}
Outputs (IncomeEntryCheck)
{
  "confirmed": false,
  "score": 0.2,
  "conditions": [
    {
      "name": "iv_rank_sweet_spot",
      "passed": false,
      "value": 10.0,
      "threshold": "25-80",
      "weight": 0.25
    },
    {
      "name": "dte_sweet_spot",
      "passed": false,
      "value": 5,
      "threshold": "25-50",
      "weight": 0.2
    },
    {
      "name": "rsi_neutral",
      "passed": false,
      "value": 82.0,
      "threshold": "35-65",
      "weight": 0.15
    },
    {
      "name": "regime_income_friendly",
      "passed": false,
      "value": "R4",
      "threshold": "R1 or R2",
      "weight": 0.2
    },
    {
      "name": "no_earnings_risk",
      "passed": true,
      "value": false,
      "threshold": "no earnings within DTE",
      "weight": 0.1
    },
    {
      "name": "no_macro_event",
      "passed": true,
      "value": false,
      "threshold": "no FOMC/CPI/NFP today",
      "weight": 0.1
    }
  ],
  "summary": "Income entry NOT CONFIRMED (score 20%): iv_rank_sweet_spot, dte_sweet_spot, rsi_neutral, regime_income_friendly"
}
aggregate_greeks income_desk.trade_lifecycle 0ms PASS — 3/3 invariants

Invariant Checks

returns AggregatedGreeks
net_delta is near-zero for IC
daily_theta_dollars computed

API Replay (eTrading Verification)

Inputs
{
  "trade_spec": "SPY iron_condor",
  "leg_quotes": "[4 OptionQuote]",
  "contracts": 1
}
Outputs (AggregatedGreeks)
{
  "net_delta": 0.0,
  "net_gamma": -0.02,
  "net_theta": 0.06,
  "net_vega": -0.12,
  "daily_theta_dollars": 6.0,
  "contracts": 1
}
6 MONITOR ✅ PASS
Exit condition monitoring and health checks 1ms 3 APIs | 13 checks | 13 passed
monitor_exit_conditions income_desk.trade_lifecycle 0ms PASS — 7/7 invariants

Invariant Checks

returns ExitMonitorResult
should_close is True (profit target hit)
pnl_pct > 0 (profitable)
pnl_dollars > 0
signals non-empty
most_urgent is set
commentary is non-empty

API Replay (eTrading Verification)

Inputs
{
  "trade_id": "ic-001",
  "ticker": "SPY",
  "structure_type": "iron_condor",
  "order_side": "credit",
  "entry_price": 1.6,
  "current_mid_price": 0.75,
  "contracts": 1,
  "dte_remaining": 25,
  "regime_id": 1,
  "profit_target_pct": 0.5,
  "stop_loss_pct": 2.0,
  "exit_dte": 21,
  "_note": "profit_target_hit"
}
Outputs (ExitMonitorResult)
{
  "trade_id": "ic-001",
  "ticker": "SPY",
  "signals": [
    {
      "rule": "profit_target",
      "triggered": true,
      "current_value": "53% (+85$)",
      "threshold": "50%",
      "urgency": "immediate",
      "action": "Close for $85 profit",
      "detail": "Credit decayed 53% of max (50% target). Lock in $85 gain."
    },
    {
      "rule": "stop_loss",
      "triggered": false,
      "current_value": "-0.5x credit (-85$)",
      "threshold": "2.0x credit (fixed)",
      "urgency": "monitor",
      "action": "Monitoring loss",
      "detail": "Loss at -0.5x credit \u2014 within tolerance but elevated."
    },
    {
      "rule": "dte_exit",
      "triggered": false,
      "current_value": "25 DTE",
      "threshold": "\u226421 DTE",
      "urgency": "soon",
      "action": "25 DTE remaining",
      "detail": "25 DTE \u2014 approaching close window, prepare exit order."
    }
  ],
  "should_close": true,
  "most_urgent": {
    "rule": "profit_target",
    "triggered": true,
    "current_value": "53% (+85$)",
    "threshold": "50%",
    "urgency": "immediate",
    "action": "Close for $85 profit",
    "detail": "Credit decayed 53% of max (50% target). Lock in $85 gain."
  },
  "pnl_pct": 0.5312,
  "pnl_dollars": 85.0,
  "summary": "CLOSE: profit_target | Watch: dte_exit",
  "commentary": "SPY \u2014 EXIT. Credit decayed 53% of max (50% target). Lock in $85 gain.",
  "data_gaps": []
}
monitor_exit_conditions income_desk.trade_lifecycle 0ms PASS — 4/4 invariants

Invariant Checks

should_close is True (stop loss)
pnl_pct < 0 (losing)
pnl_dollars < 0
regime change signal present

API Replay (eTrading Verification)

Inputs
{
  "trade_id": "ic-002",
  "entry_price": 1.6,
  "current_mid_price": 5.0,
  "regime_id": 4,
  "entry_regime_id": 1,
  "_note": "stop_loss_hit_with_regime_change"
}
Outputs (ExitMonitorResult)
{
  "trade_id": "ic-002",
  "ticker": "SPY",
  "signals": [
    {
      "rule": "profit_target",
      "triggered": false,
      "current_value": "-212% (-340$)",
      "threshold": "50%",
      "urgency": "monitor",
      "action": "Approaching target",
      "detail": "At -212% of 50% target \u2014 approaching profit zone."
    },
    {
      "rule": "stop_loss",
      "triggered": true,
      "current_value": "2.1x credit (+340$)",
      "threshold": "2.0x credit (fixed)",
      "urgency": "immediate",
      "action": "Close to limit loss at $340",
      "detail": "Loss at 2.1x initial credit ($+340). Stop at 2.0x (fixed). Close to prevent further damage."
    },
    {
      "rule": "dte_exit",
      "triggered": true,
      "current_value": "15 DTE",
      "threshold": "\u226421 DTE",
      "urgency": "immediate",
      "action": "Close \u2014 15 DTE (gamma risk)",
      "detail": "Only 15 DTE left (close at 21). Gamma acceleration makes holding risky \u2014 close regardless of P&L."
    },
    {
      "rule": "regime_change",
      "triggered": true,
      "current_value": "R4 (was R1)",
      "threshold": "R1",
      "urgency": "immediate",
      "action": "Regime shifted R1\u2192R4: review position",
      "detail": "Regime changed from Low-Vol MR to High-Vol Trend. Income structures are invalidated in trending regime \u2014 close or hedge."
    }
  ],
  "should_close": true,
  "most_urgent": {
    "rule": "stop_loss",
    "triggered": true,
    "current_value": "2.1x credit (+340$)",
    "threshold": "2.0x credit (fixed)",
    "urgency": "immediate",
    "action": "Close to limit loss at $340",
    "detail": "Loss at 2.1x initial credit ($+340). Stop at 2.0x (fixed). Close to prevent further damage."
  },
  "pnl_pct": -2.125,
  "pnl_dollars": -340.0,
  "summary": "CLOSE: stop_loss, dte_exit, regime_change",
  "commentary": "SPY \u2014 EXIT. Loss at 2.1x initial credit ($+340). Stop at 2.0x (fixed). Close to prevent further damage. Also triggered: Only 15 DTE left (close at 21). Gamma acceleration makes holding risky \u2014 close regardless of P&L.; Regime changed from Low-Vol MR to High-Vol Trend. Income structures are invalidated in trending regime \u2014 close or hedge..",
  "data_gaps": []
}
monitor_exit_conditions income_desk.trade_lifecycle 0ms PASS — 2/2 invariants

Invariant Checks

should_close is False (healthy)
pnl_pct > 0 but below target

API Replay (eTrading Verification)

Inputs
{
  "trade_id": "ic-003",
  "entry_price": 1.2,
  "current_mid_price": 1.0,
  "dte_remaining": 30,
  "_note": "healthy_trade_hold"
}
Outputs (ExitMonitorResult)
{
  "trade_id": "ic-003",
  "ticker": "GLD",
  "signals": [
    {
      "rule": "profit_target",
      "triggered": false,
      "current_value": "17% (+20$)",
      "threshold": "50%",
      "urgency": "monitor",
      "action": "Approaching target",
      "detail": "At 17% of 50% target \u2014 approaching profit zone."
    },
    {
      "rule": "stop_loss",
      "triggered": false,
      "current_value": "-0.2x credit (-20$)",
      "threshold": "2.0x credit (fixed)",
      "urgency": "monitor",
      "action": "Monitoring loss",
      "detail": "Loss at -0.2x credit \u2014 within tolerance but elevated."
    },
    {
      "rule": "dte_exit",
      "triggered": false,
      "current_value": "30 DTE",
      "threshold": "\u226421 DTE",
      "urgency": "monitor",
      "action": "30 DTE remaining",
      "detail": "30 DTE \u2014 well within holding window."
    }
  ],
  "should_close": false,
  "most_urgent": null,
  "pnl_pct": 0.1667,
  "pnl_dollars": 20.0,
  "summary": "HOLD",
  "commentary": "GLD \u2014 HOLD at +17% P&L (+20$). Healthy theta decay with 30 DTE remaining.",
  "data_gaps": []
}
7 ADJUST ✅ PASS
Assignment risk assessment and adjustment analysis 3ms 1 APIs | 2 checks | 2 passed
assess_assignment_risk income_desk.features.assignment_handler 0ms PASS — 2/2 invariants

Invariant Checks

returns AssignmentRiskResult
has risk_level

API Replay (eTrading Verification)

Inputs
{
  "trade_spec": {
    "ticker": "SPY",
    "legs": [
      {
        "role": "short_put",
        "action": "STO",
        "quantity": 1,
        "option_type": "put",
        "strike": 570.0,
        "strike_label": "570 put",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      },
      {
        "role": "long_put",
        "action": "BTO",
        "quantity": 1,
        "option_type": "put",
        "strike": 565.0,
        "strike_label": "565 put",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      },
      {
        "role": "short_call",
        "action": "STO",
        "quantity": 1,
        "option_type": "call",
        "strike": 590.0,
        "strike_label": "590 call",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      },
      {
        "role": "long_call",
        "action": "BTO",
        "quantity": 1,
        "option_type": "call",
        "strike": 595.0,
        "strike_label": "595 call",
        "expiration": "2026-04-17",
        "days_to_expiry": 22,
        "atm_iv_at_expiry": 0.0
      }
    ],
    "underlying_price": 580.0,
    "target_dte": 22,
    "target_expiration": "2026-04-17",
    "front_expiration": null,
    "front_dte": null,
    "back_expiration": null,
    "back_dte": null,
    "iv_at_front": null,
    "iv_at_back": null,
    "iv_differential_pct": null,
    "wing_width_points": 5.0,
    "max_risk_per_spread": "$500 - credit",
    "spec_rationale": "Manual iron_condor via create_trade_spec",
    "structure_type": "iron_condor",
    "order_side": "credit",
    "profit_target_pct": 0.5,
    "stop_loss_pct": 2.0,
    "exit_dte": 21,
    "max_profit_desc": "Credit received",
    "max_loss_desc": "Wing width ($5) minus credit",
    "exit_notes": [],
    "max_entry_price": 1.6,
    "entry_window_start": null,
    "entry_window_end": null,
    "entry_window_timezone": "US/Eastern",
    "entry_mode": null,
    "limit_price": null,
    "pullback_levels": null,
    "strike_proximity_score": null,
    "exit_plan": null,
    "currency": "USD",
    "lot_size": 100,
    "settlement": null,
    "exercise_style": null
  },
  "current_price": 572.0,
  "dte_remaining": 5
}
Outputs (AssignmentRiskResult)
{
  "ticker": "SPY",
  "risk_level": "none",
  "at_risk_legs": [
    {
      "role": "short_put",
      "option_type": "put",
      "strike": 570.0,
      "itm_amount": -2.0,
      "itm_pct": 0.0,
      "risk_level": "none"
    },
    {
      "role": "short_call",
      "option_type": "call",
      "strike": 590.0,
      "itm_amount": -18.0,
      "itm_pct": 0.0,
      "risk_level": "none"
    }
  ],
  "exercise_style": "american",
  "urgency": "none",
  "reasons": [
    "All short legs are OTM \u2014 no assignment risk"
  ],
  "recommended_action": "hold",
  "response_trade_spec": null,
  "european_note": null
}
8 ANALYTICS ✅ PASS
P&L attribution, structure risk, portfolio analytics, circuit breakers 2ms 6 APIs | 25 checks | 25 passed
compute_pnl_attribution income_desk.trade_analytics 0ms PASS — 3/3 invariants

Invariant Checks

returns PnLAttribution
components sum to model_pnl
unexplained = actual - model

API Replay (eTrading Verification)

Inputs
{
  "entry_delta": -0.1,
  "entry_gamma": 0.02,
  "entry_theta": 0.05,
  "entry_vega": -0.15,
  "underlying_change": 3.0,
  "iv_change": 0.02,
  "days_elapsed": 5.0,
  "actual_pnl": -50.0
}
Outputs (PnLAttribution)
{
  "delta_pnl": -30.0,
  "gamma_pnl": 9.0,
  "theta_pnl": 25.0,
  "vega_pnl": -0.3,
  "model_pnl": 3.7,
  "actual_pnl": -50.0,
  "unexplained_pnl": -53.7,
  "underlying_change": 3.0,
  "iv_change": 0.02,
  "days_elapsed": 5.0
}
compute_trade_pnl income_desk.trade_analytics 0ms PASS — 4/4 invariants

Invariant Checks

returns TradePnL
legs count matches
pnl_inception is numeric
entry_cost > 0

API Replay (eTrading Verification)

Inputs
{
  "legs": [
    {
      "quantity": -1,
      "entry_price": 1.6,
      "current_price": 1.0,
      "open_price": 1.2,
      "multiplier": 100
    },
    {
      "quantity": 1,
      "entry_price": 0.4,
      "current_price": 0.3,
      "open_price": 0.35,
      "multiplier": 100
    },
    {
      "quantity": -1,
      "entry_price": 1.5,
      "current_price": 1.1,
      "open_price": 1.3,
      "multiplier": 100
    },
    {
      "quantity": 1,
      "entry_price": 0.3,
      "current_price": 0.25,
      "open_price": 0.28,
      "multiplier": 100
    }
  ]
}
Outputs (TradePnL)
{
  "pnl_inception": 85.0,
  "pnl_inception_pct": 0.2237,
  "pnl_today": 32.0,
  "pnl_today_pct": 0.1022,
  "entry_cost": 380.0,
  "current_value": 265.0,
  "open_value": 313.0,
  "legs": [
    {
      "pnl_inception": 60.0,
      "pnl_today": 20.0,
      "entry_price": 1.6,
      "current_price": 1.0,
      "open_price": 1.2,
      "quantity": -1
    },
    {
      "pnl_inception": -10.0,
      "pnl_today": -5.0,
      "entry_price": 0.4,
      "current_price": 0.3,
      "open_price": 0.35,
      "quantity": 1
    },
    {
      "pnl_inception": 40.0,
      "pnl_today": 20.0,
      "entry_price": 1.5,
      "current_price": 1.1,
      "open_price": 1.3,
      "quantity": -1
    },
    {
      "pnl_inception": -5.0,
      "pnl_today": -3.0,
      "entry_price": 0.3,
      "current_price": 0.25,
      "open_price": 0.28,
      "quantity": 1
    }
  ]
}
compute_structure_risk income_desk.trade_analytics 0ms PASS — 8/8 invariants

Invariant Checks

returns StructureRisk
max_profit = credit * 100
max_loss = (wing - credit) * 100
risk_profile is defined
breakeven_low present
breakeven_high present
wing_width = 5
risk_reward_ratio > 0

API Replay (eTrading Verification)

Inputs
{
  "structure_type": "iron_condor",
  "net_credit_debit": 1.6,
  "multiplier": 100,
  "contracts": 1
}
Outputs (StructureRisk)
{
  "max_profit": 160.0,
  "max_loss": 340.0,
  "breakeven_low": 568.4,
  "breakeven_high": 591.6,
  "risk_reward_ratio": 0.4706,
  "wing_width": 5.0,
  "risk_profile": "defined",
  "strategy_label": "Iron condor \u00b7 defined risk"
}
compute_portfolio_analytics income_desk.trade_analytics 0ms PASS — 4/4 invariants

Invariant Checks

returns PortfolioAnalytics
by_underlying has 2 tickers
total_margin_at_risk >= 0
margin_utilization_pct >= 0

API Replay (eTrading Verification)

Inputs
{
  "positions": [
    {
      "ticker": "SPY",
      "structure_type": "iron_condor",
      "entry_price": 1.6,
      "current_price": 1.0,
      "open_price": 1.2,
      "quantity": -1,
      "multiplier": 100,
      "delta": -0.1,
      "gamma": 0,
      "theta": 0.05,
      "vega": 0,
      "underlying_price": 580.0,
      "max_loss": 340.0
    },
    {
      "ticker": "GLD",
      "structure_type": "credit_spread",
      "entry_price": 1.2,
      "current_price": 0.8,
      "open_price": 1.0,
      "quantity": -1,
      "multiplier": 100,
      "delta": -0.08,
      "gamma": 0,
      "theta": 0.03,
      "vega": 0,
      "underlying_price": 466.0,
      "max_loss": 380.0
    }
  ],
  "account_nlv": 100000.0
}
Outputs (PortfolioAnalytics)
{
  "total_pnl_inception": 100.0,
  "total_pnl_today": 40.0,
  "total_pnl_pct": 0.3571,
  "net_delta": 0.18,
  "net_gamma": 0.0,
  "net_theta": -0.08,
  "net_vega": 0.0,
  "delta_dollars": 95.28,
  "theta_dollars_per_day": -8.0,
  "total_margin_at_risk": 720.0,
  "margin_utilization_pct": 0.0072,
  "by_underlying": {
    "SPY": {
      "ticker": "SPY",
      "net_delta": 0.1,
      "net_gamma": 0.0,
      "net_theta": -0.05,
      "net_vega": 0.0,
      "delta_dollars": 58.0,
      "pnl_inception": 60.0,
      "pnl_today": 20.0,
      "position_count": 1
    },
    "GLD": {
      "ticker": "GLD",
      "net_delta": 0.08,
      "net_gamma": 0.0,
      "net_theta": -0.03,
      "net_vega": 0.0,
      "delta_dollars": 37.28,
      "pnl_inception": 40.0,
      "pnl_today": 20.0,
      "position_count": 1
    }
  }
}
evaluate_circuit_breakers income_desk.trade_analytics 0ms PASS — 3/3 invariants

Invariant Checks

returns CircuitBreakerResult
can_open_new is bool
no breakers tripped for moderate loss

API Replay (eTrading Verification)

Inputs
{
  "daily_pnl_pct": -1.5,
  "weekly_pnl_pct": -3.0,
  "portfolio_drawdown_pct": 5.0,
  "consecutive_losses": 2
}
Outputs (CircuitBreakerResult)
{
  "is_halted": false,
  "is_paused": false,
  "breakers_tripped": [],
  "can_open_new": true,
  "resume_conditions": []
}
evaluate_circuit_breakers income_desk.trade_analytics 0ms PASS — 3/3 invariants

Invariant Checks

breakers tripped for severe loss
is_paused or is_halted
can_open_new is False

API Replay (eTrading Verification)

Inputs
{
  "daily_pnl_pct": -3.0,
  "weekly_pnl_pct": -6.0,
  "portfolio_drawdown_pct": 12.0,
  "consecutive_losses": 4,
  "_note": "breaker_tripped"
}
Outputs (CircuitBreakerResult)
{
  "is_halted": true,
  "is_paused": false,
  "breakers_tripped": [
    {
      "name": "daily_loss",
      "threshold": 2.0,
      "current_value": 3.0,
      "severity": "halt"
    },
    {
      "name": "weekly_loss",
      "threshold": 5.0,
      "current_value": 6.0,
      "severity": "halt"
    },
    {
      "name": "max_drawdown",
      "threshold": 10.0,
      "current_value": 12.0,
      "severity": "halt"
    },
    {
      "name": "consecutive_loss_pause",
      "threshold": 3.0,
      "current_value": 4.0,
      "severity": "pause"
    }
  ],
  "can_open_new": false,
  "resume_conditions": [
    "Daily loss (3.0%) exceeds 2.0% limit \u2014 resume tomorrow",
    "Weekly loss (6.0%) exceeds 5.0% limit \u2014 resume next week",
    "Drawdown (12.0%) exceeds 10.0% limit \u2014 manual review required",
    "4 consecutive losses (pause at 3) \u2014 reduce size or wait for next win"
  ]
}
R REGRESSION PIPELINE unknown
Existing regression validation (8 domains)
Full regression results
{
  "passed": true,
  "stages_passed": [
    "create_simulation",
    "init_market_analyzer",
    "rank_trades",
    "estimate_pop",
    "run_daily_checks",
    "compute_position_size",
    "compute_income_yield",
    "monitor_exit_conditions"
  ],
  "stages_failed": [],
  "sample_trade": {
    "ticker": "GLD",
    "strategy": "trend_continuation",
    "score": 0.5647,
    "structure_type": "debit_spread",
    "pop_pct": 0.4222,
    "contracts": 2
  }
}