{
  "key": "f-deep-tranche",
  "approach": "Blind survival fill-time overlay owning one N instance. At each signed tick distance from competitor touch, pool sides and fit a per-share geometric fill hazard from post-action order quantities versus next-step remaining quantities. Unfilled/cancelled shares contribute right-censored exposure; inverse hazard estimates waiting time. Learn an edge proxy per filled share from next-step competitor midpoint, not hidden true probability or aggressor labels. Rank eligible second tranches by hazard times estimated edge divided by cash collateral; require a price deeper than every N order on that side and strictly inside competitor quotes. Use one small tranche, cancel/re-estimate each step, hide its order views from N with dataclasses.replace, leave all other state fields visible. Conservative full-cash collateral accounting includes N actions. Initial spread gates the mechanism; outside the frozen set, return N actions untouched. Tuning and holdout are disjoint; paired SE uses sample variance across all seed differences including inactive zeros. seconds_per_simulation is holdout elapsed time divided by twice its pair count.",
  "tried": [
    {
      "name": "Incumbent N / scoreboard reference",
      "code_sha256": "bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae",
      "seed": 310000,
      "total_edge": 17.1160017503,
      "expected_rounded_edge": 17.116002,
      "baseline_check": true
    },
    {
      "name": "V1: censored geometric survival; distance -3..6 including competitor queue; $12 cap, 2.5% available collateral",
      "code_sha256": "4b4d9211d681ebad8f0b4361ac94185477cbe44c4897eb2ab8d1fe4c42a4bb2e",
      "first_seed": 310000,
      "last_seed": 310058,
      "spreads": [
        1,
        2,
        3,
        4
      ],
      "n": 59,
      "mean_diff": -27.097104678484737,
      "se": 2.890944694549047,
      "sum_d": -1598.7291760305995,
      "sum_d2": 71920.50635404188,
      "incumbent_mean": 99.99990078820677,
      "retail_diff": 0.8587315845677987,
      "arb_diff": -27.95583626306102,
      "failures": [],
      "stopped_reason": "Early elimination for large paired arbitrage losses; only complete seed pairs included."
    },
    {
      "name": "V2: same survival mechanism, inside competitor gap only (-3..-1), 200-step observation warmup, stop adding with <=100 steps left; edge estimate capped at current midpoint margin minus 0.003",
      "code_sha256": "fce66f15edb145cdc78be28eb51b417ce09ab4204e59298df351a07456e9df71",
      "first_seed": 310000,
      "last_seed": 310199,
      "spreads": [
        1,
        2,
        3,
        4
      ],
      "n": 200,
      "mean_diff": -0.7150069237644999,
      "se": 0.11586087426956043,
      "sum_d": -143.00138475289998,
      "sum_d2": 636.511919229209,
      "incumbent_mean": 85.162644703073,
      "retail_diff": 0.09063718980699996,
      "arb_diff": -0.8056441135785,
      "failures": [],
      "by_spread": {
        "1": {
          "n": 47,
          "mean_diff": 0.0,
          "se": 0.0,
          "sum_d": 0.0,
          "sum_d2": 0.0,
          "incumbent_mean": 30.59600304578298,
          "retail_diff": 0.0,
          "arb_diff": 0.0,
          "failures": []
        },
        "2": {
          "n": 57,
          "mean_diff": -0.825197940714035,
          "se": 0.19951252951642923,
          "sum_d": -47.03628262069999,
          "sum_d2": 165.8725997509136,
          "incumbent_mean": 81.35713208259824,
          "retail_diff": 0.11182338324561425,
          "arb_diff": -0.9370213239684209,
          "failures": []
        },
        "3": {
          "n": 53,
          "mean_diff": -0.8862466137490568,
          "se": 0.2537967106585834,
          "sum_d": -46.97107052870001,
          "sum_d2": 219.14954726034614,
          "incumbent_mean": 115.0669198036906,
          "retail_diff": 0.10434943010188666,
          "arb_diff": -0.9905960438584905,
          "failures": []
        },
        "4": {
          "n": 43,
          "mean_diff": -1.1393960838023247,
          "se": 0.32915389070281836,
          "sum_d": -48.99403160349996,
          "sum_d2": 251.48977221794925,
          "incumbent_mean": 112.9910120734674,
          "retail_diff": 0.14472058886046485,
          "arb_diff": -1.2841166726744184,
          "failures": []
        }
      },
      "selection": "Positive-mean active spreads, or the least-negative active spread if none are positive; spread 1 has no eligible inside-gap second tranche.",
      "selected_spreads": [
        2
      ],
      "selected_tuning_additions": 457
    },
    {
      "name": "Frozen validation",
      "off_equals_n": true,
      "off_seeds": [
        310000,
        310001,
        310002,
        310003,
        310004,
        310005,
        310006,
        310007,
        310008,
        310009
      ],
      "assembled_equals_s1": true,
      "assembled_seeds": [
        310004,
        310018,
        310105,
        310049,
        310104
      ],
      "scope": "Exact per-step action tuples and all SimulationResult fields; defaults, 2000 steps, serial in-process, no sandbox.",
      "holdout_additions": 549,
      "inactive_holdout_exact_edge_equality": true,
      "simulator_commit": "b244530ee2a6247b5f930830eeca9dd950da0e7e",
      "finalist_seeds_used": 0
    }
  ],
  "next": "Do not promote this overlay. Deeper orders still add adverse-selection loss; midpoint-based fill-edge estimation does not reliably separate retail from arbitrage. Keep N. No finalist seeds were run.",
  "spreads_acted": [
    2
  ],
  "off_equals_n": true,
  "code": "from dataclasses import replace as _dc_replace\nfrom math import floor as _floor\nfrom orderbook_pm_challenge.types import PlaceOrder as _Place, CancelOrder as _Cancel, CancelAll as _All, Side as _Side\n\nclass Strategy(BaseStrategy):\n    # Geometric, right-censored per-share survival model. Instances reset per run.\n    SPREADS = (2,)\n    BUDGET = 12.0\n    FRACTION = 0.025\n    PREFIX = 'survival-deep-'\n\n    def __init__(self):\n        self.n = _N()\n        self.s = None\n        self.last = []\n        self.model = {}\n        self.serial = 0\n        self.added = 0\n\n    @staticmethod\n    def _mid(st):\n        b, a = st.competitor_best_bid_ticks, st.competitor_best_ask_ticks\n        if b is None or a is None:\n            return None\n        return (b + a) / 200.0\n\n    def _cell(self, d):\n        d = max(-8, min(12, d))\n        if d not in self.model:\n            # Small optimistic pseudo-sample; longer prior survival behind touch.\n            hazard = 0.025 / (1.0 + max(0, d) * 3.0)\n            exposure = 1200.0\n            fills = exposure * hazard\n            edge = (max(1.0, self.s / 2.0) + d) / 100.0 - 0.012\n            self.model[d] = [exposure, fills, fills * edge]\n        return self.model[d]\n\n    def _learn(self, st):\n        mid = self._mid(st)\n        if mid is None:\n            self.last = []\n            return\n        remaining = {}\n        for o in st.own_orders:\n            k = (o.side, o.price_ticks)\n            remaining[k] = remaining.get(k, 0.0) + o.remaining_quantity\n        for side, tick, qty, distance in self.last:\n            left = remaining.get((side, tick), 0.0)\n            filled = min(qty, max(0.0, qty - left))\n            m = self._cell(distance)\n            for i in range(3):\n                m[i] *= 0.999\n            m[0] += qty\n            m[1] += filled\n            m[2] += filled * ((mid - tick / 100.0) if side == _Side.BUY else (tick / 100.0 - mid))\n\n    def on_step(self, state):\n        if self.s is None:\n            b, a = state.competitor_best_bid_ticks, state.competitor_best_ask_ticks\n            self.s = max(1, (a - b + 1) // 2) if b is not None and a is not None else 0\n        if self.s not in self.SPREADS:\n            return self.n.on_step(state)\n        self._learn(state)\n        extras = tuple(o for o in state.own_orders if o.order_id.startswith(self.PREFIX))\n        clean = _dc_replace(state, own_orders=tuple(o for o in state.own_orders if not o.order_id.startswith(self.PREFIX)))\n        actions = list(self.n.on_step(clean))\n        # Remove last step's tranche before applying N's actions, even if N\n        # cancels everything itself. Its surviving quantity was censored above.\n        out = [_Cancel(o.order_id) for o in extras] + actions\n        book = {o.order_id: (o.side, o.price_ticks, o.remaining_quantity) for o in clean.own_orders}\n        for i, action in enumerate(actions):\n            if isinstance(action, _All):\n                book.clear()\n            elif isinstance(action, _Cancel):\n                book.pop(action.order_id, None)\n            elif isinstance(action, _Place):\n                book[action.client_order_id or ('pending', i)] = (action.side, action.price_ticks, _floor(action.quantity * 100 + 1e-8) / 100)\n        b, a = state.competitor_best_bid_ticks, state.competitor_best_ask_ticks\n        # Full cash collateral for sells is conservative when YES covers them.\n        reserved = sum(q * (p / 100 if side == _Side.BUY else 1 - p / 100) for side, p, q in book.values())\n        free = max(0.0, state.cash - reserved)\n        budget = min(self.BUDGET, self.FRACTION * free)\n        best = None\n        if b is not None and a is not None and state.steps_remaining > 100 and state.step >= 200 and budget >= 0.10:\n            for side, touch in ((_Side.BUY, b), (_Side.SELL, a)):\n                levels = [p for sd, p, q in book.values() if sd == side and q > 0]\n                if not levels:\n                    continue\n                for d in range(-3, 0):\n                    tick = touch - d if side == _Side.BUY else touch + d\n                    if not 1 <= tick <= 99:\n                        continue\n                    if side == _Side.BUY:\n                        if tick >= min(levels) or tick >= a:\n                            continue\n                        cost = tick / 100.0\n                    else:\n                        if tick <= max(levels) or tick <= b:\n                            continue\n                        cost = 1 - tick / 100.0\n                    exposure, fills, edge_sum = self._cell(d)\n                    hazard = min(1.0, fills / exposure)\n                    mean_edge = edge_sum / fills if fills > 1e-12 else 0.0\n                    margin = ((b + a) / 2.0 - tick) / 100.0 if side == _Side.BUY else (tick - (b + a) / 2.0) / 100.0\n                    mean_edge = min(mean_edge, margin - 0.003)\n                    # Expected edge per collateral-dollar per step. The inverse\n                    # hazard is the fitted mean waiting time until a share fills.\n                    score = hazard * mean_edge / cost\n                    if score > 0.000001 and (best is None or score > best[0]):\n                        best = (score, side, tick, cost)\n        if best is not None:\n            _, side, tick, cost = best\n            qty = _floor(budget / cost * 100) / 100.0\n            if qty >= 0.01:\n                self.serial += 1\n                oid = self.PREFIX + str(self.serial)\n                out.append(_Place(side, tick, qty, client_order_id=oid))\n                book[oid] = (side, tick, qty)\n                self.added += 1\n        totals = {}\n        for side, tick, qty in book.values():\n            touch = b if side == _Side.BUY else a\n            if touch is not None:\n                d = touch - tick if side == _Side.BUY else tick - touch\n                key = (side, tick, d)\n                totals[key] = totals.get(key, 0.0) + qty\n        self.last = [(side, tick, qty, d) for (side, tick, d), qty in totals.items()]\n        return out\n",
  "code_sha256": "c9c946bce997656e44fce5b23d206ffea4a10d001842e2f3b37448705e3fc687",
  "assembled_sha256": "4c990d169f2792ce0dfcf5be68dc7adfccb8fd9ddd897afdeafb355e4b9182e0",
  "tuning": {
    "n": 200,
    "mean_diff": -0.23518141310349996,
    "se": 0.062367556219318825
  },
  "paired": {
    "first_seed": 410000,
    "last_seed": 410499,
    "n": 500,
    "complete": true,
    "incumbent_mean": 104.39217582931512,
    "mean_diff": -0.12893707315260003,
    "se": 0.03574586920269902,
    "sum_d": -64.46853657630001,
    "sum_d2": 327.1152920981678,
    "retail_diff": 0.013649168325999992,
    "arb_diff": -0.14258624147780002,
    "failures": 0
  },
  "by_spread": {
    "1": {
      "incumbent_mean": 28.495164940043484,
      "mean_diff": 0.0,
      "se": 0.0,
      "sum_d": 0.0,
      "sum_d2": 0.0,
      "retail_diff": 0.0,
      "arb_diff": 0.0,
      "runs": 115
    },
    "2": {
      "incumbent_mean": 97.76628686140519,
      "mean_diff": -0.5557632463474139,
      "se": 0.14776852134772675,
      "sum_d": -64.46853657630001,
      "sum_d2": 327.1152920981678,
      "retail_diff": 0.05883262209482756,
      "arb_diff": -0.6145958684387932,
      "runs": 116
    },
    "3": {
      "incumbent_mean": 128.40565590283617,
      "mean_diff": 0.0,
      "se": 0.0,
      "sum_d": 0.0,
      "sum_d2": 0.0,
      "retail_diff": 0.0,
      "arb_diff": 0.0,
      "runs": 138
    },
    "4": {
      "incumbent_mean": 151.58987905372672,
      "mean_diff": 0.0,
      "se": 0.0,
      "sum_d": 0.0,
      "sum_d2": 0.0,
      "retail_diff": 0.0,
      "arb_diff": 0.0,
      "runs": 131
    }
  },
  "seconds_per_simulation": 1.182310636459384
}
