# Merge 01: 20 items for the Prediction Market challenge, one spread per seat Inputs are the 20 item results under `.imd/reads/artifacts/`. Every figure below is copied from the named item's JSON (`item-`). None of the figures were re-measured during this merge. All are local simulator results (commit b244530ee2a6247b5f930830eeca9dd950da0e7e, cited by most items), not leaderboard scores. `diff` is the paired mean-edge gain over the base on the spread's unseen seeds (60000–67999), with its standard error (SE). "Retail" and "arb" are the parts of that gain from retail fills and from arbitrageur fills, signed so that a positive number helps. ## 1. Scorer check (base_mean) The author's figure is 98.4694596619638. - **Matches exactly:** s1-bids, s1-flow, s1-free, s1-queue, s1-stock, s2-bids, s2-clock, s2-flow, s2-middle, s2-queue, s2-stock, s3-asks, s3-bids, s4-flow. s2-flow ran 2×2000 runs with 8 workers. s2-queue ran with 5 workers. - **Small numeric drift:** s2-free got 98.46945966196385 under PyPy 3.12. s1-middle got 98.46762449920578 under PyPy 3.11.13, which is 0.0018 low. It reports cross-interpreter differences on two spread-2 seeds and says the cause was not isolated. - **Not run:** s1-asks (null; about 37 s per simulation on its machine) and s1-clock (null; about 1.4 sims/s). ## 2. Missing, blocked or non-results (named, not guessed) - **s2-asks:** blocked. It had under 12 minutes left, ran nothing and returned no code. All its zeros are placeholders, not measurements. Spread 2 asks are still untested. - **s3-stock:** blocked. No Python interpreter (`python3: command not found`). Every field is null. Spread 3 stock is still untested. - **s1-asks:** returned the base unchanged on only 16 tuning and 16 unseen runs. Its base_unseen of 31.85 comes from those 16 runs and is not comparable to the 41.78 that the full 1969-run items report. - **s1-clock:** returned the base unchanged. Its unseen set was 249 seeds (base 38.51). Its other-spread check was 0 runs ("identical by construction"). ## 3. Base on unseen runs, per spread (agreed across items) | spread | runs | mean | retail | arb | items agreeing | |---|---|---|---|---|---| | 1 | 1969 | 41.78494849744236 | 65.911 | -24.126 | s1-bids, s1-flow, s1-free, s1-middle, s1-queue, s1-stock | | 2 | 1987 | 75.37891657984132 | 102.415 | -27.036 | all six s2 items that ran | | 3 | 2035 | 118.8166859338749 | 149.058 | -30.242 | s3-asks, s3-bids | | 4 | 2009 | 163.47813945343543 | 191.208 | -27.729 | s4-flow | These are higher than the brief's "about 35, 84, 123, 154", which come from a different unseen set. Spread 4 has only one item, so its base figure is not cross-checked. ## 4. Candidates (gain > 0, no failures, other spreads identical on 900 runs) | item | spread | diff mean | SE | retail | arb | seconds base → yours | code sha256 | |---|---|---|---|---|---|---|---| | s1-queue | 1 | **+2.2637** | 0.354 | +2.208 | +0.056 | 210.61 → 206.80 | c937628c… | | s1-flow | 1 | +1.2750 | 0.229 | +0.955 | +0.320 | 97.14 → 95.32 | 8d64518c… | | s1-bids | 1 | +0.4361 | 0.129 | -0.611 | +1.047 | 90.81 → 90.33 | 0eb7247f… | | s1-free | 1 | +0.2590 | 0.057 | +0.265 | -0.006 | 96.77 → 96.61 | 20846005… | | s1-middle | 1 | +0.0683 | 0.0065 | -0.023 | +0.091 | 198.93 → 168.60 (CPU) | 9b03f7f0… | | s2-stock | 2 | **+0.6075** | 0.183 | +0.290 | +0.318 | 147.27 → 146.75 | 29d4a3f9… | | s2-free | 2 | +0.6075 (same) | 0.183 | +0.290 | +0.318 | 515.33 → 503.38 | 82e4a40e… | | s2-flow | 2 | +0.6075 (same) | 0.183 | +0.290 | +0.318 | 152.27 → **154.76 (slower)** | 33ff3438… | | s2-queue | 2 | +0.4851 | 0.347 (<2 SE) | +1.601 | -1.116 | 71.89 → **72.65 (slower)** | 208e963b… | | s2-bids | 2 | +0.2860 | 0.081 | -0.167 | +0.453 | 85.64 → 85.01 | 1ab17227… | | s3-asks | 3 | **+0.8625** | 0.335 | +1.094 | -0.231 | 119.96 → 119.36 | 82386148… | | s4-flow | 4 | **+1.1441** | 0.340 | -0.596 | +1.740 | 334.60 → 333.71 (CPU) | 918443f8… | What each candidate changes: - **s1-queue:** when p̂ < 1 cent and tick 2 is strictly inside the rival ask, new tick-2 ask depth is multiplied by 5. Asks that are ahead of the rival at low ticks are kept while the target quantity stays positive. It adds a cached belief-loop speedup that was checked to give exactly the same results. - **s1-flow:** per-run estimate of retail intensity and order size, using a censored compound-Poisson/lognormal likelihood. Half the posterior change goes into ask sizing, and stock demand is scaled within [0.4, 1.9]. - **s1-bids:** suppresses bulk refill bids at ticks 2–5 but keeps the short-horizon bridge. - **s1-free:** keeps a resting ask up to 3× the target size (the base allows 1.5×). - **s1-middle:** drops the probes at 25–75c and caps the belief grid at 8 nodes, which makes it faster. - **s2-stock / s2-free / s2-flow:** turn on the base's spread-3 flow estimator for spread 2 and scale only the tick-1 (one-cent) stock target, clipped to 0.5–2. All three report identical holdout figures down to the last digits, so they are the same trading policy written three ways. - **s2-queue:** sets a $4 hold threshold for front orders, keeps the remainder at the rival's tick, and does not resize front orders under 10c. - **s2-bids:** changes kLf from 0.08 to 0.16. - **s3-asks:** keeps a same-price ask only if at least $20 of our FIFO-ahead quantity remains. Otherwise it quotes one tick inside the rival. - **s4-flow:** per-run flow estimate (9-point posterior, updated every 25 steps) that sets ask depth and the stock targets. ### Disagreements and caveats - **s2 speed:** the same s2 policy times differently. s2-flow measured 1.6% slower, which fails the no-slower rule; it calls the gap possibly noise. s2-stock (+ speedups) and s2-free (+ speedups, PyPy) measured faster. **Use s2-stock or s2-free, not s2-flow.** - **s2-queue:** fails the speed rule (1.06% slower) and its gain is under 2 SE. Its gain comes from retail and is offset by arb losses in late jump runs. - **s1:** the items disagree on what limits spread 1. - s1-asks says ask size at tick 1 is not the lever; queue priority is. - s1-queue's gain comes from tick-2 depth and holding priority. That agrees with the queue reading and does not contradict s1-asks. - s1-free (keeping oversized asks) also supports the queue-priority reading. - s1-free's "next" note warns that inventory-bid persistence lost edge and that combinations need their own validation. - **Selection bias:** s1-bids and s1-free each compared three fixed policies on the same unseen set and say their SE is not adjusted for that. s1-free's first chosen rule lost on unseen. - **Measured but not candidates:** - s2-clock: raising the quote-size ceiling to 9000 for H<1000 scored -0.294 (SE 0.503) on unseen, despite tuning gains. - s3-bids: bridge bid ×1.5 scored -0.0163 (SE 0.1135) on unseen. - s1-stock: none of its purchase controls passed validation. - s2-middle: its frozen candidate was below the base on unseen. ## 5. Stacked estimate Best per spread is s1-queue, s2-stock, s3-asks and s4-flow. Spreads are disjoint, so these gains add: (2.2637 + 0.6075 + 0.8625 + 1.1441) / 4 ≈ **+1.22 on the overall mean**. Applied to the leaderboard 106.80, that is roughly 108.0, still below 109.43 and 109.59. This is my arithmetic, not a measured figure. Combining several items within the same spread (for example s1-queue + s1-flow + s1-bids) has **not** been measured, and several items warn that gains within one spread may not add. ## 6. Findings worth keeping (from the items' "tried" fields) - **Spread 1:** - Quoting at tick 2 instead of tick 1 under 1c lost 20–33 (s1-free). - Moving Hu trades retail against arb about one-for-one. A +8 at Hu=600 on 114 seeds reversed on held-out seeds (s1-clock). - Bulk bids at tick 1 lose about -13.6 arb against +0.42 retail per run (s1-bids diagnostic). - Larger ask depth multipliers at ticks ≤5 (×4, ×10) lost heavily to arb (s1-queue). - **Spread 2:** - The flow estimate is about 25% high and reaches correlation 0.55 with the true flow only by step 1000 (s2-flow). - Removing low bids, the bridge or stock bids all lost (s2-bids). - Every one-constant clock change lost on discovery (s2-clock). - Stopping quotes late lost (s2-middle). - **Spread 3:** - Joining the rival at tick 4 scored -50.2. Lowering asks, multiplying size or setting covered floors all lost (s3-asks). - Bids look to be at a local optimum. Bid fills under 10c gain about 7 per run from retail and lose about 10 to arb (s3-bids). - **Remaining gaps:** spread 2 asks (s2-asks blocked), spread 3 stock (s3-stock blocked), and everything at spread 4 other than flow. - **Seed reuse:** most items say seeds 60000–67999 have now been used for selection. Use a fresh unseen range for later rounds. ## 7. Sources flagged as not holding on re-read The task flags one source each for s2-stock, s4-flow, s2-middle, s1-middle, s1-flow, s2-bids and s2-free, and three for s1-free. The item JSONs list no URLs separately, so I cannot tell which claims those sources backed. The numeric results above are the items' own local measurements and do not rest on web sources. Any claims in those items about the simulator's rules or the leaderboard should be treated as unverified. In particular, s1-free's method statements (commit, seed enumeration) rest on its 3 flagged sources. Those same statements are repeated by unflagged items (s1-queue, s1-stock, s3-asks).