OUTCRY
4 of 4 runs leftEnter arcade

← Guide BookPlay it

Finance Lab · Basket Arbitrage

Basket Arbitrage Strategy Guide

Twenty basket-pricing puzzles on one 8-minute clock. Find the mispriced basket, replicate it from the component cards and execute with every commodity netted to zero.

Basket Arbitrage in play on Outcry
Basket Arbitrage, in play.

What is arbitrage (the law of one price)?

The law of one price says that two positions with identical future cash flows must trade at the same price. If they do not, there is a riskless profit sitting in the gap: buy the cheap version, sell the expensive one, collect the difference, and owe nothing to chance because the two legs cancel each other out no matter what happens afterward. That riskless profit, and the trade that captures it, is what 'arbitrage' means in finance.

Arbitrage is also what keeps related prices tied together in the first place. The moment a gap opens between the price of an asset and the price of something that replicates it exactly, traders who spot it buy the cheap side and sell the expensive side, and that buying and selling pressure pushes the two prices back toward each other. In this narrow sense, markets are efficient because any mispricing invites the trade that erases it.

The same idea shows up under many names depending on what is being replicated: an ETF's price against the value of the stocks it holds, an index future against its underlying basket, a currency's price against a round trip through two other currencies (triangular arbitrage), or a call option's price against a put, the stock, and a bond (put-call parity). In every case the method is the same - work out the cost of assembling the same exposure from other tradeable pieces, and compare that replication cost to the price of the thing itself.

In practice, a true arbitrage has to be built at the prices you can trade at, and every underlying exposure has to net to zero; a position with residual exposure is a bet on the leftover. Transaction costs and the bid-ask spread are why most apparent mispricings disappear once you price both sides at the bid and the ask.

Because arbitrage-free pricing is the assumption underneath most of modern finance - it is how options, futures, and structured products get priced relative to simpler instruments - recognizing replication opportunities and pricing them correctly at tradeable prices is a foundational skill for anyone trading or building models across related instruments.

How it works

Each round shows a set of cards. Every card is a tradeable basket of commodities (gold, silver, platinum, copper, oil) with its composition listed, a bid (what you receive to sell one) and an ask (what you pay to buy one). You set a quantity from -3 to +3 on each card - positive means buy at the ask, negative means sell at the bid. The screen shows your live net inventory per commodity and your live cash PnL as you build the position.

A round only counts when you press execute with every commodity's net inventory at exactly zero AND the position cash-positive. Unhedged inventory is rejected as directional risk, and a balanced position that crossed the spread at a loss is rejected too. The structure is always the same trade: some basket card is quoted rich relative to the cost of replicating its composition from the component cards, so you buy the pieces at their asks and sell the basket at its bid (or the reverse when the basket is cheap).

A session is 20 rounds: 4 hand-curated levels, then 16 procedurally generated ones climbing from 2 commodities in play up to 8. The generator builds each basket as an integer combination of the component cards, so a zero-inventory, positive-PnL hedge always exists within the position cap. There is one shared clock for the whole set - 8 minutes across 20 rounds, running even while you read a round's result screen. When it expires, the session ends and unexecuted work counts for nothing.

How scoring works

A successful execution on round k (1-indexed) scores round(PnL in dollars times 10 times k) - the same dollar of locked-in PnL is worth 10 points on round 1 and 200 points on round 20. Failed executions score nothing, and rounds ended by the clock score nothing.

Your session total is summed across rounds, and your best session score is stored locally as a personal best.

Price by replication, at the prices you trade

The core idea is the law of one price: two positions with identical composition must cost the same, or the difference is free money. To check whether a basket is rich, compute its replication cost - the sum, over component cards, of the quantity needed times the price you would actually pay. Buying components means paying asks; selling the basket means receiving its bid. The arbitrage exists only if basket bid minus component-ask cost is positive.

That asymmetry is the whole discipline. Mid prices are a fiction you never trade at; every leg crosses a spread, and the spread is exactly what makes most near-misses unprofitable. Beginners compute edge at mids, find phantom arbitrage, and then execute into a negative PnL - which this game explicitly rejects with 'you crossed the spread at a loss'.

Work composition first, prices second. Write down (or mentally tally) what combination of components reproduces the basket exactly - the curated levels teach the patterns: units versus multi-packs, a basket equal to two pairs minus a shared single, a bundle equal to a pack plus a barrel. Once the composition matches, the PnL check is a single subtraction.

Net to zero, then scale the hedge

Zero net inventory per commodity is what converts a price gap into an arbitrage instead of a bet. If you sell a rich basket without buying the pieces, you are short its commodities and exposed to their prices - the game correctly refuses to score it. The mental model is a vector equation: your action quantities times each card's composition vector must sum to the zero vector, while the cash leg sums positive.

Once you have one valid unit of the trade, consider scaling it. Doubling every leg doubles the locked-in PnL at the same zero risk, up to the per-card cap of 3 - level 3's explanation notes exactly this. Since points are PnL times 10 times the round number, sizing up a clean hedge is the cheapest score multiplier in the game. Check the binding constraint: the leg that needs the largest quantity (often the basket at -1 versus components at +2 or +3) determines how many units fit under the cap.

