{
 "what_if": "edge-map: no cheat, a map of where the base earns and loses",
 "blocked": null,
 "python_version": "3.12.3",
 "base_mean_edge": 109.27254289017199,
 "base_unseen": {
  "mean_edge": 98.28063388702982,
  "retail_edge": 126.01907227628422,
  "arb_edge": -27.73843838925235
 },
 "diff": {
  "mean": 0.0,
  "standard_error": 0.0,
  "simulations": 4000,
  "seed_start": 50000,
  "retail": 0.0,
  "arb": 0.0
 },
 "by_spread": [
  {
   "spread": 1,
   "runs": 1016,
   "diff": 0.0,
   "standard_error": 0.0
  },
  {
   "spread": 2,
   "runs": 998,
   "diff": 0.0,
   "standard_error": 0.0
  },
  {
   "spread": 3,
   "runs": 1017,
   "diff": 0.0,
   "standard_error": 0.0
  },
  {
   "spread": 4,
   "runs": 969,
   "diff": 0.0,
   "standard_error": 0.0
  }
 ],
 "how": "Scratch copy of the simulator (commit b244530ee2a6247b5f930830eeca9dd950da0e7e) under .cache/, with log-only additions in three files and no change to any rule. engine.py: two lists on the engine; after the strategy's actions are applied it reads (does not alter) the base's resting orders and the competitor's best quotes; after the step's fills it appends one tuple per participant fill (step, side, price in ticks, quantity, true probability, edge computed with the simulator's own formula, aggressor retail or arb) and one tuple per step (true probability, jump count, inventory, free cash, retail orders drawn, competitor fills). market.py: _fill_order also appends fills of non-participant orders to a list, so the retail edge the competitor's quotes earned can be counted. process.py: step() stores the jump count it already drew. No random draw was added or reordered, the StepState given to the strategy is unchanged, and the base's code is unchanged. A driver runs SimulationEngine once per seed with the same sample_config as the simulator's runner and sums the fill log per run by zone, side, quarter and aggressor in the worker; the raw per-fill log was aggregated in memory and not kept on disk.",
 "clean": "Nothing. This what-if is not a cheat and gives the base no advantage: total, retail and arbitrage edge are identical to the unmodified simulator in every one of the 4000 runs (largest absolute difference 0.0), so diff is exactly 0. Two things to keep in mind when reading the map rather than the diff: zones are assigned by p after the step, so a quote swept by a jump is booked in the zone p lands in (a separate line books ask losses by the zone the quote was posted in); and the 'arithmetic bound' lines are sums over the map, not simulated ceilings.",
 "realizable": "WHERE THE BASE EARNS. 103.05 of its 126.02 retail edge is on asks, and 83.32 comes from asks filled by retail while p<5c, which is 11.9% of steps (63.18 from p<1c, 6.7% of steps); 67.89 is earned in the last quarter of the run. The rules explain it: a retail buy spends notional, so at ask price x it takes notional/x shares and leaves notional*(1-p/x) as edge, while a retail sell is share-denominated (notional/max(p,0.05)); the mirror zone above 80c earns 4.79. WHERE IT LOSES. 27.74 to the arbitrageur: 14.56 of it on the 3.8 steps per run that contain a jump (9.64 of that on asks), and 10.96 on bids the arbitrageur filled while p<5c, which is how the base gets the YES that covers its low asks. NOT REALIZABLE. (1) The middle: with p 5-80c (65% of steps) the base earns 34.97 retail and pays 12.10; the competitor's quotes earn 48.49 retail there but pay the arbitrageur 663.28 for it, so taking that flow at the competitor's prices loses money and the base is absent on 38-59% of those steps for that reason. (2) Above 80c: 4.79 earned, 3.44 paid. (3) More of the p<1c flow: the base already fills 91.8% of retail buy notional there (70.67 of 77.02) and keeps 82% of that notional as edge; the competitor's asks earn 5.74. REALIZABLE: the price the low-zone flow is sold at, mostly in spread-1 runs. Mean edge is 35.10, 83.51, 122.97, 153.82 for spread 1, 2, 3, 4. With p<1c the base sells one tick inside the competitor, at 1.04, 2.10, 3.12, 4.13 ticks on average, so in spread-1 runs every retail dollar takes about 100 shares: per spread-1 run it books 51.68 on 76.22 of demand, pays the arbitrageur 12.20 for 9658 YES, loses 6.02 on asks posted in that zone and leaves 10.02 to the competitor; in spread-4 runs the same four figures are 71.60 on 79.44, 2.89, 1.73 and 3.69. Mechanism: hold time priority at the competitor's own lowest ask tick (spread+1) instead of quoting one tick inside it. The competitor's order arrives at that tick only once its tick-1 bid has been consumed, so an ask already resting there is ahead of it; the base's ask is level with the competitor on only 9-18% of p<1c steps. Selling the same notional one tick higher hands over, buys and exposes 1/(1+price) fewer shares: by arithmetic on the map at most 15.35 per spread-1 run, 5.06, 3.10 and 1.67 for spreads 2-4, 6.36 per run overall. That is an upper bound counted from fills, not a simulated ceiling: it assumes priority costs nothing to get or hold. WHAT IT COSTS ELSEWHERE. Priority cannot be topped up (a new order queues behind the competitor), so the resting ask must be large and placed while p is still above 1c. A large ask there is swept whole when p moves back above its tick or jumps, and it needs YES cover before the base's tick-1 bid has filled (an uncovered ask at 2c locks $0.98 a share). The attempt shows the cost is real: enlarging the ask anywhere below 2c added 1.0-2.2 retail per spread-1 run and lost 2.0-5.3 to the arbitrageur on the tuning seeds; the cautious version kept scored +0.12 +/- 0.17 per run on seeds 50000-53999 (45 of 4000 runs changed), not distinguishable from zero. So this direction is open on arithmetic (over two points) but unproven: one cheap build of it captured nothing measurable. Why it captured so little was not measured; my reading is that the base holds too little YES before p crosses 1c for the priority ask to be large.",
 "attempt": {
  "name": "hold time priority one tick higher (spread-1 runs, p<2c)",
  "mechanism": "Three edits to the base, active only when the competitor spread is 1: while p is estimated below 1.15c and the main ask sits at tick 2 inside the competitor (whose ask reaches tick 2 only after p falls through 1c), size that ask to min(YES held, 0.56*min(steps left,1000)/0.02) shares instead of the one-step marginal size; and once the competitor is level at tick 2, never cancel that ask for being larger than the one-step size. Nothing else changed; runs with spread 2-4 are byte-identical in behaviour.",
  "tuned_on": "seeds 4000-7999, spread-1 runs only (the only runs the change can touch); six settings tried, the best on those seeds kept",
  "tuning": [
   "keep-only (never cancel a main ask that sits level with the competitor at tick spread+1 while p<2c; no enlargement): 999 spread-1 runs of seeds 4000-7999, difference per spread-1 run 0.08660873791961962 (standard error 0.04368930833148622), retail 0.09588222141241244, arb -0.009273483492492516",
   "enlarge when p<2c, size = min(YES held, 0.56*min(steps left,150)/price): 999 spread-1 runs of seeds 4000-7999, difference per spread-1 run -1.0058412589353358 (standard error 0.5057815147634771), retail 0.976113859236937, arb -1.981955118172272",
   "enlarge when p<2c, horizon 400: 999 spread-1 runs of seeds 4000-7999, difference per spread-1 run -1.8517436260282285 (standard error 0.8899587564967227), retail 1.9900097420706706, arb -3.841753368096496",
   "enlarge when p<2c, horizon 1000: 999 spread-1 runs of seeds 4000-7999, difference per spread-1 run -3.1659818066254255 (standard error 1.1474745854462318), retail 2.1832847653699705, arb -5.349266571996797",
   "enlarge only when estimated p<1.3c, horizon 400: 999 spread-1 runs of seeds 4000-7999, difference per spread-1 run 0.3075709356995996 (standard error 0.3111986525377799), retail 0.6885224144866866, arb -0.38095147878468466",
   "enlarge only when estimated p<1.15c, horizon 1000 (chosen): 999 spread-1 runs of seeds 4000-7999, difference per spread-1 run 0.4498600971195196 (standard error 0.35308215163767703), retail 0.8463844833584584, arb -0.39652438623593594"
  ],
  "diff": {
   "mean": 0.12006114750162496,
   "standard_error": 0.17157513684656325,
   "simulations": 4000,
   "seed_start": 50000,
   "retail": 0.18636562352140001,
   "arb": -0.06630447601909994
  },
  "by_spread": [
   {
    "spread": 1,
    "runs": 1016,
    "diff": 0.4726816830772636,
    "standard_error": 0.675619336783168
   },
   {
    "spread": 2,
    "runs": 998,
    "diff": 0.0,
    "standard_error": 0.0
   },
   {
    "spread": 3,
    "runs": 1017,
    "diff": 0.0,
    "standard_error": 0.0
   },
   {
    "spread": 4,
    "runs": 969,
    "diff": 0.0,
    "standard_error": 0.0
   }
  ],
  "runs_changed": 45,
  "mean_edge": 98.40069503453145,
  "verdict": "Not distinguishable from zero on the unseen seeds, and far below the arithmetic bound. Only a small number of runs changed at all. Larger versions (enlarge anywhere below 2c) gained retail edge but lost more to the arbitrageur on the tuning seeds. This one cheap version does not capture the bound; it does not show the bound is unreachable."
 },
 "tried": [
  "Scorer check, unmodified simulator at commit b244530ee2a6247b5f930830eeca9dd950da0e7e, Python 3.12.3, --workers 17: seeds 1000-1599 mean edge 109.27254289017199 (author measured 109.27254289017199), 0 failures.",
  "Scorer check, seeds 50000-53999: mean edge 98.28063388702982 (four seats measured 98.28063388702982), retail 126.01907227628422, arb -27.73843838925235, 0 failures.",
  "What-if check: base under the logging copy minus base under the unmodified simulator, run by run on seeds 50000-53999: mean 0.0, standard error 0.0, largest absolute per-run difference in total, retail or arb edge 0.0. 19739029 fills logged; the logged per-fill edges sum to the simulator's total_edge within 4.43e-09 in every run.",
  "Conventions for the table: zone is the true probability p after the step, the p at which the simulator scores that step's fills (below 2c: p<0.02; 2-5c: 0.02<=p<0.05; 5-20c: 0.05<=p<0.20; 20-80c: 0.20<=p<=0.80; above 80c: p>0.80). Side is the base's order: bid = the base bought, ask = the base sold. Quarter = step//500 + 1. Every edge figure is mean edge per run over the 4000 runs of seeds 50000-53999 (sum over all runs / 4000), unrounded in the zone x side x quarter table; supporting lines after it are rounded to 4 decimals.",
  "Share of steps with p below 2c: 0.085469875 (by quarter 1-4: 0.000451, 0.0135285, 0.07959999999999999, 0.24830000000000002 of that quarter's 500 steps).",
  "Share of steps with p 2-5c: 0.033246250000000005 (by quarter 1-4: 0.0023475, 0.022748, 0.0522935, 0.055596 of that quarter's 500 steps).",
  "Share of steps with p 5-20c: 0.11353 (by quarter 1-4: 0.0558355, 0.141484, 0.1559785, 0.10082200000000001 of that quarter's 500 steps).",
  "Share of steps with p 20-80c: 0.5342835 (by quarter 1-4: 0.874285, 0.6366900000000001, 0.4262025, 0.1999565 of that quarter's 500 steps).",
  "Share of steps with p above 80c: 0.23347037499999998 (by quarter 1-4: 0.067081, 0.1855495, 0.2859255, 0.39532550000000005 of that quarter's 500 steps).",
  "zone below 2c | side bid | quarter 1: retail fills 0.0012335438219332616, arbitrage fills -0.06687935324287365",
  "zone below 2c | side bid | quarter 2: retail fills 0.04598441261957757, arbitrage fills -1.3124916062841208",
  "zone below 2c | side bid | quarter 3: retail fills 0.19516653461969602, arbitrage fills -3.11675040729114",
  "zone below 2c | side bid | quarter 4: retail fills 0.2300361260384433, arbitrage fills -3.548587106039457",
  "zone below 2c | side ask | quarter 1: retail fills 0.047577634896024804, arbitrage fills -0.00018019786853840097",
  "zone below 2c | side ask | quarter 2: retail fills 2.2723321175734092, arbitrage fills -0.008412697187641626",
  "zone below 2c | side ask | quarter 3: retail fills 14.927448131347507, arbitrage fills -0.03730002560615765",
  "zone below 2c | side ask | quarter 4: retail fills 55.76371565870037, arbitrage fills -0.14044449024408576",
  "zone 2-5c | side bid | quarter 1: retail fills 0.025515712373714083, arbitrage fills -0.07767965333045482",
  "zone 2-5c | side bid | quarter 2: retail fills 0.3392881297963858, arbitrage fills -0.5774436383733342",
  "zone 2-5c | side bid | quarter 3: retail fills 0.9908048761741196, arbitrage fills -1.0750329807879921",
  "zone 2-5c | side bid | quarter 4: retail fills 1.1140301346804433, arbitrage fills -1.1867591033713711",
  "zone 2-5c | side ask | quarter 1: retail fills 0.22116894235832507, arbitrage fills -0.004093771265586933",
  "zone 2-5c | side ask | quarter 2: retail fills 1.7483988104850023, arbitrage fills -0.08475778354987093",
  "zone 2-5c | side ask | quarter 3: retail fills 3.992451613653671, arbitrage fills -0.45545729735195356",
  "zone 2-5c | side ask | quarter 4: retail fills 4.346368075681618, arbitrage fills -0.5088924954582912",
  "zone 5-20c | side bid | quarter 1: retail fills 0.5621163959956704, arbitrage fills -0.2771205371569847",
  "zone 5-20c | side bid | quarter 2: retail fills 1.8898479740355771, arbitrage fills -0.48538204351123776",
  "zone 5-20c | side bid | quarter 3: retail fills 2.5724921024685528, arbitrage fills -0.4283968054933259",
  "zone 5-20c | side bid | quarter 4: retail fills 1.5079886576819461, arbitrage fills -0.2619236859451864",
  "zone 5-20c | side ask | quarter 1: retail fills 1.133236621411262, arbitrage fills -0.09359865081841201",
  "zone 5-20c | side ask | quarter 2: retail fills 3.0469226551900395, arbitrage fills -0.48807715299098753",
  "zone 5-20c | side ask | quarter 3: retail fills 3.266531271331568, arbitrage fills -0.8443525802113945",
  "zone 5-20c | side ask | quarter 4: retail fills 1.774402133631242, arbitrage fills -1.4311363880009769",
  "zone 20-80c | side bid | quarter 1: retail fills 4.263428814749695, arbitrage fills -0.7829444525998199",
  "zone 20-80c | side bid | quarter 2: retail fills 2.924733109373479, arbitrage fills -0.5844554389132897",
  "zone 20-80c | side bid | quarter 3: retail fills 1.8235109971778325, arbitrage fills -0.5008674508801035",
  "zone 20-80c | side bid | quarter 4: retail fills 0.622915019611962, arbitrage fills -0.331365731960226",
  "zone 20-80c | side ask | quarter 1: retail fills 4.3502427352987265, arbitrage fills -0.9597043746236571",
  "zone 20-80c | side ask | quarter 2: retail fills 2.9332219541091877, arbitrage fills -0.8619756254580143",
  "zone 20-80c | side ask | quarter 3: retail fills 1.7470840844540712, arbitrage fills -1.098645853589869",
  "zone 20-80c | side ask | quarter 4: retail fills 0.5480351002100666, arbitrage fills -2.666229002472168",
  "zone above 80c | side bid | quarter 1: retail fills 0.2574501544209818, arbitrage fills -0.015138509851547341",
  "zone above 80c | side bid | quarter 2: retail fills 0.6920325707612359, arbitrage fills -0.046116135371867525",
  "zone above 80c | side bid | quarter 3: retail fills 1.1250064844063494, arbitrage fills -0.06611052490966077",
  "zone above 80c | side bid | quarter 4: retail fills 1.7858338236034592, arbitrage fills -0.05172522128717058",
  "zone above 80c | side ask | quarter 1: retail fills 0.10254409180373665, arbitrage fills -0.11010435221109417",
  "zone above 80c | side ask | quarter 2: retail fills 0.28823596676075725, arbitrage fills -0.14988105627459117",
  "zone above 80c | side ask | quarter 3: retail fills 0.3434449734999175, arbitrage fills -0.20113625527729279",
  "zone above 80c | side ask | quarter 4: retail fills 0.19629412948598618, arbitrage fills -2.8008879521348917",
  "Zone total below 2c: retail 73.48349415961692 (standard error 2.2757), arbitrage -8.231045883764013 (standard error 0.4583).",
  "Zone total 2-5c: retail 12.778026295203277 (standard error 0.4269), arbitrage -3.970116723488855 (standard error 0.1330).",
  "Zone total 5-20c: retail 15.75353781174586 (standard error 0.5012), arbitrage -4.309987844128505 (standard error 0.2394).",
  "Zone total 20-80c: retail 19.21317181498502 (standard error 0.3409), arbitrage -7.7861879304971415 (standard error 0.5046).",
  "Zone total above 80c: retail 4.790842194742424 (standard error 0.1347), arbitrage -3.4411000073181173 (standard error 0.8574).",
  "Side total bid: retail 22.969415574411055, arbitrage -14.793170386601163.",
  "Side total ask: retail 103.04965670188248, arbitrage -12.945268002595476.",
  "Quarter total 1: retail 10.96451464713007, arbitrage -2.387443852968969.",
  "Quarter total 2: retail 16.18099770070465, arbitrage -4.598993177914956.",
  "Quarter total 3: retail 30.983941069133284, arbitrage -7.82405018139889.",
  "Quarter total 4: retail 67.88961885932554, arbitrage -12.927951176913824.",
  "Finer zone p <1c (0.0669 of steps): retail on bids 0.0000, retail on asks 63.1753, arb on bids -6.5038, arb on asks 0.0000; retail edge the competitor's quotes earned there 5.7359 (and the competitor paid the arbitrageur 36.4302); base had no main ask on 0.0026 and no main bid on 0.9735 of those steps.",
  "Finer zone p 1-2c (0.0186 of steps): retail on bids 0.4724, retail on asks 9.8357, arb on bids -1.5409, arb on asks -0.1863; retail edge the competitor's quotes earned there 3.0335 (and the competitor paid the arbitrageur 14.4386); base had no main ask on 0.0495 and no main bid on 0.1348 of those steps.",
  "Finer zone p 2-5c (0.0332 of steps): retail on bids 2.4696, retail on asks 10.3084, arb on bids -2.9169, arb on asks -1.0532; retail edge the competitor's quotes earned there 6.4587 (and the competitor paid the arbitrageur 29.0683); base had no main ask on 0.1068 and no main bid on 0.0360 of those steps.",
  "Finer zone p 5-20c (0.1135 of steps): retail on bids 6.5324, retail on asks 9.2211, arb on bids -1.4528, arb on asks -2.8572; retail edge the competitor's quotes earned there 18.7654 (and the competitor paid the arbitrageur 155.6732); base had no main ask on 0.3797 and no main bid on 0.4682 of those steps.",
  "Finer zone p 20-80c (0.5343 of steps): retail on bids 9.6346, retail on asks 9.5786, arb on bids -2.1996, arb on asks -5.5866; retail edge the competitor's quotes earned there 29.7210 (and the competitor paid the arbitrageur 507.6027); base had no main ask on 0.5909 and no main bid on 0.5917 of those steps.",
  "Finer zone p 80-95c (0.1155 of steps): retail on bids 1.4614, retail on asks 0.7641, arb on bids -0.1625, arb on asks -2.3793; retail edge the competitor's quotes earned there 2.6053 (and the competitor paid the arbitrageur 85.3464); base had no main ask on 0.5182 and no main bid on 0.3780 of those steps.",
  "Finer zone p 95-98c (0.0327 of steps): retail on bids 0.5178, retail on asks 0.1374, arb on bids -0.0155, arb on asks -0.5468; retail edge the competitor's quotes earned there 0.4273 (and the competitor paid the arbitrageur 20.9610); base had no main ask on 0.4857 and no main bid on 0.1606 of those steps.",
  "Finer zone p 98-99c (0.0170 of steps): retail on bids 0.3225, retail on asks 0.0291, arb on bids -0.0011, arb on asks -0.1467; retail edge the competitor's quotes earned there 0.1536 (and the competitor paid the arbitrageur 5.5582); base had no main ask on 0.5336 and no main bid on 0.0788 of those steps.",
  "Finer zone p >99c (0.0683 of steps): retail on bids 1.5587, retail on asks 0.0000, arb on bids 0.0000, arb on asks -0.1892; retail edge the competitor's quotes earned there 0.3987 (and the competitor paid the arbitrageur 20.0919); base had no main ask on 0.9907 and no main bid on 0.0171 of those steps.",
  "Concentration: retail fills on asks while p<5c earn 83.3195 of the 126.0191 retail edge from 0.1187 of steps; 0.5058 of runs ever see p<1c.",
  "Retail buy demand (notional retail tried to spend, mean per run) by finer zone: <1c 77.0182, 1-2c 20.7847, 2-5c 38.3285, 5-20c 129.9123, 20-80c 609.9105, 80-95c 128.9313, 95-98c 36.9110, 98-99c 19.3651, >99c 77.1848. With p<1c the base's asks took 70.6745 of it at an average 2.0475 ticks and booked 63.1753 edge; the competitor's asks took 6.3414 and booked 5.7359.",
  "Arbitrage edge split by whether the step contained a jump: jump steps -14.5639 (asks -9.6378, bids -4.9261; 3.8222 jump steps per run), all other steps -13.1745. Probe orders (0.01 shares) cost -0.4794 of the total.",
  "Arbitrage edge on the base's asks, booked instead by the zone p was in BEFORE the step (where the quote was posted): <1c -3.1856, 1-2c -2.0168, 2-5c -2.9965, 5-20c -1.8470, 20-80c -2.5946, 80-95c -0.2060, 95-98c -0.0391, 98-99c -0.0144, >99c -0.0452; on its bids: <1c -2.0052, 1-2c -3.5580, 2-5c -4.6422, 5-20c -1.6049, 20-80c -2.5711, 80-95c -0.2976, 95-98c -0.0589, 98-99c -0.0302, >99c -0.0249.",
  "YES stock: the arbitrageur sold the base 6842.4061 shares per run while p<5c for -10.9616 edge; retail bought 4552.8407 shares from the base's asks there; mean YES left at settlement 2294.4453, mean NO 265.2187.",
  "Spread 1 (1016 runs): mean edge 35.099921878704336, retail 62.418918295369586, arb -27.318996416670473; by zone: below 2c retail 55.7301 arb -14.2388; 2-5c retail 4.3690 arb -5.0365; 5-20c retail 1.5265 arb -2.1984; 20-80c retail 0.0638 arb -1.2138; above 80c retail 0.7296 arb -4.6315.",
  "Spread 1, p<1c only: retail buy demand 76.2203; base asks filled 64.7733 notional at an average 1.0392 ticks for 51.6801 edge (value of the shares handed over 13.0932); competitor asks earned 10.0248; arbitrageur was paid 12.1984 on 9657.6920 shares bought by the base's bids; asks posted with p<1c lost 6.0195 to the arbitrageur; base ask was inside the competitor on 0.8976 and level with it on 0.0928 of those steps. Arithmetic bound (not simulated) if the same notional had been sold one tick higher, so 1/(1+1.0392) fewer shares handed over, bought and exposed: 15.3547 per run of this spread.",
  "Spread 2 (998 runs): mean edge 83.51205221971222, retail 109.17986677895291, arb -25.667814559215433; by zone: below 2c retail 73.2589 arb -8.5653; 2-5c retail 11.1318 arb -4.2951; 5-20c retail 10.7925 arb -4.1850; 20-80c retail 10.4803 arb -5.7657; above 80c retail 3.5163 arb -2.8566.",
  "Spread 2, p<1c only: retail buy demand 76.5488; base asks filled 70.0792 notional at an average 2.0954 ticks for 62.6397 edge (value of the shares handed over 7.4395); competitor asks earned 5.8942; arbitrageur was paid 6.7837 on 4433.0790 shares bought by the base's bids; asks posted with p<1c lost 1.4406 to the arbitrageur; base ask was inside the competitor on 0.8388 and level with it on 0.1609 of those steps. Arithmetic bound (not simulated) if the same notional had been sold one tick higher, so 1/(1+2.0954) fewer shares handed over, bought and exposed: 5.0603 per run of this spread.",
  "Spread 3 (1017 runs): mean edge 122.97345583671554, retail 152.8371980033301, arb -29.86374216660187; by zone: below 2c retail 80.7776 arb -5.6684; 2-5c retail 17.7964 arb -3.4936; 5-20c retail 22.3454 arb -5.5894; 20-80c retail 25.9844 arb -11.3018; above 80c retail 5.9334 arb -3.8106.",
  "Spread 3, p<1c only: retail buy demand 75.9709; base asks filled 72.4898 notional at an average 3.1179 ticks for 67.1582 edge (value of the shares handed over 5.3315); competitor asks earned 3.2439; arbitrageur was paid 3.9830 on 2486.6556 shares bought by the base's bids; asks posted with p<1c lost 3.4494 to the arbitrageur; base ask was inside the competitor on 0.8206 and level with it on 0.1791 of those steps. Arithmetic bound (not simulated) if the same notional had been sold one tick higher, so 1/(1+3.1179) fewer shares handed over, bought and exposed: 3.0996 per run of this spread.",
  "Spread 4 (969 runs): mean edge 153.82041508580312, retail 181.90065087952496, arb -28.080235793747264; by zone: below 2c retail 84.6739 arb -4.2772; 2-5c retail 18.0235 arb -3.0175; 5-20c retail 28.8617 arb -5.3099; 20-80c retail 41.1789 arb -13.0685; above 80c retail 9.1627 arb -2.4072.",
  "Spread 4, p<1c only: retail buy demand 79.4374; base asks filled 75.5699 notional at an average 4.1320 ticks for 71.5996 edge (value of the shares handed over 3.9703); competitor asks earned 3.6913; arbitrageur was paid 2.8904 on 1791.7505 shares bought by the base's bids; asks posted with p<1c lost 1.7345 to the arbitrageur; base ask was inside the competitor on 0.8160 and level with it on 0.1838 of those steps. Arithmetic bound (not simulated) if the same notional had been sold one tick higher, so 1/(1+4.1320) fewer shares handed over, bought and exposed: 1.6748 per run of this spread.",
  "Arithmetic bound from the four lines above, weighted by runs: selling the p<1c retail flow one tick higher would be worth at most 6.3564 per run. It is counted from the map, not a simulated ceiling, and assumes the higher tick costs nothing to hold."
 ],
 "next": "Turn the 6.36 arithmetic bound into a clean ceiling before building: in a scratch simulator give the base queue priority over competitor orders at the same tick while p<2c (that one rule), with the base's low-zone ask moved from one tick inside to level with the competitor, and score it on seeds 50000-53999 by spread. If spread 1 shows over two points per run overall, build there first: acquire YES before p crosses 1c, rest one large ask at tick spread+1 only when the estimate of p is within a fraction of a tick of 1c, and never re-queue it. Do not build in the 5-80c zone or above 80c: the map shows no room there."
}