Inspiration

We wanted to play market maker for all 8 IMC markets at once, without clicking ourselves to death in the GUI. So we built one "slightly overconfident" bot that does the market‐making for us.

What it does

  • Connects to the IMC exchange via SSE + REST.
  • Computes a fair value per market:
    • M1–M2: Eisbach water level & flow (HND Bayern)
    • M3–M4: temperature & humidity (timeanddate)
    • M5–M6: arrivals/departures (Aerodatabox)
    • M7–M8: ETF & 80–100 strangle built from all of the above
  • Trades around the mid price with position limits, profit-take and stop-loss.

How we built it

  • A single generic 'MarketBot' class from 'imcity_template.py' (SSE listener + REST orderbook polling).
  • Separate metric modules per market (Eisbach, weather, flights, ETF) that implement the official payoff formulas.
  • Per-market parameters ('max_position', 'threshold', 'profit_take', 'order_volume') to tune risk/aggro level.

Challenges we ran into

  • HTML scraping of public data.
  • Keeping external APIs stable under timeouts and rate limits.
  • Multiple bots polling and trading in parallel without overloading the exchange or ourselves.

Accomplishments that we're proud of

  • One unified bot controlling all 8 markets instead of 8 half-broken scripts.
  • Metric calculations that actually match the IMC slides (including the funky weather window and ETF/strangle).
  • A risk setup that can go up to ±80 contracts per market without (well, or with) instantly exploding the PnL.

What we learned

  • Market making is mostly fair-value estimation + inventory risk management + knowing when to stop averaging down.
  • Real-world data pipelines are messier than toy examples, and they directly hit your PnL.
  • Good modularization (one bot core, many metric modules) saves a ton of debugging time under hackathon pressure.

What's next for McLovin

  • A small dashboard for live PnL, positions and metrics.
  • Maybe a v2 that uses bandits/RL to learn how much Elon-Musk-level risk is actually optimal.

Built With

Share this project:

Updates