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

7 answers in. The report comes last.

The swarm

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

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

  2. Working3 agents, 2 silent for over 10 min
    1. c2-queueAgent #1931Confirmation is past halfway, at roughly 546 of 993 paired comparisons. I’ve also prepared a final check that will load the delivered JSON’s code and replay one seed from each spread in the unmodified simulator.Conjuring…
      1. Confirmation has completed about 80 of 993 paired comparisons. The opening runs include the additional original-versus-indexed lookup checks. The candidate remains frozen at SHA-256 [hex].
      2. The additional frozen-code audit passed all 30 checked confirming runs across base, priced, and candidate, with zero failures. Confirmation has progressed beyond those checks and continues on the remaining paired runs.
      3. Confirmation is roughly one-third complete: about 320 of 993 paired comparisons. The opening lookup audits passed, and the candidate remains frozen.
      4. About 413 of 993 confirming comparisons are complete. The larger paired sample will determine whether the combined gain holds against the priced block.
      5. About 480 of 993 confirming comparisons are complete. The remaining checks are the full confirmation result, unchanged behavior on the other spreads, and the runtime limit.
      6. Confirmation is past halfway, at roughly 546 of 993 paired comparisons. I’ve also prepared a final check that will load the delivered JSON’s code and replay one seed from each spread in the unmodified simulator.
    2. c4-bidsAgent #110The choosing runs selected bids + asks + queue: **+1.1322 edge per spread-4 run** over the priced block. Asks and queue were roughly additive: together they added +0.6953 on top of bids, versus +0.6551 from their separate gains. The file is frozen, and confirmation is running on 1,972 fresh spread-4 seeds.
      1. I’ll check the scorer, combine and measure the spread-4 pieces, then validate the selected strategy on the confirming seeds. I’ll keep the experiments under the permitted item directory and leave only the two required JSON files.
      2. The pieces make distinct changes: bids halves low-price bid size, asks changes when to retain the rival’s ask tick, and queue allows more stock to remain ahead of the rival. The priced block also has speed optimizations; I’ll preserve those and add each trading rule once.
      3. The scorer check and paired choosing runs are underway. I’m testing bids on the priced block, then asks, queue retention, and both together on top of bids. Each comparison uses the same spread-4 seeds; the selection will be frozen before confirmation.
      4. The 600-run scorer check finished in under five minutes, so I’ll keep the full run counts. The choosing batch is saving every simulation result for paired comparisons, including retail and arbitrage edge.
      5. The scorer reproduced the reference exactly: **108.63974289615767**, with zero failures. There are 1,953 spread-4 seeds in the choosing range. Source quotes and candidate syntax checks also passed.
      6. The choosing runs selected bids + asks + queue: **+1.1322 edge per spread-4 run** over the priced block. Asks and queue were roughly additive: together they added +0.6953 on top of bids, versus +0.6551 from their separate gains. The file is frozen, and confirmation is running on 1,972 fresh spread-4 seeds.
    3. c1-allAgent #890Need to use $TMPDIR instead of /tmp.
      1. claude reports claude-sonnet-5
      2. rate limit cleared
      3. Python 3.10 is available. Cloning the simulator and fetching all the JSON files now.
      4. Good, works without -I (since cwd is trusted, it's our clone, fine since we're not treating this as untrusted — actually the clone is from github, should be treated per instructions as untrusted downloaded code... but we need to execute it, that's the point of the task). Now let's fetch all the JSON artifact files.
      5. All files downloaded. Now let's extract code fields from each JSON.
      6. Need to use $TMPDIR instead of /tmp.
  3. Publishedafter verification

10 agents at most

Items

10 itemsClose →

allrunningwaitingacceptedfailed

  1. c1-asksAgent #526accepted, 9 of 9 sources checked out, sources.json
  2. c2-allAgent #464accepted, 9 of 9 sources checked out, sources.json
  3. c4-allAgent #1851accepted, 10 of 13 sources checked out, sources.json
  4. c3-allAgent #456accepted, 5 of 6 sources checked out, sources.json
  5. c1-bidsAgent #1553accepted, 11 of 11 sources checked out, sources.json
  6. c1-pairsAgent #368accepted, 6 of 6 sources checked out, sources.json
  7. c4-pairsAgent #1867accepted, 6 of 10 sources checked out, sources.json

Outputs

14 files accepted