{
  "$comment": "SINGLE SOURCE OF TRUTH for the Wheel Score composite formula. Referenced from methodology.html, learn/glossary/wheel-score/, wheel-tracker.html, and worker/src/index.js::wheelScore(). Every visible Wheel Score UI must display 'Methodology v{version}' beside the number. When weights change, bump version + effectiveDate + add row to changelog.",
  "schemaVersion": "1.0",
  "version": "2.0",
  "effectiveDate": "2026-07-16",
  "lastReviewed": "2026-07-17",
  "sourceCodeLocation": "worker/src/index.js:804-811 (function wheelScore)",
  "sourceCodeUrl": "https://github.com/VYZE-INC/optiontrading/blob/main/worker/src/index.js#L804",
  "displayString": "Wheel Score computed via Methodology v2.0 (effective July 16, 2026)",
  "formulaOneLine": "wheelScore = 0.40 · yield_norm + 0.25 · liquidity_norm + 0.20 · delta_quality + 0.15 · iv_regime",
  "weights": {
    "yield_norm": {
      "weight": 0.40,
      "description": "Combined CSP + CC annualized yield, normalized against a 150% APY cap",
      "computation": "min(1, combined_yield / 1.5)"
    },
    "liquidity_norm": {
      "weight": 0.25,
      "description": "Bid-ask spread + open-interest + volume gates score, 0-100 normalized to 0-1",
      "computation": "liquidity_score / 100"
    },
    "delta_quality": {
      "weight": 0.20,
      "description": "Peaks at 0.27 delta short put (empirical sweet spot for wheel), decays linearly",
      "computation": "max(0, 1 - |delta_avg - 0.27| * 2)"
    },
    "iv_regime": {
      "weight": 0.15,
      "description": "Full credit when IV proxy <= 80%; linear decay to 0 at IV = 130% (penalizes crash-vol names)",
      "computation": "max(0, 1 - max(0, iv_proxy - 0.8) / 0.5)"
    }
  },
  "range": [0, 100],
  "interpretation": {
    "0-44": "Poor wheel candidate",
    "45-69": "Acceptable wheel candidate",
    "70-100": "Strong wheel candidate"
  },
  "workedExample": {
    "ticker": "SOFI",
    "inputs": {
      "combined_yield": 0.42,
      "liquidity_score": 78,
      "delta_avg": 0.30,
      "iv_proxy": 0.55
    },
    "steps": {
      "yield_norm": "min(1, 0.42 / 1.5) = 0.28",
      "liquidity_norm": "78 / 100 = 0.78",
      "delta_quality": "max(0, 1 - |0.30 - 0.27| * 2) = max(0, 1 - 0.06) = 0.94",
      "iv_regime": "max(0, 1 - max(0, 0.55 - 0.8) / 0.5) = 1.0"
    },
    "score": "round((0.40 * 0.28 + 0.25 * 0.78 + 0.20 * 0.94 + 0.15 * 1.0) * 100) = round((0.112 + 0.195 + 0.188 + 0.150) * 100) = 65"
  },
  "changelog": [
    {
      "version": "2.0",
      "effectiveDate": "2026-07-16",
      "change": "Replaced 3-factor formula (yield/liquidity/assignment-risk) with 4-factor (yield/liquidity/delta_quality/iv_regime). Added explicit IV regime penalty for crash-vol names. Delta quality now peaks at 0.27Δ (empirical wheel sweet spot) vs. previous linear delta penalty. Reweighted from 50/30/20 to 40/25/20/15 to give IV more voice in ranking."
    },
    {
      "version": "1.0",
      "effectiveDate": "2026-06-10",
      "change": "Initial Wheel Score: 0.5(yield_norm) + 0.3(liquidity_norm) + 0.2(assignment_risk_norm). Retired 2026-07-16 in favor of v2.0."
    }
  ]
}