On the bigger procedural boards, exploit how the puzzles are built: the basket card is an integer combination of the components with small coefficients (1 to 3), and the intended trade is sell 1 basket, buy the components in those coefficients. Find the card whose composition spans several commodities - that is the basket - then match each of its commodities against the component cards one commodity at a time.

Pace the shared clock like an assessment battery

The 8-minute budget across 20 rounds averages 24 seconds per puzzle, but the value is heavily back-loaded: the round multiplier means round 20 pays 20 times more per dollar than round 1. Speed through the early curated levels - they are fixed, learnable patterns worth few points - to bank time for the later high-multiplier boards where an extra dollar of PnL is worth 150 to 200 points.

The clock runs while the result screen is showing, so tapping through reviews quickly is worth real points. Budget consciously: if the first 8 rounds take under 2.5 minutes you are on pace; if a mid-game board has you stuck past 40 seconds, take the smallest hedge you can see rather than hunting the maximal one - a scored dollar beats an unscored three.

Late boards with 7 or 8 commodities reward a scan order: start from the basket card, list its commodities, and for each one find which component supplies it. Because components touch only 1 or 2 commodities each, this is a fast matching exercise.

A worked example

  1. Level 3, the Tri-Commodity Index ETF. The cards' compositions and prices (bid / ask):

    Alpha=Gold+Silver,60/63Beta=Silver+Platinum,95/99Silver=Silver,12/14ETF=Gold+Silver+Platinum,152/156\begin{aligned} \text{Alpha} &= \text{Gold}+\text{Silver}, & 60/63 \\ \text{Beta} &= \text{Silver}+\text{Platinum}, & 95/99 \\ \text{Silver} &= \text{Silver}, & 12/14 \\ \text{ETF} &= \text{Gold}+\text{Silver}+\text{Platinum}, & 152/156 \end{aligned}
  2. Adding Alpha and Beta gives one Silver too many compared to the ETF:

    Alpha+Beta=Gold+2 Silver+Platinum\text{Alpha}+\text{Beta} = \text{Gold}+2\,\text{Silver}+\text{Platinum}
  3. Subtracting one Silver leaves exactly the ETF's composition, so the replicating trade is buy 1 Alpha, buy 1 Beta, sell 1 Silver, sell 1 ETF:

    Alpha+Beta−Silver=Gold+Silver+Platinum=ETF\text{Alpha}+\text{Beta}-\text{Silver} = \text{Gold}+\text{Silver}+\text{Platinum} = \text{ETF}
  4. Trade at the tradeable prices - buy the components at their asks, sell the offsetting Silver and the basket at their bids:

    Buy 1 Alpha @63,Buy 1 Beta @99,Sell 1 Silver @12,Sell 1 ETF @152\text{Buy 1 Alpha @63}, \quad \text{Buy 1 Beta @99}, \quad \text{Sell 1 Silver @12}, \quad \text{Sell 1 ETF @152}
  5. Inventory check - each commodity nets to zero:

    Gold:1−1=0Silver:1+1−1−1=0Platinum:1−1=0\text{Gold}: 1-1=0 \qquad \text{Silver}: 1+1-1-1=0 \qquad \text{Platinum}: 1-1=0
  6. Cash check - the position is balanced and cash-positive, so it executes:

    PnL=−63−99+12+152=+$2.00\text{PnL} = -63-99+12+152 = +\$2.00
  7. At round k = 3, the score multiplies dollar PnL by 10k:

    score=round(2×10×3)=60\text{score} = \text{round}(2 \times 10 \times 3) = 60
  8. Every leg fits twice under the +/-3 position cap, so scaling the same hedge locks in double the PnL at the same zero risk:

    2×(Alpha, Beta,−Silver,−ETF) ⇒ PnL=$4.002\times(\text{Alpha, Beta}, -\text{Silver}, -\text{ETF}) \ \Rightarrow\ \text{PnL} = \$4.00

Common mistakes

• Computing edge at mid prices. You buy at asks and sell at bids; an opportunity that only exists at mids will execute at a loss and score nothing.

• Executing with a small residual inventory 'because the PnL is good'. The game rejects any nonzero net exposure, and the round scores zero.

• Taking one unit when the hedge scales. PnL times 10 times round number means an unscaled hedge on a late round can leave hundreds of points on the table.

• Lingering on result screens. The single session clock keeps running between rounds; review time is paid for in end-of-session rounds you never reach.

• Solving prices before composition. Match the commodity vectors first; the PnL check is then a single subtraction.

Why interviews test this

This is a direct training ground for trading-firm assessment batteries (the Optiver-style '80 in 8' format the session clock deliberately mirrors) and for interview questions on the law of one price: ETF create/redeem arbitrage, index versus basket pricing, and triangular consistency between related instruments all reduce to 'replicate the package, compare at tradeable prices, keep zero net exposure'.

Interviewers also probe the execution details this game enforces: which side of the spread each leg crosses, what residual inventory does to a 'riskless' trade, and how position limits cap the size of an edge. Being fast and exact on small integer replication arithmetic under a clock is the skill being screened.

Play Basket Arbitrage on Outcry

Basket Arbitrage is free to play on Outcry, in the Finance Lab section, and every run is timed and scored. Read the guide once, then play Basket Arbitrage and check your score against the strategy above. The guide book has a written guide for every other game, and the practice hub and mock assessments put the same skills under a real screen's clock.