HODL

The trading history of all teams is available.

HODL

HODL is trader slang for holding an asset instead of selling it, no matter how violently the price swings. It was born from a typo: on 18 December 2013, while Bitcoin's price was crashing, a user on the bitcointalk.org forum posted a rant titled "I AM HODLING" — a misspelling of "holding." The post became legendary and the term stuck. Today it is usually backronymed as "Hold On for Dear Life."

That is the tension of this contest. Prices move, nerves fray, and the teams who know when to buy, when to sell, and when to simply HODL come out ahead.

Problem

You were just hired as junior Quant Researcher at the famous hedge fund RoureBlanc. Now, you have to make as much money as possible by trading integer-priced stocks over the 24-hour contest period.

Web Client

The game is played in the hosted web client hodl.midnightcodecup.org. To connect you have to provide your API token.

The client sends that token as:

Authorization: Bearer <your-api-token>

Trading

Trading is open only while the contest is running.

You may buy or sell a positive integer number of units of any stock. There is no cash budget — the only limit on what you can hold is the per-stock cap below.

For each stock:

  • You may not sell more units than you currently hold.
  • You may hold at most 100 units.
  • A buy records negative realized money equal to price * units.
  • A sell records positive realized money equal to price * units.

The price used for a trade is the current stock price at the time the order reaches the game server. Each stock's price is its most recently posted value and holds until the next change.

Rate Limits

Requests are limited to 10 per second per team, shared across all endpoints (reads and writes together). A request over the limit returns HTTP 429 with a Retry-After header giving the number of seconds to wait before retrying.

The hosted web client refreshes while it is open, so an open tab makes a few requests every couple of seconds that count toward this limit. If you also call the API yourself with the same token, both draw from the same per-team budget.

Scoring

Each stock is scored independently.

For a team and a stock, let profit be the sum of realized money over all trades in that stock, plus the value of currently held units at the current stock price. Negative profit scores as zero.

For each stock, the team with the largest positive profit receives 48 points. Every other team receives points proportionally:

48max(0,your_profit)max(0,best_profit)48 \cdot \frac{\max(0, \texttt{your\_profit})}{\max(0, \texttt{best\_profit})}

If no team has positive profit on a stock, all teams receive zero points for that stock.

Sponsored by AlberBlanc

Sponsored by AlberBlanc