{
  "indicators": {
    "GWB": {
      "description": "Gamma Wall Bias (flipped: wall above = magnet = bullish)",
      "calculation": "GWB = -(|neg_mm_gamma_above| - |neg_mm_gamma_below|) / total. Positive = wall above = BULLISH (magnet pulls price up). Z-scored expanding.",
      "backtest": {
        "morning": {
          "1h": {
            "sharpe": 1.06,
            "win_rate": 0.499,
            "avg_bps": 1.12,
            "n_trades": 479,
            "max_dd_bps": -913.7,
            "profit_factor": 1.11
          },
          "3h": {
            "sharpe": 2.43,
            "win_rate": 0.486,
            "avg_bps": 4.05,
            "n_trades": 469,
            "max_dd_bps": -1453.0,
            "profit_factor": 1.28
          },
          "eod": {
            "sharpe": 1.85,
            "win_rate": 0.486,
            "avg_bps": 3.27,
            "n_trades": 479,
            "max_dd_bps": -1721.6,
            "profit_factor": 1.2
          }
        },
        "midday": {
          "1h": {
            "sharpe": 3.11,
            "win_rate": 0.499,
            "avg_bps": 2.31,
            "n_trades": 631,
            "max_dd_bps": -615.0,
            "profit_factor": 1.37
          },
          "3h": {
            "sharpe": 1.04,
            "win_rate": 0.493,
            "avg_bps": 1.12,
            "n_trades": 615,
            "max_dd_bps": -1414.8,
            "profit_factor": 1.1
          },
          "eod": {
            "sharpe": 2.04,
            "win_rate": 0.518,
            "avg_bps": 2.19,
            "n_trades": 639,
            "max_dd_bps": -1254.7,
            "profit_factor": 1.22
          }
        },
        "afternoon": {
          "1h": {
            "sharpe": -1.7,
            "win_rate": 0.458,
            "avg_bps": -0.88,
            "n_trades": 664,
            "max_dd_bps": -1178.6,
            "profit_factor": 0.85
          },
          "3h": null,
          "eod": {
            "sharpe": 1.28,
            "win_rate": 0.526,
            "avg_bps": 0.57,
            "n_trades": 991,
            "max_dd_bps": -1459.8,
            "profit_factor": 1.1
          }
        },
        "all_day": {
          "1h": {
            "sharpe": 1.82,
            "win_rate": 0.484,
            "avg_bps": 0.79,
            "n_trades": 1774,
            "max_dd_bps": -1347.9,
            "profit_factor": 1.11
          },
          "3h": {
            "sharpe": 2.52,
            "win_rate": 0.49,
            "avg_bps": 2.39,
            "n_trades": 1084,
            "max_dd_bps": -2255.3,
            "profit_factor": 1.19
          },
          "eod": {
            "sharpe": 3.0,
            "win_rate": 0.514,
            "avg_bps": 1.68,
            "n_trades": 2109,
            "max_dd_bps": -2855.1,
            "profit_factor": 1.18
          }
        }
      },
      "quintile_returns": {
        "morning": {
          "1h": {
            "Q1_low": {
              "mean_bps": 1.57,
              "median_bps": 4.73,
              "n": 283,
              "win_rate": 0.572
            },
            "Q2": {
              "mean_bps": -2.68,
              "median_bps": -1.48,
              "n": 282,
              "win_rate": 0.486
            },
            "Q3": {
              "mean_bps": -3.41,
              "median_bps": -1.84,
              "n": 282,
              "win_rate": 0.468
            },
            "Q4": {
              "mean_bps": -5.35,
              "median_bps": 0.74,
              "n": 282,
              "win_rate": 0.511
            },
            "Q5_high": {
              "mean_bps": 3.22,
              "median_bps": 3.57,
              "n": 283,
              "win_rate": 0.572
            },
            "spread_Q5_Q1": 1.65,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": 2.73,
              "median_bps": 9.34,
              "n": 280,
              "win_rate": 0.618
            },
            "Q2": {
              "mean_bps": -6.36,
              "median_bps": 4.31,
              "n": 280,
              "win_rate": 0.529
            },
            "Q3": {
              "mean_bps": -9.76,
              "median_bps": -5.04,
              "n": 280,
              "win_rate": 0.418
            },
            "Q4": {
              "mean_bps": -4.36,
              "median_bps": 3.22,
              "n": 280,
              "win_rate": 0.525
            },
            "Q5_high": {
              "mean_bps": 9.68,
              "median_bps": 8.05,
              "n": 280,
              "win_rate": 0.604
            },
            "spread_Q5_Q1": 6.95,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": 4.75,
              "median_bps": 9.68,
              "n": 283,
              "win_rate": 0.629
            },
            "Q2": {
              "mean_bps": -2.47,
              "median_bps": 7.8,
              "n": 282,
              "win_rate": 0.617
            },
            "Q3": {
              "mean_bps": -12.22,
              "median_bps": -5.93,
              "n": 282,
              "win_rate": 0.429
            },
            "Q4": {
              "mean_bps": -6.37,
              "median_bps": 3.38,
              "n": 282,
              "win_rate": 0.518
            },
            "Q5_high": {
              "mean_bps": 9.86,
              "median_bps": 7.21,
              "n": 283,
              "win_rate": 0.594
            },
            "spread_Q5_Q1": 5.11,
            "monotonic": false
          }
        },
        "midday": {
          "1h": {
            "Q1_low": {
              "mean_bps": -0.71,
              "median_bps": 1.81,
              "n": 375,
              "win_rate": 0.552
            },
            "Q2": {
              "mean_bps": -1.93,
              "median_bps": 0.0,
              "n": 374,
              "win_rate": 0.495
            },
            "Q3": {
              "mean_bps": -2.38,
              "median_bps": -0.36,
              "n": 374,
              "win_rate": 0.487
            },
            "Q4": {
              "mean_bps": -0.07,
              "median_bps": 2.27,
              "n": 374,
              "win_rate": 0.532
            },
            "Q5_high": {
              "mean_bps": 4.72,
              "median_bps": 3.39,
              "n": 375,
              "win_rate": 0.595
            },
            "spread_Q5_Q1": 5.43,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": 1.56,
              "median_bps": 1.16,
              "n": 370,
              "win_rate": 0.538
            },
            "Q2": {
              "mean_bps": -0.01,
              "median_bps": 2.72,
              "n": 369,
              "win_rate": 0.553
            },
            "Q3": {
              "mean_bps": -4.68,
              "median_bps": 2.22,
              "n": 370,
              "win_rate": 0.519
            },
            "Q4": {
              "mean_bps": -1.01,
              "median_bps": 3.23,
              "n": 369,
              "win_rate": 0.558
            },
            "Q5_high": {
              "mean_bps": 6.88,
              "median_bps": 6.99,
              "n": 370,
              "win_rate": 0.573
            },
            "spread_Q5_Q1": 5.32,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -0.62,
              "median_bps": -0.72,
              "n": 377,
              "win_rate": 0.475
            },
            "Q2": {
              "mean_bps": 3.41,
              "median_bps": 3.47,
              "n": 377,
              "win_rate": 0.573
            },
            "Q3": {
              "mean_bps": -5.71,
              "median_bps": 2.58,
              "n": 376,
              "win_rate": 0.535
            },
            "Q4": {
              "mean_bps": -4.46,
              "median_bps": 0.38,
              "n": 377,
              "win_rate": 0.504
            },
            "Q5_high": {
              "mean_bps": 6.88,
              "median_bps": 6.07,
              "n": 377,
              "win_rate": 0.552
            },
            "spread_Q5_Q1": 7.5,
            "monotonic": false
          }
        },
        "afternoon": {
          "1h": {
            "Q1_low": {
              "mean_bps": -0.34,
              "median_bps": 0.74,
              "n": 370,
              "win_rate": 0.516
            },
            "Q2": {
              "mean_bps": 1.26,
              "median_bps": 2.55,
              "n": 369,
              "win_rate": 0.591
            },
            "Q3": {
              "mean_bps": 1.47,
              "median_bps": 0.73,
              "n": 370,
              "win_rate": 0.519
            },
            "Q4": {
              "mean_bps": 2.77,
              "median_bps": 2.51,
              "n": 369,
              "win_rate": 0.577
            },
            "Q5_high": {
              "mean_bps": -1.38,
              "median_bps": -0.73,
              "n": 370,
              "win_rate": 0.476
            },
            "spread_Q5_Q1": -1.04,
            "monotonic": false
          },
          "3h": null,
          "eod": {
            "Q1_low": {
              "mean_bps": -3.1,
              "median_bps": -1.17,
              "n": 525,
              "win_rate": 0.413
            },
            "Q2": {
              "mean_bps": 2.57,
              "median_bps": 1.08,
              "n": 524,
              "win_rate": 0.521
            },
            "Q3": {
              "mean_bps": -0.12,
              "median_bps": 0.0,
              "n": 524,
              "win_rate": 0.492
            },
            "Q4": {
              "mean_bps": 0.44,
              "median_bps": 0.78,
              "n": 524,
              "win_rate": 0.523
            },
            "Q5_high": {
              "mean_bps": -0.64,
              "median_bps": 1.93,
              "n": 524,
              "win_rate": 0.548
            },
            "spread_Q5_Q1": 2.46,
            "monotonic": false
          }
        },
        "all_day": {
          "1h": {
            "Q1_low": {
              "mean_bps": -0.31,
              "median_bps": 1.12,
              "n": 1027,
              "win_rate": 0.536
            },
            "Q2": {
              "mean_bps": 0.21,
              "median_bps": 1.45,
              "n": 1026,
              "win_rate": 0.543
            },
            "Q3": {
              "mean_bps": -1.16,
              "median_bps": 0.0,
              "n": 1026,
              "win_rate": 0.496
            },
            "Q4": {
              "mean_bps": -1.14,
              "median_bps": 1.81,
              "n": 1026,
              "win_rate": 0.531
            },
            "Q5_high": {
              "mean_bps": 1.81,
              "median_bps": 1.56,
              "n": 1027,
              "win_rate": 0.547
            },
            "spread_Q5_Q1": 2.12,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": 1.84,
              "median_bps": 3.6,
              "n": 650,
              "win_rate": 0.575
            },
            "Q2": {
              "mean_bps": -0.88,
              "median_bps": 5.22,
              "n": 649,
              "win_rate": 0.558
            },
            "Q3": {
              "mean_bps": -7.76,
              "median_bps": -1.47,
              "n": 650,
              "win_rate": 0.48
            },
            "Q4": {
              "mean_bps": -2.76,
              "median_bps": 2.55,
              "n": 649,
              "win_rate": 0.527
            },
            "Q5_high": {
              "mean_bps": 7.65,
              "median_bps": 6.93,
              "n": 650,
              "win_rate": 0.58
            },
            "spread_Q5_Q1": 5.81,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -1.46,
              "median_bps": -0.36,
              "n": 1184,
              "win_rate": 0.469
            },
            "Q2": {
              "mean_bps": 3.59,
              "median_bps": 2.61,
              "n": 1183,
              "win_rate": 0.561
            },
            "Q3": {
              "mean_bps": -3.73,
              "median_bps": 1.85,
              "n": 1183,
              "win_rate": 0.522
            },
            "Q4": {
              "mean_bps": -4.91,
              "median_bps": 0.0,
              "n": 1183,
              "win_rate": 0.5
            },
            "Q5_high": {
              "mean_bps": 4.45,
              "median_bps": 4.6,
              "n": 1184,
              "win_rate": 0.559
            },
            "spread_Q5_Q1": 5.91,
            "monotonic": false
          }
        }
      },
      "is_oos_split": {
        "1h": {
          "is": {
            "sharpe": 2.04,
            "win_rate": 0.503,
            "avg_bps": 0.94,
            "n_trades": 1254,
            "max_dd_bps": -1347.9,
            "profit_factor": 1.12
          },
          "oos": {
            "sharpe": 1.26,
            "win_rate": 0.437,
            "avg_bps": 0.44,
            "n_trades": 520,
            "max_dd_bps": -847.5,
            "profit_factor": 1.08
          },
          "is_sharpe": 2.04,
          "oos_sharpe": 1.26,
          "consistent": true
        },
        "3h": {
          "is": {
            "sharpe": 4.09,
            "win_rate": 0.517,
            "avg_bps": 4.09,
            "n_trades": 795,
            "max_dd_bps": -1976.0,
            "profit_factor": 1.31
          },
          "oos": {
            "sharpe": -3.47,
            "win_rate": 0.415,
            "avg_bps": -2.29,
            "n_trades": 289,
            "max_dd_bps": -1560.9,
            "profit_factor": 0.78
          },
          "is_sharpe": 4.09,
          "oos_sharpe": -3.47,
          "consistent": false
        },
        "eod": {
          "is": {
            "sharpe": 2.35,
            "win_rate": 0.492,
            "avg_bps": 1.46,
            "n_trades": 1464,
            "max_dd_bps": -2855.1,
            "profit_factor": 1.13
          },
          "oos": {
            "sharpe": 6.17,
            "win_rate": 0.564,
            "avg_bps": 2.18,
            "n_trades": 645,
            "max_dd_bps": -1100.5,
            "profit_factor": 1.4
          },
          "is_sharpe": 2.35,
          "oos_sharpe": 6.17,
          "consistent": true
        }
      }
    },
    "ZDS": {
      "description": "0DTE Dominance Score (0DTE center above = bullish)",
      "calculation": "ZDS = 0dte_share \u00d7 (0dte_center - spot) / spot \u00d7 100. Positive = 0DTE center above = BULLISH. Z-scored expanding.",
      "backtest": {
        "morning": {
          "1h": {
            "sharpe": -0.57,
            "win_rate": 0.557,
            "avg_bps": -0.52,
            "n_trades": 644,
            "max_dd_bps": -1251.3,
            "profit_factor": 0.95
          },
          "3h": {
            "sharpe": -0.24,
            "win_rate": 0.55,
            "avg_bps": -0.35,
            "n_trades": 636,
            "max_dd_bps": -2920.6,
            "profit_factor": 0.98
          },
          "eod": {
            "sharpe": 0.04,
            "win_rate": 0.526,
            "avg_bps": 0.07,
            "n_trades": 644,
            "max_dd_bps": -3255.3,
            "profit_factor": 1.0
          }
        },
        "midday": {
          "1h": {
            "sharpe": 1.52,
            "win_rate": 0.507,
            "avg_bps": 0.9,
            "n_trades": 736,
            "max_dd_bps": -670.3,
            "profit_factor": 1.15
          },
          "3h": {
            "sharpe": 2.93,
            "win_rate": 0.543,
            "avg_bps": 2.58,
            "n_trades": 720,
            "max_dd_bps": -1148.6,
            "profit_factor": 1.27
          },
          "eod": {
            "sharpe": 3.56,
            "win_rate": 0.538,
            "avg_bps": 3.49,
            "n_trades": 744,
            "max_dd_bps": -1481.2,
            "profit_factor": 1.35
          }
        },
        "afternoon": {
          "1h": {
            "sharpe": 0.88,
            "win_rate": 0.496,
            "avg_bps": 0.5,
            "n_trades": 788,
            "max_dd_bps": -872.3,
            "profit_factor": 1.08
          },
          "3h": null,
          "eod": {
            "sharpe": 0.2,
            "win_rate": 0.496,
            "avg_bps": 0.1,
            "n_trades": 1160,
            "max_dd_bps": -2320.1,
            "profit_factor": 1.01
          }
        },
        "all_day": {
          "1h": {
            "sharpe": 0.85,
            "win_rate": 0.518,
            "avg_bps": 0.34,
            "n_trades": 2168,
            "max_dd_bps": -2164.6,
            "profit_factor": 1.04
          },
          "3h": {
            "sharpe": 1.47,
            "win_rate": 0.546,
            "avg_bps": 1.21,
            "n_trades": 1356,
            "max_dd_bps": -3607.6,
            "profit_factor": 1.1
          },
          "eod": {
            "sharpe": 1.88,
            "win_rate": 0.516,
            "avg_bps": 1.08,
            "n_trades": 2548,
            "max_dd_bps": -5659.4,
            "profit_factor": 1.1
          }
        }
      },
      "quintile_returns": {
        "morning": {
          "1h": {
            "Q1_low": {
              "mean_bps": -1.89,
              "median_bps": -1.45,
              "n": 283,
              "win_rate": 0.488
            },
            "Q2": {
              "mean_bps": -1.43,
              "median_bps": 1.44,
              "n": 282,
              "win_rate": 0.521
            },
            "Q3": {
              "mean_bps": -1.04,
              "median_bps": -0.18,
              "n": 282,
              "win_rate": 0.496
            },
            "Q4": {
              "mean_bps": -4.05,
              "median_bps": 0.79,
              "n": 282,
              "win_rate": 0.507
            },
            "Q5_high": {
              "mean_bps": 1.79,
              "median_bps": 3.35,
              "n": 283,
              "win_rate": 0.597
            },
            "spread_Q5_Q1": 3.68,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": -2.28,
              "median_bps": 0.0,
              "n": 280,
              "win_rate": 0.496
            },
            "Q2": {
              "mean_bps": -3.09,
              "median_bps": 4.0,
              "n": 280,
              "win_rate": 0.521
            },
            "Q3": {
              "mean_bps": 1.19,
              "median_bps": 7.23,
              "n": 280,
              "win_rate": 0.557
            },
            "Q4": {
              "mean_bps": -7.22,
              "median_bps": -0.0,
              "n": 280,
              "win_rate": 0.5
            },
            "Q5_high": {
              "mean_bps": 3.32,
              "median_bps": 9.97,
              "n": 280,
              "win_rate": 0.618
            },
            "spread_Q5_Q1": 5.6,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -1.97,
              "median_bps": 5.62,
              "n": 283,
              "win_rate": 0.544
            },
            "Q2": {
              "mean_bps": -4.63,
              "median_bps": 4.23,
              "n": 282,
              "win_rate": 0.56
            },
            "Q3": {
              "mean_bps": 1.02,
              "median_bps": 4.1,
              "n": 282,
              "win_rate": 0.56
            },
            "Q4": {
              "mean_bps": -5.36,
              "median_bps": 3.06,
              "n": 282,
              "win_rate": 0.521
            },
            "Q5_high": {
              "mean_bps": 4.53,
              "median_bps": 9.31,
              "n": 283,
              "win_rate": 0.601
            },
            "spread_Q5_Q1": 6.5,
            "monotonic": false
          }
        },
        "midday": {
          "1h": {
            "Q1_low": {
              "mean_bps": -1.74,
              "median_bps": 1.08,
              "n": 375,
              "win_rate": 0.528
            },
            "Q2": {
              "mean_bps": -0.91,
              "median_bps": -0.37,
              "n": 374,
              "win_rate": 0.479
            },
            "Q3": {
              "mean_bps": 1.78,
              "median_bps": 3.62,
              "n": 374,
              "win_rate": 0.583
            },
            "Q4": {
              "mean_bps": -1.67,
              "median_bps": 0.36,
              "n": 374,
              "win_rate": 0.5
            },
            "Q5_high": {
              "mean_bps": 2.18,
              "median_bps": 2.31,
              "n": 375,
              "win_rate": 0.571
            },
            "spread_Q5_Q1": 3.92,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": -3.41,
              "median_bps": -0.73,
              "n": 370,
              "win_rate": 0.492
            },
            "Q2": {
              "mean_bps": 3.59,
              "median_bps": 5.4,
              "n": 369,
              "win_rate": 0.588
            },
            "Q3": {
              "mean_bps": 1.2,
              "median_bps": 1.17,
              "n": 370,
              "win_rate": 0.535
            },
            "Q4": {
              "mean_bps": -3.48,
              "median_bps": 2.19,
              "n": 369,
              "win_rate": 0.528
            },
            "Q5_high": {
              "mean_bps": 4.83,
              "median_bps": 6.73,
              "n": 370,
              "win_rate": 0.597
            },
            "spread_Q5_Q1": 8.24,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -2.94,
              "median_bps": 0.36,
              "n": 377,
              "win_rate": 0.501
            },
            "Q2": {
              "mean_bps": -0.82,
              "median_bps": 2.24,
              "n": 377,
              "win_rate": 0.536
            },
            "Q3": {
              "mean_bps": -1.46,
              "median_bps": 0.72,
              "n": 376,
              "win_rate": 0.508
            },
            "Q4": {
              "mean_bps": -2.58,
              "median_bps": 1.07,
              "n": 377,
              "win_rate": 0.512
            },
            "Q5_high": {
              "mean_bps": 7.32,
              "median_bps": 7.19,
              "n": 377,
              "win_rate": 0.581
            },
            "spread_Q5_Q1": 10.26,
            "monotonic": false
          }
        },
        "afternoon": {
          "1h": {
            "Q1_low": {
              "mean_bps": 0.05,
              "median_bps": 1.08,
              "n": 370,
              "win_rate": 0.535
            },
            "Q2": {
              "mean_bps": 2.1,
              "median_bps": 1.86,
              "n": 369,
              "win_rate": 0.583
            },
            "Q3": {
              "mean_bps": 0.3,
              "median_bps": 0.73,
              "n": 370,
              "win_rate": 0.527
            },
            "Q4": {
              "mean_bps": -0.29,
              "median_bps": 0.37,
              "n": 369,
              "win_rate": 0.509
            },
            "Q5_high": {
              "mean_bps": 1.62,
              "median_bps": 1.53,
              "n": 370,
              "win_rate": 0.524
            },
            "spread_Q5_Q1": 1.57,
            "monotonic": false
          },
          "3h": null,
          "eod": {
            "Q1_low": {
              "mean_bps": -0.19,
              "median_bps": 0.36,
              "n": 525,
              "win_rate": 0.503
            },
            "Q2": {
              "mean_bps": -0.72,
              "median_bps": 0.18,
              "n": 524,
              "win_rate": 0.5
            },
            "Q3": {
              "mean_bps": -2.57,
              "median_bps": -2.24,
              "n": 524,
              "win_rate": 0.447
            },
            "Q4": {
              "mean_bps": 1.18,
              "median_bps": 0.73,
              "n": 524,
              "win_rate": 0.511
            },
            "Q5_high": {
              "mean_bps": 1.43,
              "median_bps": 1.49,
              "n": 524,
              "win_rate": 0.536
            },
            "spread_Q5_Q1": 1.62,
            "monotonic": false
          }
        },
        "all_day": {
          "1h": {
            "Q1_low": {
              "mean_bps": -1.06,
              "median_bps": 1.08,
              "n": 1027,
              "win_rate": 0.528
            },
            "Q2": {
              "mean_bps": -0.1,
              "median_bps": 1.09,
              "n": 1026,
              "win_rate": 0.523
            },
            "Q3": {
              "mean_bps": 0.63,
              "median_bps": 1.43,
              "n": 1026,
              "win_rate": 0.536
            },
            "Q4": {
              "mean_bps": -2.0,
              "median_bps": 0.0,
              "n": 1026,
              "win_rate": 0.497
            },
            "Q5_high": {
              "mean_bps": 1.94,
              "median_bps": 2.69,
              "n": 1027,
              "win_rate": 0.569
            },
            "spread_Q5_Q1": 3.0,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": -2.92,
              "median_bps": -0.37,
              "n": 650,
              "win_rate": 0.494
            },
            "Q2": {
              "mean_bps": 0.76,
              "median_bps": 5.05,
              "n": 649,
              "win_rate": 0.559
            },
            "Q3": {
              "mean_bps": 0.94,
              "median_bps": 3.4,
              "n": 650,
              "win_rate": 0.542
            },
            "Q4": {
              "mean_bps": -5.39,
              "median_bps": 0.77,
              "n": 649,
              "win_rate": 0.512
            },
            "Q5_high": {
              "mean_bps": 4.69,
              "median_bps": 7.85,
              "n": 650,
              "win_rate": 0.614
            },
            "spread_Q5_Q1": 7.61,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -1.36,
              "median_bps": 1.12,
              "n": 1184,
              "win_rate": 0.524
            },
            "Q2": {
              "mean_bps": -1.45,
              "median_bps": 1.12,
              "n": 1183,
              "win_rate": 0.526
            },
            "Q3": {
              "mean_bps": -0.97,
              "median_bps": -0.36,
              "n": 1183,
              "win_rate": 0.491
            },
            "Q4": {
              "mean_bps": -2.23,
              "median_bps": 0.0,
              "n": 1183,
              "win_rate": 0.49
            },
            "Q5_high": {
              "mean_bps": 3.95,
              "median_bps": 4.34,
              "n": 1184,
              "win_rate": 0.58
            },
            "spread_Q5_Q1": 5.31,
            "monotonic": false
          }
        }
      },
      "is_oos_split": {
        "1h": {
          "is": {
            "sharpe": 0.9,
            "win_rate": 0.545,
            "avg_bps": 0.32,
            "n_trades": 1657,
            "max_dd_bps": -2164.6,
            "profit_factor": 1.04
          },
          "oos": {
            "sharpe": 0.73,
            "win_rate": 0.431,
            "avg_bps": 0.39,
            "n_trades": 511,
            "max_dd_bps": -955.8,
            "profit_factor": 1.04
          },
          "is_sharpe": 0.9,
          "oos_sharpe": 0.73,
          "consistent": true
        },
        "3h": {
          "is": {
            "sharpe": 1.74,
            "win_rate": 0.566,
            "avg_bps": 1.33,
            "n_trades": 1061,
            "max_dd_bps": -3607.6,
            "profit_factor": 1.11
          },
          "oos": {
            "sharpe": 0.79,
            "win_rate": 0.475,
            "avg_bps": 0.78,
            "n_trades": 295,
            "max_dd_bps": -1001.2,
            "profit_factor": 1.06
          },
          "is_sharpe": 1.74,
          "oos_sharpe": 0.79,
          "consistent": true
        },
        "eod": {
          "is": {
            "sharpe": 0.64,
            "win_rate": 0.518,
            "avg_bps": 0.36,
            "n_trades": 1936,
            "max_dd_bps": -5659.4,
            "profit_factor": 1.03
          },
          "oos": {
            "sharpe": 5.85,
            "win_rate": 0.508,
            "avg_bps": 3.36,
            "n_trades": 612,
            "max_dd_bps": -1989.0,
            "profit_factor": 1.39
          },
          "is_sharpe": 0.64,
          "oos_sharpe": 5.85,
          "consistent": true
        }
      }
    },
    "SFA": {
      "description": "Smart Flow Asymmetry (smart money above = bearish)",
      "calculation": "SFA = 0.6 \u00d7 firm_asym + 0.4 \u00d7 procust_asym. Positive = smart money above = BEARISH. Z-scored.",
      "backtest": {
        "morning": {
          "1h": {
            "sharpe": 0.6,
            "win_rate": 0.608,
            "avg_bps": 0.66,
            "n_trades": 515,
            "max_dd_bps": -1430.7,
            "profit_factor": 1.06
          },
          "3h": {
            "sharpe": -1.38,
            "win_rate": 0.566,
            "avg_bps": -2.44,
            "n_trades": 507,
            "max_dd_bps": -3990.5,
            "profit_factor": 0.87
          },
          "eod": {
            "sharpe": -2.26,
            "win_rate": 0.571,
            "avg_bps": -4.68,
            "n_trades": 515,
            "max_dd_bps": -4453.2,
            "profit_factor": 0.78
          }
        },
        "midday": {
          "1h": {
            "sharpe": -2.43,
            "win_rate": 0.493,
            "avg_bps": -1.75,
            "n_trades": 515,
            "max_dd_bps": -1294.6,
            "profit_factor": 0.77
          },
          "3h": {
            "sharpe": 0.13,
            "win_rate": 0.527,
            "avg_bps": 0.15,
            "n_trades": 493,
            "max_dd_bps": -1316.4,
            "profit_factor": 1.01
          },
          "eod": {
            "sharpe": 0.96,
            "win_rate": 0.571,
            "avg_bps": 1.07,
            "n_trades": 527,
            "max_dd_bps": -1194.1,
            "profit_factor": 1.11
          }
        },
        "afternoon": {
          "1h": {
            "sharpe": 2.11,
            "win_rate": 0.517,
            "avg_bps": 1.43,
            "n_trades": 549,
            "max_dd_bps": -572.8,
            "profit_factor": 1.24
          },
          "3h": null,
          "eod": {
            "sharpe": 5.94,
            "win_rate": 0.568,
            "avg_bps": 3.4,
            "n_trades": 814,
            "max_dd_bps": -954.0,
            "profit_factor": 1.62
          }
        },
        "all_day": {
          "1h": {
            "sharpe": 0.29,
            "win_rate": 0.539,
            "avg_bps": 0.14,
            "n_trades": 1579,
            "max_dd_bps": -2524.4,
            "profit_factor": 1.02
          },
          "3h": {
            "sharpe": -1.09,
            "win_rate": 0.547,
            "avg_bps": -1.16,
            "n_trades": 1000,
            "max_dd_bps": -5076.3,
            "profit_factor": 0.92
          },
          "eod": {
            "sharpe": 0.7,
            "win_rate": 0.57,
            "avg_bps": 0.5,
            "n_trades": 1856,
            "max_dd_bps": -5058.3,
            "profit_factor": 1.04
          }
        }
      },
      "quintile_returns": {
        "morning": {
          "1h": {
            "Q1_low": {
              "mean_bps": 3.38,
              "median_bps": 9.45,
              "n": 283,
              "win_rate": 0.668
            },
            "Q2": {
              "mean_bps": -5.74,
              "median_bps": -1.49,
              "n": 282,
              "win_rate": 0.465
            },
            "Q3": {
              "mean_bps": 0.72,
              "median_bps": 3.22,
              "n": 282,
              "win_rate": 0.528
            },
            "Q4": {
              "mean_bps": -2.87,
              "median_bps": 0.73,
              "n": 282,
              "win_rate": 0.504
            },
            "Q5_high": {
              "mean_bps": -2.12,
              "median_bps": -2.71,
              "n": 283,
              "win_rate": 0.445
            },
            "spread_Q5_Q1": -5.5,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": -1.92,
              "median_bps": 15.25,
              "n": 280,
              "win_rate": 0.632
            },
            "Q2": {
              "mean_bps": -7.82,
              "median_bps": -2.54,
              "n": 280,
              "win_rate": 0.468
            },
            "Q3": {
              "mean_bps": 3.64,
              "median_bps": 7.23,
              "n": 280,
              "win_rate": 0.564
            },
            "Q4": {
              "mean_bps": 2.24,
              "median_bps": 6.82,
              "n": 280,
              "win_rate": 0.607
            },
            "Q5_high": {
              "mean_bps": -4.21,
              "median_bps": -3.92,
              "n": 280,
              "win_rate": 0.421
            },
            "spread_Q5_Q1": -2.29,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -2.36,
              "median_bps": 14.69,
              "n": 283,
              "win_rate": 0.657
            },
            "Q2": {
              "mean_bps": -13.18,
              "median_bps": -2.82,
              "n": 282,
              "win_rate": 0.475
            },
            "Q3": {
              "mean_bps": 4.72,
              "median_bps": 6.58,
              "n": 282,
              "win_rate": 0.567
            },
            "Q4": {
              "mean_bps": 4.41,
              "median_bps": 7.66,
              "n": 282,
              "win_rate": 0.606
            },
            "Q5_high": {
              "mean_bps": 0.02,
              "median_bps": -1.88,
              "n": 283,
              "win_rate": 0.481
            },
            "spread_Q5_Q1": 2.38,
            "monotonic": false
          }
        },
        "midday": {
          "1h": {
            "Q1_low": {
              "mean_bps": -1.36,
              "median_bps": 1.46,
              "n": 375,
              "win_rate": 0.531
            },
            "Q2": {
              "mean_bps": 0.75,
              "median_bps": 1.88,
              "n": 374,
              "win_rate": 0.561
            },
            "Q3": {
              "mean_bps": -2.13,
              "median_bps": -1.3,
              "n": 374,
              "win_rate": 0.46
            },
            "Q4": {
              "mean_bps": 1.38,
              "median_bps": 2.51,
              "n": 374,
              "win_rate": 0.578
            },
            "Q5_high": {
              "mean_bps": 1.02,
              "median_bps": 1.12,
              "n": 375,
              "win_rate": 0.531
            },
            "spread_Q5_Q1": 2.38,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": 1.5,
              "median_bps": 5.76,
              "n": 370,
              "win_rate": 0.584
            },
            "Q2": {
              "mean_bps": -1.15,
              "median_bps": 1.07,
              "n": 369,
              "win_rate": 0.526
            },
            "Q3": {
              "mean_bps": -1.37,
              "median_bps": -0.36,
              "n": 370,
              "win_rate": 0.497
            },
            "Q4": {
              "mean_bps": 3.82,
              "median_bps": 5.12,
              "n": 369,
              "win_rate": 0.577
            },
            "Q5_high": {
              "mean_bps": -0.06,
              "median_bps": 3.17,
              "n": 370,
              "win_rate": 0.557
            },
            "spread_Q5_Q1": -1.56,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": 2.66,
              "median_bps": 4.32,
              "n": 377,
              "win_rate": 0.615
            },
            "Q2": {
              "mean_bps": -3.39,
              "median_bps": -2.14,
              "n": 377,
              "win_rate": 0.451
            },
            "Q3": {
              "mean_bps": -2.68,
              "median_bps": -0.36,
              "n": 376,
              "win_rate": 0.479
            },
            "Q4": {
              "mean_bps": 2.5,
              "median_bps": 5.86,
              "n": 377,
              "win_rate": 0.573
            },
            "Q5_high": {
              "mean_bps": 0.42,
              "median_bps": 1.17,
              "n": 377,
              "win_rate": 0.52
            },
            "spread_Q5_Q1": -2.24,
            "monotonic": false
          }
        },
        "afternoon": {
          "1h": {
            "Q1_low": {
              "mean_bps": 2.6,
              "median_bps": 2.24,
              "n": 370,
              "win_rate": 0.559
            },
            "Q2": {
              "mean_bps": 1.36,
              "median_bps": 1.11,
              "n": 369,
              "win_rate": 0.531
            },
            "Q3": {
              "mean_bps": -0.72,
              "median_bps": 0.36,
              "n": 370,
              "win_rate": 0.511
            },
            "Q4": {
              "mean_bps": 0.53,
              "median_bps": 0.73,
              "n": 369,
              "win_rate": 0.526
            },
            "Q5_high": {
              "mean_bps": 0.02,
              "median_bps": 1.14,
              "n": 370,
              "win_rate": 0.551
            },
            "spread_Q5_Q1": -2.58,
            "monotonic": false
          },
          "3h": null,
          "eod": {
            "Q1_low": {
              "mean_bps": 6.34,
              "median_bps": 3.87,
              "n": 525,
              "win_rate": 0.621
            },
            "Q2": {
              "mean_bps": -2.26,
              "median_bps": -0.73,
              "n": 524,
              "win_rate": 0.475
            },
            "Q3": {
              "mean_bps": -3.56,
              "median_bps": -2.88,
              "n": 524,
              "win_rate": 0.41
            },
            "Q4": {
              "mean_bps": -0.17,
              "median_bps": 0.0,
              "n": 524,
              "win_rate": 0.489
            },
            "Q5_high": {
              "mean_bps": -1.22,
              "median_bps": 0.36,
              "n": 524,
              "win_rate": 0.502
            },
            "spread_Q5_Q1": -7.56,
            "monotonic": false
          }
        },
        "all_day": {
          "1h": {
            "Q1_low": {
              "mean_bps": 1.09,
              "median_bps": 3.33,
              "n": 1027,
              "win_rate": 0.576
            },
            "Q2": {
              "mean_bps": -0.45,
              "median_bps": 1.44,
              "n": 1026,
              "win_rate": 0.527
            },
            "Q3": {
              "mean_bps": -0.76,
              "median_bps": 0.0,
              "n": 1026,
              "win_rate": 0.493
            },
            "Q4": {
              "mean_bps": -0.3,
              "median_bps": 1.53,
              "n": 1026,
              "win_rate": 0.54
            },
            "Q5_high": {
              "mean_bps": -0.16,
              "median_bps": 0.73,
              "n": 1027,
              "win_rate": 0.516
            },
            "spread_Q5_Q1": -1.25,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": 0.15,
              "median_bps": 8.33,
              "n": 650,
              "win_rate": 0.603
            },
            "Q2": {
              "mean_bps": -4.01,
              "median_bps": 0.72,
              "n": 649,
              "win_rate": 0.512
            },
            "Q3": {
              "mean_bps": 0.58,
              "median_bps": 3.38,
              "n": 650,
              "win_rate": 0.514
            },
            "Q4": {
              "mean_bps": 3.21,
              "median_bps": 5.82,
              "n": 649,
              "win_rate": 0.592
            },
            "Q5_high": {
              "mean_bps": -1.85,
              "median_bps": 0.18,
              "n": 650,
              "win_rate": 0.5
            },
            "spread_Q5_Q1": -2.0,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": 2.61,
              "median_bps": 5.45,
              "n": 1184,
              "win_rate": 0.622
            },
            "Q2": {
              "mean_bps": -5.73,
              "median_bps": -1.93,
              "n": 1183,
              "win_rate": 0.454
            },
            "Q3": {
              "mean_bps": -0.31,
              "median_bps": 0.0,
              "n": 1183,
              "win_rate": 0.474
            },
            "Q4": {
              "mean_bps": 1.8,
              "median_bps": 2.95,
              "n": 1183,
              "win_rate": 0.556
            },
            "Q5_high": {
              "mean_bps": -0.43,
              "median_bps": 0.36,
              "n": 1184,
              "win_rate": 0.505
            },
            "spread_Q5_Q1": -3.04,
            "monotonic": false
          }
        }
      },
      "is_oos_split": {
        "1h": {
          "is": {
            "sharpe": -1.93,
            "win_rate": 0.525,
            "avg_bps": -0.86,
            "n_trades": 1240,
            "max_dd_bps": -2470.3,
            "profit_factor": 0.9
          },
          "oos": {
            "sharpe": 6.03,
            "win_rate": 0.59,
            "avg_bps": 3.83,
            "n_trades": 339,
            "max_dd_bps": -503.3,
            "profit_factor": 1.54
          },
          "is_sharpe": -1.93,
          "oos_sharpe": 6.03,
          "consistent": false
        },
        "3h": {
          "is": {
            "sharpe": -3.19,
            "win_rate": 0.528,
            "avg_bps": -3.3,
            "n_trades": 772,
            "max_dd_bps": -5076.3,
            "profit_factor": 0.8
          },
          "oos": {
            "sharpe": 5.86,
            "win_rate": 0.61,
            "avg_bps": 6.08,
            "n_trades": 228,
            "max_dd_bps": -552.1,
            "profit_factor": 1.62
          },
          "is_sharpe": -3.19,
          "oos_sharpe": 5.86,
          "consistent": false
        },
        "eod": {
          "is": {
            "sharpe": -1.37,
            "win_rate": 0.556,
            "avg_bps": -0.93,
            "n_trades": 1473,
            "max_dd_bps": -5058.3,
            "profit_factor": 0.92
          },
          "oos": {
            "sharpe": 8.73,
            "win_rate": 0.621,
            "avg_bps": 5.99,
            "n_trades": 383,
            "max_dd_bps": -817.9,
            "profit_factor": 1.81
          },
          "is_sharpe": -1.37,
          "oos_sharpe": 8.73,
          "consistent": false
        }
      }
    },
    "Combined": {
      "description": "GWB + ZDS - SFA (all normalized: positive = bullish)",
      "calculation": "(GWB_z + ZDS_z - SFA_z) / 3",
      "backtest": {
        "morning": {
          "1h": {
            "sharpe": 1.95,
            "win_rate": 0.608,
            "avg_bps": 3.11,
            "n_trades": 245,
            "max_dd_bps": -679.5,
            "profit_factor": 1.32
          },
          "3h": {
            "sharpe": 3.58,
            "win_rate": 0.607,
            "avg_bps": 7.84,
            "n_trades": 239,
            "max_dd_bps": -741.2,
            "profit_factor": 1.65
          },
          "eod": {
            "sharpe": 1.58,
            "win_rate": 0.555,
            "avg_bps": 4.04,
            "n_trades": 245,
            "max_dd_bps": -1467.4,
            "profit_factor": 1.23
          }
        },
        "midday": {
          "1h": {
            "sharpe": 0.8,
            "win_rate": 0.522,
            "avg_bps": 0.79,
            "n_trades": 301,
            "max_dd_bps": -586.8,
            "profit_factor": 1.14
          },
          "3h": {
            "sharpe": -0.42,
            "win_rate": 0.477,
            "avg_bps": -0.68,
            "n_trades": 285,
            "max_dd_bps": -1390.9,
            "profit_factor": 0.94
          },
          "eod": {
            "sharpe": -1.15,
            "win_rate": 0.505,
            "avg_bps": -1.92,
            "n_trades": 309,
            "max_dd_bps": -1107.5,
            "profit_factor": 0.85
          }
        },
        "afternoon": {
          "1h": {
            "sharpe": -0.66,
            "win_rate": 0.452,
            "avg_bps": -0.72,
            "n_trades": 279,
            "max_dd_bps": -701.7,
            "profit_factor": 0.9
          },
          "3h": null,
          "eod": {
            "sharpe": 1.08,
            "win_rate": 0.564,
            "avg_bps": 0.98,
            "n_trades": 392,
            "max_dd_bps": -837.4,
            "profit_factor": 1.15
          }
        },
        "all_day": {
          "1h": {
            "sharpe": 1.38,
            "win_rate": 0.524,
            "avg_bps": 0.97,
            "n_trades": 825,
            "max_dd_bps": -1604.9,
            "profit_factor": 1.13
          },
          "3h": {
            "sharpe": 2.39,
            "win_rate": 0.536,
            "avg_bps": 3.21,
            "n_trades": 524,
            "max_dd_bps": -1873.0,
            "profit_factor": 1.27
          },
          "eod": {
            "sharpe": 0.88,
            "win_rate": 0.542,
            "avg_bps": 0.83,
            "n_trades": 946,
            "max_dd_bps": -2196.0,
            "profit_factor": 1.07
          }
        }
      },
      "quintile_returns": {
        "morning": {
          "1h": {
            "Q1_low": {
              "mean_bps": 0.58,
              "median_bps": -0.72,
              "n": 283,
              "win_rate": 0.488
            },
            "Q2": {
              "mean_bps": -3.28,
              "median_bps": 0.37,
              "n": 282,
              "win_rate": 0.504
            },
            "Q3": {
              "mean_bps": -5.98,
              "median_bps": -1.46,
              "n": 282,
              "win_rate": 0.475
            },
            "Q4": {
              "mean_bps": -1.1,
              "median_bps": 1.54,
              "n": 282,
              "win_rate": 0.56
            },
            "Q5_high": {
              "mean_bps": 3.15,
              "median_bps": 5.12,
              "n": 283,
              "win_rate": 0.583
            },
            "spread_Q5_Q1": 2.57,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": 1.26,
              "median_bps": 1.08,
              "n": 280,
              "win_rate": 0.511
            },
            "Q2": {
              "mean_bps": -2.67,
              "median_bps": 6.0,
              "n": 280,
              "win_rate": 0.561
            },
            "Q3": {
              "mean_bps": -11.1,
              "median_bps": -0.38,
              "n": 280,
              "win_rate": 0.489
            },
            "Q4": {
              "mean_bps": -2.8,
              "median_bps": 4.48,
              "n": 280,
              "win_rate": 0.529
            },
            "Q5_high": {
              "mean_bps": 7.23,
              "median_bps": 9.57,
              "n": 280,
              "win_rate": 0.604
            },
            "spread_Q5_Q1": 5.97,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": 4.08,
              "median_bps": 6.29,
              "n": 283,
              "win_rate": 0.58
            },
            "Q2": {
              "mean_bps": -2.75,
              "median_bps": 4.83,
              "n": 282,
              "win_rate": 0.564
            },
            "Q3": {
              "mean_bps": -11.03,
              "median_bps": 0.02,
              "n": 282,
              "win_rate": 0.5
            },
            "Q4": {
              "mean_bps": -4.11,
              "median_bps": 3.28,
              "n": 282,
              "win_rate": 0.557
            },
            "Q5_high": {
              "mean_bps": 7.35,
              "median_bps": 9.37,
              "n": 283,
              "win_rate": 0.587
            },
            "spread_Q5_Q1": 3.27,
            "monotonic": false
          }
        },
        "midday": {
          "1h": {
            "Q1_low": {
              "mean_bps": -1.11,
              "median_bps": 1.09,
              "n": 375,
              "win_rate": 0.528
            },
            "Q2": {
              "mean_bps": -0.18,
              "median_bps": 1.79,
              "n": 374,
              "win_rate": 0.535
            },
            "Q3": {
              "mean_bps": -1.49,
              "median_bps": 1.43,
              "n": 374,
              "win_rate": 0.521
            },
            "Q4": {
              "mean_bps": -1.52,
              "median_bps": -0.73,
              "n": 374,
              "win_rate": 0.479
            },
            "Q5_high": {
              "mean_bps": 3.93,
              "median_bps": 3.39,
              "n": 375,
              "win_rate": 0.597
            },
            "spread_Q5_Q1": 5.04,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": -0.73,
              "median_bps": 1.46,
              "n": 370,
              "win_rate": 0.524
            },
            "Q2": {
              "mean_bps": 0.45,
              "median_bps": 3.48,
              "n": 369,
              "win_rate": 0.58
            },
            "Q3": {
              "mean_bps": -3.4,
              "median_bps": 0.18,
              "n": 370,
              "win_rate": 0.5
            },
            "Q4": {
              "mean_bps": 0.8,
              "median_bps": 5.89,
              "n": 369,
              "win_rate": 0.55
            },
            "Q5_high": {
              "mean_bps": 5.62,
              "median_bps": 5.41,
              "n": 370,
              "win_rate": 0.586
            },
            "spread_Q5_Q1": 6.35,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -0.34,
              "median_bps": 0.0,
              "n": 377,
              "win_rate": 0.491
            },
            "Q2": {
              "mean_bps": -1.58,
              "median_bps": 4.41,
              "n": 377,
              "win_rate": 0.599
            },
            "Q3": {
              "mean_bps": -4.65,
              "median_bps": -0.72,
              "n": 376,
              "win_rate": 0.468
            },
            "Q4": {
              "mean_bps": -0.07,
              "median_bps": 1.57,
              "n": 377,
              "win_rate": 0.517
            },
            "Q5_high": {
              "mean_bps": 6.15,
              "median_bps": 4.93,
              "n": 377,
              "win_rate": 0.562
            },
            "spread_Q5_Q1": 6.49,
            "monotonic": false
          }
        },
        "afternoon": {
          "1h": {
            "Q1_low": {
              "mean_bps": 0.08,
              "median_bps": 1.11,
              "n": 370,
              "win_rate": 0.557
            },
            "Q2": {
              "mean_bps": 1.15,
              "median_bps": 1.07,
              "n": 369,
              "win_rate": 0.526
            },
            "Q3": {
              "mean_bps": -1.74,
              "median_bps": 0.39,
              "n": 370,
              "win_rate": 0.522
            },
            "Q4": {
              "mean_bps": 3.44,
              "median_bps": 2.71,
              "n": 369,
              "win_rate": 0.583
            },
            "Q5_high": {
              "mean_bps": 0.87,
              "median_bps": 0.0,
              "n": 370,
              "win_rate": 0.492
            },
            "spread_Q5_Q1": 0.79,
            "monotonic": false
          },
          "3h": null,
          "eod": {
            "Q1_low": {
              "mean_bps": -1.45,
              "median_bps": -0.74,
              "n": 525,
              "win_rate": 0.455
            },
            "Q2": {
              "mean_bps": -1.75,
              "median_bps": -0.93,
              "n": 524,
              "win_rate": 0.46
            },
            "Q3": {
              "mean_bps": -0.34,
              "median_bps": 0.78,
              "n": 524,
              "win_rate": 0.513
            },
            "Q4": {
              "mean_bps": 1.14,
              "median_bps": 0.55,
              "n": 524,
              "win_rate": 0.508
            },
            "Q5_high": {
              "mean_bps": 1.53,
              "median_bps": 2.1,
              "n": 524,
              "win_rate": 0.561
            },
            "spread_Q5_Q1": 2.98,
            "monotonic": false
          }
        },
        "all_day": {
          "1h": {
            "Q1_low": {
              "mean_bps": -0.2,
              "median_bps": 1.07,
              "n": 1027,
              "win_rate": 0.524
            },
            "Q2": {
              "mean_bps": -0.75,
              "median_bps": 1.12,
              "n": 1026,
              "win_rate": 0.522
            },
            "Q3": {
              "mean_bps": -1.87,
              "median_bps": 0.72,
              "n": 1026,
              "win_rate": 0.512
            },
            "Q4": {
              "mean_bps": -0.63,
              "median_bps": 1.5,
              "n": 1026,
              "win_rate": 0.534
            },
            "Q5_high": {
              "mean_bps": 2.86,
              "median_bps": 2.31,
              "n": 1027,
              "win_rate": 0.561
            },
            "spread_Q5_Q1": 3.06,
            "monotonic": false
          },
          "3h": {
            "Q1_low": {
              "mean_bps": -0.3,
              "median_bps": 0.93,
              "n": 650,
              "win_rate": 0.512
            },
            "Q2": {
              "mean_bps": -1.69,
              "median_bps": 3.31,
              "n": 649,
              "win_rate": 0.561
            },
            "Q3": {
              "mean_bps": -3.8,
              "median_bps": 2.78,
              "n": 650,
              "win_rate": 0.525
            },
            "Q4": {
              "mean_bps": -1.87,
              "median_bps": 4.62,
              "n": 649,
              "win_rate": 0.535
            },
            "Q5_high": {
              "mean_bps": 5.73,
              "median_bps": 6.12,
              "n": 650,
              "win_rate": 0.588
            },
            "spread_Q5_Q1": 6.03,
            "monotonic": false
          },
          "eod": {
            "Q1_low": {
              "mean_bps": -0.05,
              "median_bps": 0.0,
              "n": 1184,
              "win_rate": 0.492
            },
            "Q2": {
              "mean_bps": -2.19,
              "median_bps": 1.08,
              "n": 1183,
              "win_rate": 0.52
            },
            "Q3": {
              "mean_bps": -1.55,
              "median_bps": 0.78,
              "n": 1183,
              "win_rate": 0.511
            },
            "Q4": {
              "mean_bps": -2.53,
              "median_bps": 1.82,
              "n": 1183,
              "win_rate": 0.522
            },
            "Q5_high": {
              "mean_bps": 4.25,
              "median_bps": 4.01,
              "n": 1184,
              "win_rate": 0.566
            },
            "spread_Q5_Q1": 4.3,
            "monotonic": false
          }
        }
      },
      "is_oos_split": {
        "1h": {
          "is": {
            "sharpe": 0.8,
            "win_rate": 0.544,
            "avg_bps": 0.49,
            "n_trades": 689,
            "max_dd_bps": -1604.9,
            "profit_factor": 1.06
          },
          "oos": {
            "sharpe": 3.17,
            "win_rate": 0.419,
            "avg_bps": 3.38,
            "n_trades": 136,
            "max_dd_bps": -505.2,
            "profit_factor": 1.55
          },
          "is_sharpe": 0.8,
          "oos_sharpe": 3.17,
          "consistent": true
        },
        "3h": {
          "is": {
            "sharpe": 1.95,
            "win_rate": 0.542,
            "avg_bps": 2.29,
            "n_trades": 454,
            "max_dd_bps": -1873.0,
            "profit_factor": 1.19
          },
          "oos": {
            "sharpe": 4.26,
            "win_rate": 0.5,
            "avg_bps": 9.17,
            "n_trades": 70,
            "max_dd_bps": -432.8,
            "profit_factor": 1.97
          },
          "is_sharpe": 1.95,
          "oos_sharpe": 4.26,
          "consistent": true
        },
        "eod": {
          "is": {
            "sharpe": -0.69,
            "win_rate": 0.532,
            "avg_bps": -0.6,
            "n_trades": 790,
            "max_dd_bps": -2349.9,
            "profit_factor": 0.95
          },
          "oos": {
            "sharpe": 7.6,
            "win_rate": 0.596,
            "avg_bps": 8.04,
            "n_trades": 156,
            "max_dd_bps": -522.6,
            "profit_factor": 2.56
          },
          "is_sharpe": -0.69,
          "oos_sharpe": 7.6,
          "consistent": false
        }
      }
    }
  },
  "best_indicator": "ZDS",
  "scores": {
    "GWB": "IS/OOS consistent at 1h and EOD. 3h flips. Good.",
    "ZDS": "IS/OOS consistent at ALL horizons (1h, 3h, EOD). Most robust.",
    "SFA": "DOES NOT WORK. IS/OOS sign flip on all horizons.",
    "Combined": "IS/OOS consistent at 1h and 3h, but small sample in OOS."
  },
  "trading_rules": "Trading Rules for Gamma Indicators (ES Futures)\n\nBEST INDICATOR: ZDS (0DTE Dominance Score)\nSECOND: GWB (Gamma Wall Bias)\nDOES NOT WORK: SFA (Smart Flow Asymmetry)\n\nKEY INSIGHT: Negative gamma walls above spot act as MAGNETS, not resistance.\nPrice tends to drift TOWARD large negative gamma concentrations, not away.\n\n=== PRIMARY STRATEGY: ZDS ===\nSignal: ZDS z-score (positive = 0DTE center above spot = bullish)\n  - ZDS z-score > +1.0 \u2192 LONG 1 ES\n  - ZDS z-score < -1.0 \u2192 SHORT 1 ES\n  - Between -1 and +1 \u2192 FLAT\n\nBest time of day: Midday (11:00-13:00 ET)\n  - Midday 1h: Sharpe 1.52, 50.7% WR\n  - Midday EOD: Sharpe 3.56, 53.8% WR, avg 3.49 bps\n\nIS/OOS Performance:\n  - 1h:  IS Sharpe 0.90, OOS 0.73 (consistent \u2705)\n  - 3h:  IS Sharpe 1.74, OOS 0.79 (consistent \u2705)\n  - EOD: IS Sharpe 0.64, OOS 5.85 (consistent \u2705)\n\n=== SECONDARY: GWB ===\nSignal: GWB z-score (positive = big wall above = bullish magnet)\n  - GWB z-score > +1.0 \u2192 LONG\n  - GWB z-score < -1.0 \u2192 SHORT\n\nBest time: Midday 1h (Sharpe 3.11, 49.9% WR, 2.31 bps avg)\n\nIS/OOS:\n  - 1h:  IS 2.04, OOS 1.26 \u2705\n  - EOD: IS 2.35, OOS 6.17 \u2705\n  - 3h:  FAILS (sign flip) \u274c\n\n=== COMBINED STRATEGY ===\nUse Combined z-score = (GWB_z + ZDS_z - SFA_z) / 3 for morning trades:\n  - Morning 1h: Sharpe 1.95, 60.8% WR, 3.11 bps avg\n  - Morning EOD: Sharpe 1.58, 55.5% WR\n\nEXIT RULES:\n  - Primary: Close after 1h (for 1h trades) or EOD\n  - Stop: Exit if z-score flips past 0\n  - Hard stop: 50 bps adverse move\n\nPOSITION: 1 ES contract per signal\nTRANSACTION COST: 0.25 pts (.50) per round trip\n\nCAVEATS:\n  - Average returns per trade are small (1-5 bps)\n  - Win rates near 50% \u2014 edge-based, not high-conviction\n  - OOS period is 52 days \u2014 needs more data validation\n  - The magnet effect contradicts popular gamma narrative\n",
  "metadata": {
    "n_snapshots": 6818,
    "n_backtest": 6074,
    "is_days": 105,
    "oos_days": 52,
    "date_range": "2025-07-24 to 2026-03-02",
    "tx_cost_bps": 0.37,
    "sign_convention": "POSITIVE = BULLISH for GWB, ZDS, Combined. POSITIVE = BEARISH for SFA."
  }
}