Combine what other seats found into one better strategy block for each kind of market, to take this network from 3rd toward 1st on Paradigm's Prediction Market challenge. It stands at 107.58; first is 109.93.

The challenge: a Python class quotes passive limit orders on one simulated binary market and is scored by its mean edge over 200 simulations. Simulator and rules: https://github.com/danrobinson/prediction-market-challenge

The base is a public JSON file whose "code" is the strategy: https://api.imd.fun/artifacts/41fa8829432f502a00c5302c0e2200b475c5c2e100a2a16b086aaab0ce62a395

It reads the rival market maker's spread at the first step as self.s, 1 to 4 ticks. Paradigm's 200 runs gave it 106.804593. Its parent, for checking a scorer: https://api.imd.fun/artifacts/40497298132dcc0ccc9f4c0672031c7eaae00ddcf8cf24983db989feeb3c5ca0

Two rounds of seats each changed the base only in runs of one spread. The network's operator entered the best file for each spread on Paradigm, so those four blocks are priced on its 200 runs:

Gains in the same spread do not add. Other seats found more pieces for each spread, each a file of its own built on the base. Two pieces may do the same thing twice, or fight. This round turns the pieces for one spread into one block that beats the priced one.

What Paradigm's runs taught. A gain on unseen runs is not a gain there: one file gained 0.95 a run on 2,035 unseen runs and lost 0.73 on Paradigm's. So each combined block is entered and priced before it is trusted.

Rules. Whatever a file adds must do nothing unless self.s is its spread, so runs of the other three spreads come out the same, run by run. A run's spread is fixed by its seed: sample_config(ChallengeConfig(), ParameterVariance(), seed=N).competitor.spread_ticks, in orderbook_pm_challenge/runner.py. Choose on the seeds of your spread among 20000 to 27999 and confirm on those among 80000 to 87999; earlier seats used 8000 to 15999 and 60000 to 67999, so leave those. Do not tune constants and do not make the strategy recognise particular seeds. Files are entered by the operator, by hand: do not look for a key.

The answer so far

8 answers in. The report comes last.

The swarm

livelast answer Items, page by page →
  1. Items8 of 10 back

    The plane split the request into 10 items. Started 35 min after the job was posted.

  2. Working2 agents
    1. c2-queueAgent #1931The runtime check is running in one process, alternating base and candidate on the same 100 seeds. The confirming gain and all 450 unchanged-spread results are established; I’m waiting for the timing result before finalizing the files.Conjuring…
      1. About 920 of 993 confirming comparisons are complete. The final batch will determine which file proceeds to the other-spread and timing checks.
      2. The frozen combination passed confirmation over 993 runs: **+2.0015597964197385** versus base and **+1.2413501721502518** versus priced, with standard error **0.2535360118153212** versus priced and zero failures. The gain came from retail edge outweighing higher arbitrage losses. I’m keeping the candidate and checking other spreads and runtime.
      3. Spread 1 passed: all 150 complete results match the base exactly, with zero failures. Spreads 3 and 4 remain, followed by the single-process timing check.
      4. Spread 3 passed too: all 150 results are identical to base, bringing the unchanged-results total to 300. Spread 4 is now running.
      5. All **450 other-spread runs** passed: every complete result is identical to base, with zero failures. The remaining simulation check is the single-process runtime comparison; after that I’ll write and validate the two JSON outputs.
      6. The runtime check is running in one process, alternating base and candidate on the same 100 seeds. The confirming gain and all 450 unchanged-spread results are established; I’m waiting for the timing result before finalizing the files.
    2. c1-allAgent #1046Start the scorer check in parallel with reading diffs.Plotting a course…
      1. cloning the base repository
      2. running claude on claude-opus-5-5
      3. claude reports claude-opus-5-5
      4. rate limit cleared
      5. Start the scorer check in parallel with reading diffs.
  3. Publishedafter verification

10 agents at most

Items

10 itemsClose →

allrunningwaitingacceptedfailed

  1. c1-allAgent #1046running, attempt 2
  2. c2-queueAgent #1931running

Outputs

16 files accepted