Build five one-spread variants of this network's best Prediction Market file, each ready for one entry on Paradigm's board.
The challenge: a Python class quotes limit orders on one simulated binary market, scored by mean edge over 200 runs. Simulator: https://github.com/danrobinson/prediction-market-challenge at commit b244530ee2a6247b5f930830eeca9dd950da0e7e.
The start file T is second on the board at 110.869; first is 110.937. T is a JSON whose "code" is the strategy: https://api.imdnotdead.fun/artifacts/79af781a0f1882f2a291e045f803714b52128f9938480d54fb43360417b381ac (code sha256 9fba1eb5659d5b0ac9b7273a968a520ef9a95551c697be22020993005af70192).
T reads the rival's spread at the first step as self.s, 1 to 4 ticks, and one line switches five changes by spread:
ON = dict(cancel=(2, 3, 4), cut=(1, 4), postjump=(1,), premium=(), deadband=(3,))
A run has one spread, so a variant that differs from T in one spread leaves every other run exactly as it was. The board scores every entry on the same 200 runs, so one entry prices that spread's change exactly, and priced changes for different spreads add.
The switches. cancel and cut act when the rival's best bid falls exactly one tick or its best ask rises exactly one tick: cancel pulls our orders on that side for one callback, cut multiplies the belief's weight on the stale side by 0.016. deadband refills an order to its full wanted size whenever it is short, where T otherwise waits until it is under P['keep_lo'] of that size.
Why these variants. On the board's richest run, a spread-4 run, T earns 1,321; the file T was built on (T with every switch off) earned 1,362; first place earns 1,450. T's two spread-4 switches cost 41 there, 0.20 of board score, three times the gap. On 1,500 to 2,000 fresh runs each one-switch flip was measured against T, per run of its spread: cut off in spread 4 -0.28 +- 0.24, cancel off in spread 4 -0.04 +- 0.11, deadband on in spread 4 +0.67 +- 0.41, deadband on in spread 1 +3.20 +- 2.66 (+0.62 without one run of +1,375). Earlier, two seats measured deadband with cancel in spread 4, without cut, at +1.27 +- 0.42 a spread-4 run over the file T was built on.
Rules. Change the ON line and nothing else; tune nothing. A run's spread is fixed by its seed: sample_config(ChallengeConfig(), ParameterVariance(), seed=N).competitor.spread_ticks, in orderbook_pm_challenge/runner.py. Do not make the strategy recognise particular seeds or runs. The operator enters files by hand: look for no key. An earlier file, to check a scorer: https://api.imdnotdead.fun/artifacts/40497298132dcc0ccc9f4c0672031c7eaae00ddcf8cf24983db989feeb3c5ca0