When an automated strategy scales up, the biggest hazard is rarely one bad trade. It is correlation you did not see. As Project Amber grew from a few symbols to a multi-market portfolio, hidden concentration became the thing to measure. This is what that taught us, and why later engines treat it differently.

Three positions looked at per pair, then per currency: the same three trades are a net short of the US dollar three timesThree positions looked at per pair, then per currency: the same three trades are a net short of the US dollar three times
Figure 2: The same three trades, looked at per pair and per currency. Illustrative lot sizes.

Why five pairs are not five times less risk

It is a common assumption in retail algorithmic trading that trading five currency pairs divides risk by five. Often it does not. In volatile sessions, such as a central bank press conference or the US jobs report, correlations between dollar pairs tend to move toward +1 or −1, and several positions start behaving like one.

Take three open positions: long EURUSD, long GBPUSD and short USDJPY. They look like three different trades. Each one is a bet that the US dollar weakens, so together they behave like one larger position on a single outcome. If the dollar rallies, all three lose at once.

Seeing it: net exposure per currency

The simplest way to see hidden concentration is to add up exposure per currency instead of per pair. A long position in a pair is long its first currency and short its second. The sketch below is an illustration of the idea, with made-up lot sizes. It is not Amber's source code.

from collections import defaultdict

# (pair, side, lots): side is +1 for long, -1 for short
positions = [("EURUSD", +1, 1.0), ("GBPUSD", +1, 1.0), ("USDJPY", -1, 1.0)]

net = defaultdict(float)
for pair, side, lots in positions:
    base, quote = pair[:3], pair[3:]
    net[base] += side * lots     # long the pair = long the base currency
    net[quote] -= side * lots    # ...and short the quote currency

print(dict(net))
# USD: -3.0  (short the dollar three times over)
# EUR: +1.0, GBP: +1.0, JPY: +1.0

Three separate-looking trades turn out to be a net short of three units of USD. A per-pair limit would never notice. A per-currency limit does.

What Amber did about it

Amber carried a cross-symbol correlation guard that could be switched on or off, a limit on drawdown across the whole account, and padding around scheduled news releases. We are not publishing the thresholds it used. An earlier version of this post printed specific levels that we cannot stand behind, and they have been removed.

What carried over into Project Iris

The lesson that exposure should be measured on what can still lose, and across the whole account rather than trade by trade, carried into later engines. Today those limits are ones you choose and can see: a drawdown budget, a daily growth cap, and the vault, which moves realised profit out of the traded balance. Learn has a page on each. They limit risk; they do not remove it. Trading carries a risk of loss, and none of these controls can prevent a loss from gaps, slippage or fast markets.