{
  "sources": [
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/docs/orderbook_prediction_market_challenge.md",
      "quote": "- untouched resting competitor liquidity never recenters\n- partially filled competitor orders stay in place until fully filled\n- when a competitor order is fully filled, a replacement order appears at the\n  start of the next step on the opposite side offset by `spread_ticks`"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/market.py",
      "quote": "        if order.side is Side.SELL:\n            tick = order.price_ticks - spread\n            side = Side.BUY\n        else:\n            tick = order.price_ticks + spread\n            side = Side.SELL"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/market.py",
      "quote": "            if best_ask is None or best_ask.price >= probability - EPSILON:\n                break"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/market.py",
      "quote": "            if best_bid is None or best_bid.price <= probability + EPSILON:\n                break"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/engine.py",
      "quote": "                process.step()\n                probability = process.current_true_probability()"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/config.py",
      "quote": "    retail_mean_notional_min: float = 2.64\n    retail_mean_notional_max: float = 6.336\n    competitor_quote_notional_min: float = 24.0\n    competitor_quote_notional_max: float = 72.0\n    competitor_spread_ticks_min: int = 1\n    competitor_spread_ticks_max: int = 4"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/runner.py",
      "quote": "    for offset in range(count):\n        seed = seed_start + offset\n        config = sample_config(base, var, seed=seed)\n        engine = SimulationEngine(config, strategy_factory, seed=seed)\n        results.append(engine.run())"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/docs/orderbook_prediction_market_challenge.md",
      "quote": "The score is participant edge, not terminal PnL."
    },
    {
      "url": "https://api.imdnotdead.fun/artifacts/04e37cd4e1a420b91cd7a012f416e6ebf1002c5c56867981741a3a77c72b9c48",
      "quote": "bde43171c0191751c603d429d3c46ce55bae11086c2826bbb386c9e7ad58c470"
    }
  ]
}
