{
  "approach": "Probe-size: changed only the single PROBE assignment in the exact hash-verified B source, so probe order quantities and every probe/main-order classification threshold move together. Compared PROBE=0.005, 0.02, and 0.05 against B (PROBE=0.01) on every seed 110000..110499; selected the largest paired tuning mean, froze its source and SHA-256 before any holdout simulation, and measured that frozen candidate on all 1000 seeds 210000..210999. Used the unmodified simulator at b244530ee2a6247b5f930830eeca9dd950da0e7e, load_strategy_factory(path), default ChallengeConfig() and ParameterVariance(), 2000 steps, and one in-process run_batch call per seed with n_simulations=1 and workers=1; eight OS processes handled disjoint seed ranges, without sandbox. Incumbent tuning results were reused across candidates. PROBE=0.005 is below the 0.01-share quantum and failed when placing probes; every failure and its seed is retained in tried, and its diagnostic mean includes all simulator-returned partial edges. All other runs completed. SEs use sample standard deviation of paired differences divided by sqrt(n); seeds objects are inclusive ranges. seconds_per_simulation is the measured mean from the initial 20 serial B simulations on 110000..110019, reused in tuning. No other seeds or mechanisms were tested; finalist seeds 900000..903999 were untouched.",
  "tried": [
    {
      "strategy": "probe_0_005",
      "constants": {
        "PROBE": 0.005
      },
      "code_sha256": "b98a2f6d393032ef0fce7ca6b6a94c0fe9be31f9682d6744504076bff17cfc04",
      "T_n": 500,
      "T_mean_diff": -95.4853685513742,
      "T_se": 6.774213119450426,
      "T_candidate_mean": 0.0,
      "T_incumbent_mean": 95.4853685513742,
      "T_retail_diff": -117.9969727930142,
      "T_retail_se": 7.307024048182112,
      "T_arb_diff": 22.511604241651,
      "T_arb_se": 1.8041768998028753,
      "T_failure_count": 500,
      "T_failures": [
        {
          "strategy": "probe_0_005",
          "error": "orderbook_pm_challenge.market.OrderBookError: quantity must be positive after rounding",
          "seeds": [
            110000,
            110001,
            110002,
            110003,
            110004,
            110005,
            110006,
            110007,
            110008,
            110009,
            110010,
            110011,
            110012,
            110013,
            110014,
            110015,
            110016,
            110017,
            110018,
            110019,
            110020,
            110021,
            110022,
            110023,
            110024,
            110025,
            110026,
            110027,
            110028,
            110029,
            110030,
            110031,
            110032,
            110033,
            110034,
            110035,
            110036,
            110037,
            110038,
            110039,
            110040,
            110041,
            110042,
            110043,
            110044,
            110045,
            110046,
            110047,
            110048,
            110049,
            110050,
            110051,
            110052,
            110053,
            110054,
            110055,
            110056,
            110057,
            110058,
            110059,
            110060,
            110061,
            110062,
            110063,
            110064,
            110065,
            110066,
            110067,
            110068,
            110069,
            110070,
            110071,
            110072,
            110073,
            110074,
            110075,
            110076,
            110077,
            110078,
            110079,
            110080,
            110081,
            110082,
            110083,
            110084,
            110085,
            110086,
            110087,
            110088,
            110089,
            110090,
            110091,
            110092,
            110093,
            110094,
            110095,
            110096,
            110097,
            110098,
            110099,
            110100,
            110101,
            110102,
            110103,
            110104,
            110105,
            110106,
            110107,
            110108,
            110109,
            110110,
            110111,
            110112,
            110113,
            110114,
            110115,
            110116,
            110117,
            110118,
            110119,
            110120,
            110121,
            110122,
            110123,
            110124,
            110125,
            110126,
            110127,
            110128,
            110129,
            110130,
            110131,
            110132,
            110133,
            110134,
            110135,
            110136,
            110137,
            110138,
            110139,
            110140,
            110141,
            110142,
            110143,
            110144,
            110145,
            110146,
            110147,
            110148,
            110149,
            110150,
            110151,
            110152,
            110153,
            110154,
            110155,
            110156,
            110157,
            110158,
            110159,
            110160,
            110161,
            110162,
            110163,
            110164,
            110165,
            110166,
            110167,
            110168,
            110169,
            110170,
            110171,
            110172,
            110173,
            110174,
            110175,
            110176,
            110177,
            110178,
            110179,
            110180,
            110181,
            110182,
            110183,
            110184,
            110185,
            110186,
            110187,
            110188,
            110189,
            110190,
            110191,
            110192,
            110193,
            110194,
            110195,
            110196,
            110197,
            110198,
            110199,
            110200,
            110201,
            110202,
            110203,
            110204,
            110205,
            110206,
            110207,
            110208,
            110209,
            110210,
            110211,
            110212,
            110213,
            110214,
            110215,
            110216,
            110217,
            110218,
            110219,
            110220,
            110221,
            110222,
            110223,
            110224,
            110225,
            110226,
            110227,
            110228,
            110229,
            110230,
            110231,
            110232,
            110233,
            110234,
            110235,
            110236,
            110237,
            110238,
            110239,
            110240,
            110241,
            110242,
            110243,
            110244,
            110245,
            110246,
            110247,
            110248,
            110249,
            110250,
            110251,
            110252,
            110253,
            110254,
            110255,
            110256,
            110257,
            110258,
            110259,
            110260,
            110261,
            110262,
            110263,
            110264,
            110265,
            110266,
            110267,
            110268,
            110269,
            110270,
            110271,
            110272,
            110273,
            110274,
            110275,
            110276,
            110277,
            110278,
            110279,
            110280,
            110281,
            110282,
            110283,
            110284,
            110285,
            110286,
            110287,
            110288,
            110289,
            110290,
            110291,
            110292,
            110293,
            110294,
            110295,
            110296,
            110297,
            110298,
            110299,
            110300,
            110301,
            110302,
            110303,
            110304,
            110305,
            110306,
            110307,
            110308,
            110309,
            110310,
            110311,
            110312,
            110313,
            110314,
            110315,
            110316,
            110317,
            110318,
            110319,
            110320,
            110321,
            110322,
            110323,
            110324,
            110325,
            110326,
            110327,
            110328,
            110329,
            110330,
            110331,
            110332,
            110333,
            110334,
            110335,
            110336,
            110337,
            110338,
            110339,
            110340,
            110341,
            110342,
            110343,
            110344,
            110345,
            110346,
            110347,
            110348,
            110349,
            110350,
            110351,
            110352,
            110353,
            110354,
            110355,
            110356,
            110357,
            110358,
            110359,
            110360,
            110361,
            110362,
            110363,
            110364,
            110365,
            110366,
            110367,
            110368,
            110369,
            110370,
            110371,
            110372,
            110373,
            110374,
            110375,
            110376,
            110377,
            110378,
            110379,
            110380,
            110381,
            110382,
            110383,
            110384,
            110385,
            110386,
            110387,
            110388,
            110389,
            110390,
            110391,
            110392,
            110393,
            110394,
            110395,
            110396,
            110397,
            110398,
            110399,
            110400,
            110401,
            110402,
            110403,
            110404,
            110405,
            110406,
            110407,
            110408,
            110409,
            110410,
            110411,
            110412,
            110413,
            110414,
            110415,
            110416,
            110417,
            110418,
            110419,
            110420,
            110421,
            110422,
            110423,
            110424,
            110425,
            110426,
            110427,
            110428,
            110429,
            110430,
            110431,
            110432,
            110433,
            110434,
            110435,
            110436,
            110437,
            110438,
            110439,
            110440,
            110441,
            110442,
            110443,
            110444,
            110445,
            110446,
            110447,
            110448,
            110449,
            110450,
            110451,
            110452,
            110453,
            110454,
            110455,
            110456,
            110457,
            110458,
            110459,
            110460,
            110461,
            110462,
            110463,
            110464,
            110465,
            110466,
            110467,
            110468,
            110469,
            110470,
            110471,
            110472,
            110473,
            110474,
            110475,
            110476,
            110477,
            110478,
            110479,
            110480,
            110481,
            110482,
            110483,
            110484,
            110485,
            110486,
            110487,
            110488,
            110489,
            110490,
            110491,
            110492,
            110493,
            110494,
            110495,
            110496,
            110497,
            110498,
            110499
          ]
        }
      ],
      "T_score_valid": false,
      "T_score_note": "Diagnostic only: includes the simulator-returned partial edges for every failed seed; no failures were dropped. This is not a valid 2000-step strategy score."
    },
    {
      "strategy": "probe_0_02",
      "constants": {
        "PROBE": 0.02
      },
      "code_sha256": "58b9b10c1216d05ee265a27beea4292ca5e2366eb3eb155f51f81624967b2bd1",
      "T_n": 500,
      "T_mean_diff": -0.47822995592260015,
      "T_se": 0.012242868617487622,
      "T_candidate_mean": 95.00713859545161,
      "T_incumbent_mean": 95.4853685513742,
      "T_retail_diff": -0.001375349854399829,
      "T_retail_se": 0.0019192466229306525,
      "T_arb_diff": -0.4768546060621999,
      "T_arb_se": 0.011353546714920514,
      "T_failure_count": 0,
      "T_failures": [],
      "T_score_valid": true
    },
    {
      "strategy": "probe_0_05",
      "constants": {
        "PROBE": 0.05
      },
      "code_sha256": "2eb6737eb748bfafdbf5376ffb5cef40a440b1c9f908e4eba347d3366a68e1b9",
      "T_n": 500,
      "T_mean_diff": -1.9958080481158005,
      "T_se": 0.074409054058325,
      "T_candidate_mean": 93.4895605032584,
      "T_incumbent_mean": 95.4853685513742,
      "T_retail_diff": -0.08432056230179959,
      "T_retail_se": 0.04912958379213331,
      "T_arb_diff": -1.9114874858294002,
      "T_arb_se": 0.046144599582508404,
      "T_failure_count": 0,
      "T_failures": [],
      "T_score_valid": true
    }
  ],
  "next": "Retain B: this probe-size candidate did not gain more than twice its paired holdout SE. No promotion is claimed and the candidate was not revised after holdout. Leave further mechanisms to separate assigned items; values below the 0.01-share quantum cannot be used without changing the simulator, which this item forbids.",
  "code": "\"\"\"Stale-quote defence with tick probes, a sub-tick belief and cheap YES stock.\n\nEvery step the arbitrageur removes any order on the wrong side of p, so tiny\ntwo-sided probes around the estimate locate p to a tick; a grid filter narrows\nthat further.  Quotes sit one tick inside the competitor and are sized by the\nmarginal rule: one more share is worth quoting while the chance a retail order\nreaches it, times its edge, exceeds the expected arbitrage loss.  Near p=0 a\nretail buy pays almost its whole notional as edge, so YES is held to cover low\nasks.  That YES is bought when it is cheap: a large bid rests at tick 1 while p\nis above it, so the arbitrageur fills it on the crossing for about 0.1 tick a\nshare instead of nearly a full tick once p is near zero, and smaller bids sit on\nwhichever tick p is within 0.15 of.  Below tick 1 the estimate of p decays with\nthe time spent there, since no probe can see it.\n\"\"\"\nimport math\nfrom orderbook_pm_challenge.strategy import BaseStrategy\nfrom orderbook_pm_challenge.types import CancelOrder, PlaceOrder, Side\n\nP = dict(lam_r=0.25, m=5.0, sig_n=1.2, lam_j=0.0019, sig_j=0.35, sig=0.02,\n         qmax=3000.0, rmin=2, kA=0.7, kL=0.15, pL=0.05,\n         ammo=1.0, ydem=0.4, W=200.0, fy=0.6, ammo_q=60.0, ammo_pmax=0.05, ammo_maxpay=0.02,\n         fb=0.9, fu=0.7, xu=0.1, sticky=1.0, min_ahead=2.0, keep_hi=1.5, keep_lo=0.7, Hu=300.0, bins=8.0, filt=1.0, uni=0.01, jumpinfo=1.0, dmin=0.0, kLb=0.08, kLf=0.08, pinf=1.0, pre=0.0, H1=100.0,\n         ydf=0.6, Wf=2000.0, g_hi=0.15, g_lo=0.15, qf=400.0, pmaxf=0.05, pre_gap=1.0,\n         ydf1=0.6, g1=5.0, f1=0.6, a1=100.0, nb1=0.0, gs=1.0, p1t=1.0, m1=1.0, zd=1.0, pfl=0.0005)\nP.update({'W': 50, 'ammo_pmax': 0.02, 'fy': 0.7, 'fu': 0.25, 'Hu': 500})\nC = {'W': 50, 'ammo_pmax': 0.02, 'fy': 0.7, 'reserve': 200, 'scar': 0.0025, 'fu': 0.25, 'Hu': 500}\nSQ2 = math.sqrt(2.0)\nSQ2PI = math.sqrt(2.0 * math.pi)\ndef cdf(x): return 0.5 * (1.0 + math.erf(x / SQ2))\ndef pdf(x): return math.exp(-0.5 * x * x) / SQ2PI\ndef inv(p):\n    p = min(max(p, 1e-9), 1 - 1e-9)\n    t = math.sqrt(-2.0 * math.log(min(p, 1 - p)))\n    x = t - (2.515517 + 0.802853 * t + 0.010328 * t * t) / (1 + 1.432788 * t + 0.189269 * t * t + 0.001308 * t ** 3)\n    x = -x if p < 0.5 else x\n    for _ in range(2):\n        d = pdf(x)\n        if d < 1e-12:\n            break\n        x -= (cdf(x) - p) / d\n    return x\ndef lpm(k):\n    return pdf(k) + k * cdf(k)\ndef fl(q):\n    return math.floor(q * 100 + 1e-9) / 100\n\nNODES = [(-2.2, .06), (-1.3, .17), (-0.6, .27), (0.6, .27), (1.3, .17), (2.2, .06)]\nPROBE = 0.02\n\n\nclass Strategy(BaseStrategy):\n    def __init__(self):\n        self.n = 0\n        self.ahead = set()     # main orders placed strictly ahead of any competitor order at their tick\n        self.res = {}          # order id -> uncovered quantity at placement\n        self.bc = None         # belief: sub-tick grid centres (ticks)\n        self.bw = None         # belief: weights\n        self.st = 0.5          # last one-step sd in ticks\n        self.pcb = self.pca = None\n        self.pb = set()\n        self.pa = set()\n        self.tb = 0\n        self.s = None          # competitor spread parameter\n\n    def _oid(self, tag):\n        self.n += 1\n        return tag + str(self.n)\n\n    def on_step(self, state):\n        H = max(1, state.steps_remaining)\n        cb = state.competitor_best_bid_ticks or 0\n        ca = state.competitor_best_ask_ticks or 100\n        if self.s is None:\n            self.s = max(1, (ca - cb + 1) // 2)\n        lo, hi = cb, ca\n        for o in state.own_orders:\n            if o.side is Side.BUY:\n                lo = max(lo, o.price_ticks)\n            else:\n                hi = min(hi, o.price_ticks)\n        if P['pinf'] > 0:\n            sb = {o.price_ticks for o in state.own_orders if o.side is Side.BUY and o.remaining_quantity <= PROBE + 1e-9}\n            sa = {o.price_ticks for o in state.own_orders if o.side is Side.SELL and o.remaining_quantity <= PROBE + 1e-9}\n            ea = self.pa - sa\n            eb = self.pb - sb\n            if sa and ea:\n                lo = max(lo, min(max(ea), hi))\n            if eb and (sb or min(eb) <= P['p1t']):\n                hi = min(hi, max(min(eb), lo))\n        if P['jumpinfo'] > 0 and self.pcb is not None:\n            if ca > self.pca + 1:\n                lo = max(lo, ca - 1)\n            if cb < self.pcb - 1:\n                hi = min(hi, cb + 1)\n        self.pcb, self.pca = cb, ca\n        if lo > hi:\n            lo, hi = hi, lo\n        # sub-tick belief over p_(t-1): predict with one-step noise, truncate to [lo, hi]\n        wid = max(hi - lo, 1e-6)\n        nb = max(2, min(48, int(round(wid * P['bins']))))\n        cs = [lo + (i + 0.5) * wid / nb for i in range(nb)]\n        if self.bc is None or P['filt'] <= 0:\n            ws = [1.0 / nb] * nb\n        else:\n            sg = max(self.st, 0.6 * wid / nb)\n            k = -0.5 / (sg * sg)\n            ws = []\n            uni = P['uni'] * sg\n            for c in cs:\n                t = uni\n                for ci, wi in zip(self.bc, self.bw):\n                    d = c - ci\n                    d2 = d * d * k\n                    if d2 > -12.5:\n                        t += wi * math.exp(d2)\n                ws.append(t)\n            tot = sum(ws)\n            ws = [w / tot for w in ws]\n        self.bc, self.bw = cs, ws\n        mean_t = sum(c * w for c, w in zip(cs, ws))\n        var_t = max(sum(c * c * w for c, w in zip(cs, ws)) - mean_t * mean_t, 0.0)\n        phat = min(max(mean_t / 100.0, 0.002), 0.998)\n        var = P['sig'] ** 2 + P['lam_j'] * P['sig_j'] ** 2\n        sd = math.sqrt(H * var)\n        self.tb = self.tb + 1 if hi <= 1 else 0\n        if self.tb > 0 and P['zd'] > 0:\n            # below the last tick there is no probe: the score keeps walking away from it\n            phat = min(phat, max(P['pfl'], cdf(inv(0.01) - P['zd'] * 0.02 * math.sqrt(self.tb) / sd)))\n        z = inv(phat)\n        Z = z * sd\n        sp = pdf(z) / sd * P['sig']\n        self.st = sp * 100.0\n        s = math.sqrt(sp * sp + var_t / 1e4 + 1e-8)\n        sd1 = math.sqrt(max(1.0, H - 1.0) * var)\n        jp = [(cdf((Z + n * P['sig_j']) / sd1), w) for n, w in NODES]\n        lj = P['lam_j']\n\n        def AB(x):\n            k = (x - phat) / s\n            a = s * lpm(k)\n            b = a - (x - phat)\n            ja = sum(w * max(0.0, x - p) for p, w in jp)\n            jb = sum(w * max(0.0, p - x) for p, w in jp)\n            return (1 - lj) * a + lj * ja, (1 - lj) * b + lj * jb\n\n        if H == 1:\n            def AB(x):\n                return (1 - phat) * x, phat * (1 - x)\n        rho = P['lam_r'] * 0.5\n        mu = math.log(P['m']) - 0.5 * P['sig_n'] ** 2\n        kA = P['kL'] if phat < P['pL'] else P['kA']\n\n        def qsize(loss, gain, px):\n            loss *= kA\n            if gain <= 0:\n                return 0.0\n            tail = loss / (rho * gain)\n            if tail >= 1.0:\n                return 0.0\n            return min(P['qmax'], math.exp(mu + P['sig_n'] * inv(1 - max(tail, 1e-6))) / px)\n\n        ptk = phat * 100\n        def qbid(t):\n            if not 1 <= t <= 99:\n                return 0.0\n            a, b = AB(t / 100.0)\n            if phat * 100 - t < P['dmin']:\n                return 0.0\n            if P['nb1'] > 0 and self.s == 1 and t == 1 and ptk < 1.0:\n                return 0.0\n            if phat < P['pL']:\n                ytg = P['ydem'] * min(H, P['W']) / max(ca - 1, ptk + 1) * 100.0\n                a *= (P['kLb'] if state.yes_inventory < ytg else P['kLf']) / P['kL']\n            return qsize(a, b, max(phat, 0.05))\n\n        def qask(t):\n            if not 1 <= t <= 99:\n                return 0.0\n            a, b = AB(t / 100.0)\n            if t - phat * 100 < P['dmin']:\n                return 0.0\n            if phat < C.get('scar_p', .1):\n                a = max(0.0, a - C.get('scar', 0.0) * (1 - min(1.0, state.yes_inventory / C.get('stock', 3000.0))))\n            return min(C.get('askcap', P['qmax']), qsize(b, a, t / 100.0))\n\n        bids = [o for o in state.own_orders if o.side is Side.BUY and o.remaining_quantity > PROBE + 1e-9]\n        asks = [o for o in state.own_orders if o.side is Side.SELL and o.remaining_quantity > PROBE + 1e-9]\n        sticky = P['sticky'] > 0\n        def top(orders, comp, step):\n            if sticky and sum(o.remaining_quantity for o in orders if o.price_ticks == comp and o.order_id in self.ahead) >= P['min_ahead']:\n                return comp\n            return comp + step\n        bid_t = top(bids, cb, 1)\n        ask_t = top(asks, ca, -1)\n        qb = min(C.get('bidcap', 3000.0), qbid(bid_t))\n        qa = qask(ask_t)\n\n        Y = state.yes_inventory\n        if ask_t == 1 and H > P['H1'] and P['pre'] > 0:\n            qa = qa if Y >= P['a1'] > 0 else 0.0          # let the competitor's 2-tick ask erode instead of fronting it for nothing\n        # ammunition: hold YES so that low asks are covered\n        ptick = phat * 100\n        amt = 0\n        qam = 0.0\n        if P['ammo'] > 0 and ask_t >= 2 and phat < max(P['ammo_pmax'], P['pmaxf']):\n            wealth = state.cash + Y * phat\n            x = max(ask_t, ptick + 1) / 100.0\n            capw = P['fy'] * wealth / max(phat, 0.005)\n            target = min(P['ydem'] * min(H, P['W']) / x, capw)\n            full = min(P['ydf'] * min(H, P['Wf']) / x, capw) if phat < P['pmaxf'] else 0.0\n            t = max(1, min(99, int(math.ceil(ptick + 1e-9))))\n            g = t - ptick\n            if Y < full and g <= P['g_hi'] and bid_t <= t < ask_t:\n                amt, qam = t, min(P['qf'], full - Y)     # a tick p has just crossed: nearly free\n            elif Y < target and phat < P['ammo_pmax'] and bid_t <= t < ask_t and t / 100.0 - phat < P['ammo_maxpay']:\n                amt, qam = t, min(P['ammo_q'], target - Y)\n            elif Y < full and t >= 2 and 1.0 - g <= P['g_lo']:\n                amt, qam = t - 1, min(P['qf'], full - Y)  # rest just under p: filled only on the crossing, or by retail\n\n        if P['pre'] > 0 and ca == 2 and phat < 0.01 and H > P['H1'] and Y < P['pre'] and not qam and 1.0 - ptick < P['pre_gap']:\n            amt, qam = 1, min(P['ammo_q'], P['pre'] - Y)\n        q1 = 0.0\n        if P['ydf1'] > 0 and P['m1'] < ptick < P['g1'] + 1.0 and amt != 1:\n            q1 = max(0.0, P['ydf1'] * min(H, P['Wf']) / (self.s / 100.0) - Y)\n        # order management\n        actions = []\n        free = state.free_cash - 2.0\n        keep_ask = 0.0\n        new_b = []\n        new_a = []\n        def cancel(o):\n            nonlocal free\n            actions.append(CancelOrder(o.order_id))\n            x = o.price_ticks / 100.0\n            if o.side is Side.BUY:\n                free += x * o.remaining_quantity\n            else:\n                free += (1 - x) * min(self.res.get(o.order_id, 0.0), o.remaining_quantity)\n            self.ahead.discard(o.order_id)\n            self.res.pop(o.order_id, None)\n        for o in state.own_orders:\n            if o.remaining_quantity <= PROBE + 1e-9:\n                cancel(o)\n        kept_ids = set()\n        def manage(orders, t, q, comp):\n            kept = 0.0\n            for o in orders:\n                if not (C.get('recover', 0) and o.side is Side.SELL and t < comp and self.res.get(o.order_id, 0.0) > 1 and state.yes_inventory > C.get('recover_yes', 1) and state.free_cash < C.get('recover_cash', 200)) and o.price_ticks == t and q > 0 and kept + o.remaining_quantity <= max(q * P['keep_hi'], 1.0):\n                    kept += o.remaining_quantity\n                    kept_ids.add(o.order_id)\n                else:\n                    cancel(o)\n            return kept\n        kb = manage(bids, bid_t, qb, cb)\n        ka = manage(asks, ask_t, qa, ca)\n        add_b = (qb - kb) if (kb < qb * P['keep_lo'] and bid_t != cb) else 0.0\n        add_a = (qa - ka) if (ka < qa * P['keep_lo'] and ask_t != ca) else 0.0\n\n        budget = P['fb'] * max(free, 0.0)\n        cost = add_b * bid_t / 100.0 + qam * amt / 100.0\n        if cost > budget:\n            f = budget / cost\n            add_b *= f\n            qam *= f\n            cost = budget\n        out = []\n        q1 = min(q1, P['f1'] * max(budget - cost, 0.0) * 100.0)\n        if q1 >= 0.01:\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=1, quantity=fl(q1)))\n            free -= fl(q1) / 100.0 + 1e-6\n        if amt and qam >= 0.01:\n            q = fl(qam)\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=amt, quantity=q))\n            free -= q * amt / 100.0 + 1e-6\n        if bid_t >= 1 and add_b >= 0.01:\n            q = fl(add_b)\n            oid = self._oid('b')\n            out.append(PlaceOrder(side=Side.BUY, price_ticks=bid_t, quantity=q, client_order_id=oid))\n            free -= q * bid_t / 100.0 + 1e-6\n            if bid_t > cb:\n                self.ahead.add(oid)\n        if ask_t <= 99 and add_a >= 0.01:\n            x = ask_t / 100.0\n            covk = sum(o.remaining_quantity - min(self.res.get(o.order_id, 0.0), o.remaining_quantity)\n                       for o in asks if o.order_id in kept_ids)\n            cov = max(0.0, Y - covk - 0.1)\n            unc = max(0.0, add_a - cov)\n            if unc > 0:\n                ub = max(0.0, free - (1 - P['fu']) * max(state.cash, 0.0)) if x >= P['xu'] else 0.0\n                if H < P['Hu'] and phat < 0.05:\n                    ub = max(0.0, free * (1 - H / P['Hu']))\n                ub = min(ub, max(0.0, free - C.get('reserve', 0.0) * min(1.0, H / C.get('release', 50.0))))\n                unc = min(unc, ub / (1 - x))\n            q = fl(min(add_a, cov + unc))\n            if q >= 0.01:\n                oid = self._oid('a')\n                out.append(PlaceOrder(side=Side.SELL, price_ticks=ask_t, quantity=q, client_order_id=oid))\n                r = max(0.0, q - cov)\n                self.res[oid] = r\n                free -= r * (1 - x) + 1e-6\n                if ask_t < ca:\n                    self.ahead.add(oid)\n\n        # probes: tiny orders that the arbitrageur removes when p crosses them\n        f = int(math.floor(ptick + 1e-9))\n        r = max(int(P['rmin']), int(math.ceil(2.0 * s * 100)))\n        self.pb = set()\n        self.pa = set()\n        if free > 1.0:\n            for t in range(f, f + r + 1):\n                if cb < t < ca and 1 <= t <= 99:\n                    out.append(PlaceOrder(side=Side.BUY, price_ticks=t, quantity=PROBE))\n                    self.pb.add(t)\n            for t in range(f + 1 - r, f + 2):\n                if cb < t < ca and 1 <= t <= 99:\n                    out.append(PlaceOrder(side=Side.SELL, price_ticks=t, quantity=PROBE))\n                    self.pa.add(t)\n        return actions + out\n",
  "code_sha256": "58b9b10c1216d05ee265a27beea4292ca5e2366eb3eb155f51f81624967b2bd1",
  "incumbent_code_sha256": "baef955ec10728839f7c3357016ec9eb0550e7ec689bbd5171b1cdd5c9e37273",
  "tuning_score": {
    "seeds": {
      "start": 110000,
      "end": 110499,
      "inclusive": true
    },
    "n": 500,
    "mean_diff": -0.47822995592260015,
    "se": 0.012242868617487622
  },
  "paired": {
    "seeds": {
      "start": 210000,
      "end": 210999,
      "inclusive": true
    },
    "n": 1000,
    "complete": true,
    "mean_diff": -0.4750239388558995,
    "se": 0.010531190667803633,
    "sum_d": -475.0239388558995,
    "sum_d2": 336.44281339092595,
    "candidate_mean": 106.06163038871131,
    "incumbent_mean": 106.5366543275672,
    "retail_diff": -0.004057531323899706,
    "retail_se": 0.004418598213038701,
    "arb_diff": -0.47096640754140023,
    "arb_se": 0.008821862144700604,
    "failures": []
  },
  "seconds_per_simulation": 0.7240602963516721
}
