{
  "amendments": [
    {
      "change": "Adds fine_distance_held_weighted_difference: the 0.1%-bin wall comparison weighted by the number of expiring-held walls in each bin. The frozen count-weighted statistic is still reported.",
      "id": 1,
      "reason": "Weighting each bin by all walls lets bins with very few expiring-held walls (1-10) carry large weight. The question is about walls held by the expiring expiry, so their own distribution is the appropriate weight. Added after the first v2 build showed the count-weighted estimate; disclosed as post-hoc.",
      "recorded_at_utc": "2026-10-17T18:50:55.837501Z",
      "source_sha256_after": "5608098ce19f9aa8e2af2f88622c1822979e2543b869fe1887ee36bbb31aadb2",
      "source_sha256_before": "2c544a5c6aa2f5e338f86f1c7fd06971c46255a4d31b45d2d5b82907c28758e3"
    }
  ],
  "capture_reuse": "Responses are reused verbatim from the v1 capture (2026-10-17) except sessions whose inputs changed: early-close sessions (new decision time) and QQQ 2024-01-04 / 2024-01-08 (archive backfilled after v1). Those are re-captured; the later response replaces the earlier one.",
  "decision_time_et": "15:55 ET (date-only at= on exposure routes, which anchors at 15:55 ET); on scheduled early-close sessions (NYSE 13:00 close, ETF options 13:15) 12:55 ET with an explicit at= timestamp. Early closes follow FlashAlpha's TradingCalendar: the day after Thanksgiving, and Jul 3 / Dec 24 when Monday-Thursday.",
  "exclusions": "any non-200 or incomplete response is excluded and counted; nothing is interpolated. A session is excluded as stale when the option quote time (greeks_newest_at; income diagnostics quote_at) is more than 5 minutes before the decision time, or the endpoint reports data_status=stale.",
  "frozen_at_utc": "2026-10-17T18:46:04.937886Z",
  "inference": {
    "bootstrap": "moving-block bootstrap over sessions: blocks of 20 consecutive sessions, every row of a session kept together, 2000 resamples, seed 20261017",
    "multiple_tests": "reported as-is; no p-value thresholds are used to select results"
  },
  "outcomes": {
    "bars": "/v1/stock/{symbol}/prices daily OHLC (mid-derived from archived quotes)",
    "control_range_pct": "100 * (decision-session high - low) / previous close",
    "next_abs_return_pct": "100 * |next close / close of the decision session - 1|",
    "next_range_pct": "100 * (next high - next low) / close of the decision session"
  },
  "period": {
    "end": "2025-12-31",
    "start": "2022-01-03"
  },
  "source": "historical.flashalpha.com replay of the deployed endpoints; responses captured verbatim",
  "source_sha256": "a936d50e15e766a49cbf65ec17ec4bf804e80ff38effba53b59029a913bf09e5",
  "studies": {
    "expiry_impact": {
      "route": "/v1/exposure/expiry-impact/{symbol}?at=date&limit=5",
      "signal": "impact.removed_gross_share_pct for the nearest active expiry; impact.net_sign_changed",
      "tests": [
        "within-symbol terciles of the signal vs next_range_pct and next_abs_return_pct",
        "Spearman rank correlation",
        "OLS next_range_pct ~ signal + control_range_pct (z-scored), coefficient on signal",
        "stratified by selected expiry == decision session (0DTE)",
        "net-sign-change days vs other days"
      ]
    },
    "gamma_concentration": {
      "route": "/v1/exposure/term-structure/{symbol}?at=date",
      "signal": "gross_share_pct of next_active_expiry; Herfindahl index of gross shares across expiries",
      "tests": [
        "same tercile, Spearman and OLS tests as expiry impact, on the Herfindahl index",
        "joint OLS next_range_pct ~ Herfindahl + expiry-impact removed share + control_range_pct (z-scored); coefficient on the Herfindahl index",
        "agreement of front gross share with expiry impact's removed share at the same snapshot"
      ]
    },
    "strike_dependency": {
      "outcome": "call wall above the close is broken when next high > wall; put wall below the close is broken when next low < wall",
      "routes": [
        "/v1/exposure/levels/{symbol}?at=date",
        "/v1/exposure/strike-dependency/{symbol}?at=date&strike=wall"
      ],
      "signal": "share of the wall's gross gamma held by the nearest active expiry (expiring-held when >= 50%)",
      "tests": [
        "break rates by distance bucket (0-0.5, 0.5-1, 1-2, >2 % from close) for expiring-held vs other walls",
        "count-weighted stratified difference in break rate",
        "fine-distance adjustment: the same stratified difference over 0.1% bins to 1%, then 1-2 and >2%"
      ]
    },
    "yield_enhancement": {
      "answer_rate": "share of requests returning a candidate is reported per variant",
      "eligible": "picks whose expiry is an archived session on or before the period end",
      "entries": "first archived session of each week; covered_call and cash_secured_put",
      "outcome": "held to expiry, settled at the expiry-session close; no early close, assignment or dividends",
      "route": "/v1/strategies/yield-enhancement/{symbol}?at=dateT15:55:00&structure=...",
      "tests": [
        "in-the-money rate vs absolute_delta_proxy by bucket (0-.1, .1-.2, .2-.3, .3-.4, >.4) and Brier score",
        "per-trade outcome: premium at the displayed bid; covered call = stock move capped at the strike plus premium, as % of entry price; cash-secured put = premium minus intrinsic at expiry, as % of strike"
      ],
      "variants": {
        "dte30": "expiry parameter = the archived monthly (is_opex) expiry nearest 30 calendar days, from the same session's term-structure by_expiry; ties go to the earlier expiry",
        "endpoint_default": "no expiry parameter: the endpoint searches the full chain (its default)"
      }
    }
  },
  "study": "trader_context_endpoints",
  "supersedes": "trader-context-spy-qqq-2022-2025-v1-bd47765cb549",
  "symbols": [
    "SPY",
    "QQQ"
  ],
  "version": "trader-context-v2"
}