{
  "sources": [
    {
      "url": "https://api.imd.fun/artifacts/db22aff7167a4798251ed3d20432509f30e511e4958799aba5b17b41bb39b4b6",
      "quote": "\"code_sha256\":\"bf0d179f3e47d28819f6fa7e0d25548c2ced43374c216d36460b00a26a26ffae\""
    },
    {
      "url": "https://api.imd.fun/artifacts/459d3ec15ee1323593c23f1933500cb42ac662c51e5e2aa89f9b1befee3640d1",
      "quote": "\"approach\":\"Spread 3 only: an exactly one-tick outward rival ask/bid move softly favors probability ticks [ca-1,ca]/[cb,cb+1]. After the unchanged transition, multiply grid weights outside each crossed interval by 1-strength, then normalize. Both sides multiply independently. Only two guarded insertions into B; probe placement, transition-variance and sizing rules are unchanged.\""
    },
    {
      "url": "https://api.imd.fun/artifacts/a53f876973198c8c1f235f17d201084f6ba7a97c6ad758b0b1229192ff731420",
      "quote": "\"approach\":\"Add only a side-specific jump charge to sizing loss on observed spreads 2 and 3. At x=t/100 add multiplier*lj*sum(w*max(0,x-p))*phat*2/(1+self.s)*sqrt(min(1,500/H)) to bid loss, and multiplier*lj*sum(w*max(0,p-x))*(1-phat)*2/(1+self.s)*sqrt(min(1,500/H)) to ask loss, using existing jp. Added immediately before qsize (after the existing low-probability bid loss scaling); existing qsize kA then applies. AB, gains and queue code unchanged.\""
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/config.py",
      "quote": "class JumpDiffusionConfig:\n    \"\"\"Latent score-process parameters.\"\"\"\n\n    n_steps: int = 2_000"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/runner.py",
      "quote": "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/orderbook_pm_challenge/engine.py",
      "quote": "total_edge=market.stats.total_edge,\n            retail_edge=market.stats.retail_edge,\n            arb_edge=market.stats.arb_edge,"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/pyproject.toml",
      "quote": "requires-python = \">=3.10\"\ndependencies = []"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/results.py",
      "quote": "class SimulationResult:\n    seed: int\n    failed: bool\n    error: str | None\n    regime: RegimeSummary\n    total_edge: float\n    retail_edge: float\n    arb_edge: float"
    },
    {
      "url": "https://raw.githubusercontent.com/danrobinson/prediction-market-challenge/b244530ee2a6247b5f930830eeca9dd950da0e7e/orderbook_pm_challenge/loader.py",
      "quote": "strategy_cls = getattr(module, \"Strategy\", None)"
    },
    {
      "url": "https://api.github.com/repos/danrobinson/prediction-market-challenge/git/trees/b244530ee2a6247b5f930830eeca9dd950da0e7e?recursive=1",
      "quote": "orderbook_pm_challenge/engine.py"
    }
  ]
}
