{
  "metadata": {
    "created": "2026-02-28T13:46:42.779239",
    "is_period": "2021-02-23 to 2024-02-22",
    "oos_period": "2024-02-23 to 2026-02-25",
    "is_days": 756,
    "oos_days": 505,
    "base_rate": 0.5159,
    "calibration_updated": "2026-02-28T15:04:29.400959"
  },
  "signal_winrates": {
    "gap_direction": {
      "flat": {
        "win_rate": 0.5018,
        "n": 273
      },
      "gap_down": {
        "win_rate": 0.415,
        "n": 200
      },
      "gap_up": {
        "win_rate": 0.6007,
        "n": 283
      }
    },
    "gap_size": {
      "tiny": {
        "win_rate": 0.5154,
        "n": 454
      },
      "small": {
        "win_rate": 0.5368,
        "n": 231
      },
      "medium": {
        "win_rate": 0.439,
        "n": 41
      },
      "large": {
        "win_rate": 0.4167,
        "n": 24
      }
    },
    "dow": {
      "Friday": {
        "win_rate": 0.5197,
        "n": 152
      },
      "Monday": {
        "win_rate": 0.5882,
        "n": 136
      },
      "Thursday": {
        "win_rate": 0.5355,
        "n": 155
      },
      "Tuesday": {
        "win_rate": 0.4423,
        "n": 156
      },
      "Wednesday": {
        "win_rate": 0.5032,
        "n": 157
      }
    },
    "vix_ratio": {
      "low<0.85": {
        "win_rate": 0.6318,
        "n": 239
      },
      "mid_0.85-0.95": {
        "win_rate": 0.511,
        "n": 227
      },
      "high_0.95-1.0": {
        "win_rate": 0.3883,
        "n": 103
      },
      "very_high>1.0": {
        "win_rate": 0.4409,
        "n": 186
      }
    },
    "vix_level": {
      "<15": {
        "win_rate": 0.619,
        "n": 126
      },
      "15-20": {
        "win_rate": 0.6013,
        "n": 301
      },
      "20-25": {
        "win_rate": 0.4451,
        "n": 182
      },
      ">25": {
        "win_rate": 0.3356,
        "n": 146
      }
    },
    "prior_return": {
      "big_down": {
        "win_rate": 0.381,
        "n": 105
      },
      "small_down": {
        "win_rate": 0.5541,
        "n": 148
      },
      "flat": {
        "win_rate": 0.5392,
        "n": 217
      },
      "small_up": {
        "win_rate": 0.5528,
        "n": 161
      },
      "big_up": {
        "win_rate": 0.4919,
        "n": 124
      }
    },
    "cum_5d": {
      "oversold": {
        "win_rate": 0.5,
        "n": 66
      },
      "weak": {
        "win_rate": 0.4919,
        "n": 124
      },
      "neutral": {
        "win_rate": 0.5317,
        "n": 284
      },
      "strong": {
        "win_rate": 0.534,
        "n": 206
      },
      "overbought": {
        "win_rate": 0.4507,
        "n": 71
      }
    },
    "gex_regime": {
      "negative": {
        "win_rate": 0.5833,
        "n": 36
      }
    }
  },
  "platt_scaling": {
    "a": 0.726914,
    "b": -0.011786,
    "use_scaling": "True"
  },
  "calibration": {
    "brier_raw": 0.2462,
    "brier_scaled": 0.2395,
    "brier_naive": 0.2485,
    "brier_skill": 0.036
  },
  "gap_fill_rates": {
    "by_size": {
      "tiny": {
        "fill_rate": 0.9061,
        "n": 181
      },
      "small": {
        "fill_rate": 0.8745,
        "n": 231
      },
      "medium": {
        "fill_rate": 0.6341,
        "n": 41
      },
      "large": {
        "fill_rate": 0.625,
        "n": 24
      },
      "huge": {
        "fill_rate": 0.5,
        "n": 6
      }
    },
    "by_direction": {
      "gap_down": {
        "fill_rate": 0.865,
        "n": 200
      },
      "gap_up": {
        "fill_rate": 0.8375,
        "n": 283
      }
    },
    "overall_fill_rate": 0.8489
  },
  "expected_ranges": {
    "vix_20-25": {
      "mean_range": 73.23,
      "median_range": 68.25,
      "n": 182
    },
    "vix_>25": {
      "mean_range": 108.78,
      "median_range": 107.12,
      "n": 146
    },
    "vix_15-20": {
      "mean_range": 48.74,
      "median_range": 45.25,
      "n": 301
    },
    "vix_<15": {
      "mean_range": 43.1,
      "median_range": 38.68,
      "n": 126
    },
    "gex_negative": {
      "mean_range": 51.34,
      "median_range": 48.12,
      "n": 36
    }
  },
  "backtest": {
    "fixed_size": {
      "total_trades": 305,
      "total_trading_days": 505,
      "total_pnl_pts": 2542.58,
      "total_pnl_usd": 127129.0,
      "win_rate": 0.6,
      "avg_win_pts": 31.19,
      "avg_loss_pts": 26.15,
      "profit_factor": 1.803,
      "sharpe": 3.757,
      "max_drawdown_pts": -239.0
    },
    "variable_size": {
      "total_trades": 305,
      "total_trading_days": 505,
      "total_pnl_pts": 5130.94,
      "total_pnl_usd": 256547.0,
      "win_rate": 0.6,
      "avg_win_pts": 56.81,
      "avg_loss_pts": 43.52,
      "profit_factor": 1.974,
      "sharpe": 4.03,
      "max_drawdown_pts": -376.25
    }
  },
  "calibration_fix": {
    "method": "combined",
    "description": "Weak signal discount (0.3x for dow/prior_return/cum_5d) + 8% haircut in 63-72% zone",
    "weak_signals": [
      "dow",
      "prior_return",
      "cum_5d"
    ],
    "weak_signal_discount": 0.3,
    "haircut_range": [
      0.63,
      0.72
    ],
    "haircut_amount": 0.08
  },
  "regime_adjustment": {
    "stress_criteria": {
      "vix_threshold": 25,
      "drawdown_20d_threshold": -5,
      "vix_ratio_threshold": 0.95
    },
    "regime_stats": {
      "vix_high": {
        "n": 24,
        "pred": 0.3234,
        "actual": 0.375
      },
      "drawdown": {
        "n": 29,
        "pred": 0.3772,
        "actual": 0.3793
      },
      "ratio_high": {
        "n": 101,
        "pred": 0.4583,
        "actual": 0.3663
      }
    },
    "stress_adjustment": -0.08,
    "normal_brier": 0.2338,
    "stress_brier": 0.259,
    "calibration_normal": [
      {
        "bin": "0.35-0.40",
        "n": 6,
        "pred_prob": 0.3748,
        "actual_wr": 0.6667,
        "gap": 0.2919
      },
      {
        "bin": "0.40-0.45",
        "n": 10,
        "pred_prob": 0.425,
        "actual_wr": 0.3,
        "gap": -0.125
      },
      {
        "bin": "0.45-0.50",
        "n": 9,
        "pred_prob": 0.4853,
        "actual_wr": 0.5556,
        "gap": 0.0703
      },
      {
        "bin": "0.50-0.55",
        "n": 20,
        "pred_prob": 0.5298,
        "actual_wr": 0.6,
        "gap": 0.0702
      },
      {
        "bin": "0.55-0.60",
        "n": 50,
        "pred_prob": 0.5773,
        "actual_wr": 0.56,
        "gap": -0.0173
      },
      {
        "bin": "0.60-0.65",
        "n": 124,
        "pred_prob": 0.6269,
        "actual_wr": 0.5806,
        "gap": -0.0463
      },
      {
        "bin": "0.65-0.70",
        "n": 92,
        "pred_prob": 0.6744,
        "actual_wr": 0.587,
        "gap": -0.0875
      },
      {
        "bin": "0.70-0.75",
        "n": 60,
        "pred_prob": 0.7265,
        "actual_wr": 0.7333,
        "gap": 0.0068
      },
      {
        "bin": "0.75-0.80",
        "n": 19,
        "pred_prob": 0.7661,
        "actual_wr": 0.8421,
        "gap": 0.0761
      }
    ],
    "calibration_stress": [
      {
        "bin": "0.30-0.35",
        "n": 5,
        "pred_prob": 0.3282,
        "actual_wr": 0.2,
        "gap": -0.1282
      },
      {
        "bin": "0.35-0.40",
        "n": 14,
        "pred_prob": 0.3754,
        "actual_wr": 0.3571,
        "gap": -0.0183
      },
      {
        "bin": "0.40-0.45",
        "n": 18,
        "pred_prob": 0.4253,
        "actual_wr": 0.4444,
        "gap": 0.0191
      },
      {
        "bin": "0.45-0.50",
        "n": 20,
        "pred_prob": 0.4742,
        "actual_wr": 0.45,
        "gap": -0.0242
      },
      {
        "bin": "0.50-0.55",
        "n": 20,
        "pred_prob": 0.522,
        "actual_wr": 0.2,
        "gap": -0.322
      },
      {
        "bin": "0.55-0.60",
        "n": 14,
        "pred_prob": 0.5739,
        "actual_wr": 0.4286,
        "gap": -0.1454
      },
      {
        "bin": "0.60-0.65",
        "n": 9,
        "pred_prob": 0.6282,
        "actual_wr": 0.4444,
        "gap": -0.1837
      }
    ],
    "description": "In stress (VIX>25 OR 20d ret<-5% OR VIX_ratio>0.95), subtract 8% from predicted probability"
  }
}