{
  "version": "endpoint-light-backtest-v2",
  "revised": "2026-09-17",
  "created": "2026-09-17",
  "symbols": [
    "SPY",
    "QQQ",
    "IWM"
  ],
  "period": [
    "2020-01-01",
    "2025-12-31"
  ],
  "signal": "first trading close each month",
  "entry": "next close",
  "exit": "10 sessions after entry",
  "front_expiry": [
    35,
    30,
    45
  ],
  "oi_expiry": [
    30,
    60,
    "expiry carrying the most lagged open interest in this window; ties to the earlier expiry; used by every OI-based feature (exposure, DAG, VEX/CHEX changes, max pain, pin score, call/put volume, OI shift, execution score)"
  ],
  "back_expiry": [
    65,
    55,
    80
  ],
  "fee_per_contract_side": 0.65,
  "primary_structures": [
    "long_call",
    "bull_call_debit",
    "bull_put_credit",
    "iron_condor",
    "call_calendar",
    "long_straddle"
  ],
  "primary_cohort": "intersection of valid baseline trades for all six structures; signals computed independently before joining outcomes",
  "oi_and_volume_lag_sessions": 2,
  "macro_lag_sessions": 1,
  "surface_date": "signal date; historical fit reconstruction, original publication vintage unknown",
  "bootstrap_resamples": 1000,
  "bootstrap_seed": 20260917,
  "ranking": "ranking.csv: primary_strategy mean after costs among active trades; ranking_sharpe.csv: the same rows by annualized monthly Sharpe, which is the display order of the article's tables and profiles; fewer than 30 active trades shown separately",
  "risk_metrics": "monthly equal-weight series across the ETFs traded each month; Sharpe = mean / stdev x sqrt(12), no risk-free rate; max drawdown = largest peak-to-trough fall of the running total of monthly results, not compounded; profit factor = gross gains / gross losses; identical to the options-strategies article",
  "rules": [
    {
      "id": "momentum",
      "name": "Positive 20-session momentum",
      "formula_id": "PRICE",
      "feature": "momentum20",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "long_call"
    },
    {
      "id": "reversal",
      "name": "Negative 20-session momentum",
      "formula_id": "PRICE",
      "feature": "momentum20",
      "operator": "<",
      "threshold": 0,
      "primary_strategy": "long_call"
    },
    {
      "id": "rv_cooling",
      "name": "Realized volatility cooling",
      "formula_id": "RV",
      "feature": "rv5_rv20",
      "operator": "<",
      "threshold": 1,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "iv_rv",
      "name": "IV at least 1.2 times RV",
      "formula_id": "VRP",
      "feature": "iv_rv",
      "operator": ">=",
      "threshold": 1.2,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "variance_premium",
      "name": "Positive variance premium",
      "formula_id": "VRP",
      "feature": "variance_premium",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "vrp_percentile",
      "name": "VRP above its prior 75th percentile",
      "formula_id": "VRP",
      "feature": "vrp_percentile",
      "operator": ">=",
      "threshold": 75,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "ewma_premium",
      "name": "IV at least 1.2 times EWMA volatility",
      "formula_id": "FORECAST",
      "feature": "iv_ewma",
      "operator": ">=",
      "threshold": 1.2,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "move_buffer",
      "name": "Implied move exceeds the prior move",
      "formula_id": "MOVE",
      "feature": "move_buffer",
      "operator": ">=",
      "threshold": 1.5,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "carry_score",
      "name": "Carry proxy score at least 60",
      "formula_id": "CARRY",
      "feature": "carry_score",
      "operator": ">=",
      "threshold": 60,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "put_skew",
      "name": "Put skew at least three vol points",
      "formula_id": "SKEW",
      "feature": "put_skew",
      "operator": ">=",
      "threshold": 0.03,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "tail_rich",
      "name": "Put tail at least five vol points rich",
      "formula_id": "TAIL",
      "feature": "tail_rich",
      "operator": ">=",
      "threshold": 0.05,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "butterfly_rich",
      "name": "Wings at least one vol point rich",
      "formula_id": "SMILE",
      "feature": "bf25",
      "operator": ">=",
      "threshold": 0.01,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "term_up",
      "name": "Back IV exceeds front by two vol points",
      "formula_id": "TERM",
      "feature": "term",
      "operator": ">=",
      "threshold": 0.02,
      "primary_strategy": "call_calendar"
    },
    {
      "id": "term_down",
      "name": "Front IV exceeds back by two vol points",
      "formula_id": "TERM",
      "feature": "term",
      "operator": "<=",
      "threshold": -0.02,
      "primary_strategy": "call_calendar"
    },
    {
      "id": "put_yield",
      "name": "Annualized put premium at least 12%",
      "formula_id": "YIELD",
      "feature": "put_yield",
      "operator": ">=",
      "threshold": 0.12,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "tight_quotes",
      "name": "All four wing quotes within 10%",
      "formula_id": "LIQUIDITY",
      "feature": "wing_spread",
      "operator": "<=",
      "threshold": 0.1,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "gex_positive",
      "name": "Positive normalized GEX",
      "formula_id": "GEX",
      "feature": "gex",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "gex_negative",
      "name": "Negative normalized GEX",
      "formula_id": "GEX",
      "feature": "gex",
      "operator": "<",
      "threshold": 0,
      "primary_strategy": "long_straddle"
    },
    {
      "id": "dex_positive",
      "name": "Positive normalized DEX",
      "formula_id": "DEX",
      "feature": "dex",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "long_call"
    },
    {
      "id": "vanna_rising",
      "name": "Vanna exposure rises from prior month",
      "formula_id": "VEX",
      "feature": "vex_change",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "long_call"
    },
    {
      "id": "charm_rising",
      "name": "Charm exposure rises from prior month",
      "formula_id": "CHEX",
      "feature": "chex_change",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "long_call"
    },
    {
      "id": "dag_positive",
      "name": "Positive delta-adjusted GEX",
      "formula_id": "DAG",
      "feature": "dag",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "pain_above",
      "name": "Max pain above spot",
      "formula_id": "PAIN",
      "feature": "pain_distance",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "long_call"
    },
    {
      "id": "pain_near",
      "name": "Max pain within 1% of spot",
      "formula_id": "PAIN",
      "feature": "pain_abs_distance",
      "operator": "<=",
      "threshold": 0.01,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "pin_score",
      "name": "OI concentration proxy score at least 80",
      "formula_id": "PIN_PROXY",
      "feature": "pin_score",
      "operator": ">=",
      "threshold": 80,
      "primary_strategy": "iron_condor"
    },
    {
      "id": "call_volume",
      "name": "Lagged call volume exceeds puts by 1.5 times",
      "formula_id": "FLOW_CHAIN",
      "feature": "call_put_volume",
      "operator": ">=",
      "threshold": 1.5,
      "primary_strategy": "long_call"
    },
    {
      "id": "oi_shift",
      "name": "Call OI change exceeds put OI change",
      "formula_id": "OI_DIFF",
      "feature": "oi_shift",
      "operator": ">",
      "threshold": 0,
      "primary_strategy": "long_call"
    },
    {
      "id": "surface_put",
      "name": "Put IV exceeds SVI fit by one vol point",
      "formula_id": "SURFACE",
      "feature": "surface_put",
      "operator": ">=",
      "threshold": 0.01,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "macro_rich",
      "name": "VIX exceeds SPX RV by five vol points",
      "formula_id": "MACRO",
      "feature": "macro_spread",
      "operator": ">=",
      "threshold": 5,
      "primary_strategy": "bull_put_credit"
    },
    {
      "id": "execution",
      "name": "Execution proxy score at least 60",
      "formula_id": "EXECUTION_SCORE",
      "feature": "execution_score",
      "operator": ">=",
      "threshold": 60,
      "primary_strategy": "iron_condor"
    }
  ],
  "warning": "Rules frozen before this new run, after reading earlier results. Retrospective exploratory study with no untouched holdout. Reconstructed features and research gates, not exact historical production scores.",
  "revision_history": [
    "v1 2026-09-17: OI-based features used the same expiry as the trade (nearest 35 days within 30-45). That expiry was usually a weekly holding a median 2.3% of the open interest in range (SPY median 0.1%) and had zero archived OI in 46 of 133 windows, all in 2020-2022, so the ten OI-based rules saw 70-87 windows with 2022 almost absent.",
    "v2 2026-09-17: OI-based features moved to the highest-OI expiry within 30-60 days (normally the monthly). Rules, thresholds, primary structures, costs, lags, cohort and bootstrap policy are unchanged. This change was made after the v1 results were known; v1 outputs are kept in the release history for comparison."
  ]
}
