Since 2 October at 18:05 UTC, Project Iris sizes every new trade the same way. Each family of instruments has its own starting share of one daily risk allowance. Nothing is set aside for a family that is not trading, and a trade is only made smaller when there is genuinely less room left. This post walks through how that works.

The short version

Step 1: the allowance comes from your full capital

Everything starts from your usable capital: your full account balance minus what sits in the vault. Since 30 September at 23:37 UTC there has been no capital cap. Before then, sizing was capped at a capital figure fixed when the account was set up, and the dashboard showed it as a capital cap. That cap is gone from both the engine and the dashboard. Your capital is now simply split into the part that can be traded with and the part kept aside in the vault. A deposit counts towards sizing as soon as it arrives, just as a withdrawal reduces it.

Each trading day, your account's daily drawdown limit turns your usable capital into the day's allowance. The allowance is the most that the day's trades, taken together, are allowed to lose.

Step 2: each family has its own starting share

One shared daily allowance with arrows to three families, gold, indices and commodities, and FX, each with its own starting share, and the three sizing rules belowOne shared daily allowance with arrows to three families, gold, indices and commodities, and FX, each with its own starting share, and the three sizing rules below
One allowance, three starting shares, and nothing set aside.

The allowance is divided into three starting shares: one for gold, one for indices and commodities, and one for FX. These are the same proportions that the previous generation of our engine used. A family's share is how much a single new trade in that family may lose if price runs all the way to its stop. The engine sizes the lot so that, at the stop the order actually carries, the possible loss matches that share.

The shares are not reservations. The three families are rarely all trading at the same moment, so setting money aside for an idle family would only make every other trade smaller. Each share is a starting size, and every trade draws from the same single allowance.

Step 3: only live positions count

A trade uses up part of the allowance only for as long as it can still lose money. In practice:

Step 4: smaller only when less is left

For each new trade, the engine compares the family's starting share with what is left. If enough is left, the trade goes in at its full share, even when it is the second or third trade in that family today. If less is left, the trade is scaled down to exactly what is left. If nothing is left, it waits.

Two illustrated days without amounts. Gold trades take their full share until less is left, then one is scaled down and the next waits. On a mixed day, gold and an index trade take their full share and an FX trade is scaled down to what is left.Two illustrated days without amounts. Gold trades take their full share until less is left, then one is scaled down and the next waits. On a mixed day, gold and an index trade take their full share and an FX trade is scaled down to what is left.
An illustration. Bar lengths are not to scale.

Room comes back when a trade closes or locks in at break-even. Every trade is sized at its stop, so the day's trades together cannot lose more than the allowance, except through slippage or a price gap.

A few details that matter

The rule as a small program

The whole sizing rule fits in a few lines. This is a simplified sketch to show the logic, not the engine's source code.

def size_new_trade(family, stop_distance, day):
    """How much this trade may lose if price runs all the way to its stop."""
    # Only trades that can still lose draw on the allowance.
    at_risk = sum(t.loss_at_stop for t in day.open_trades if not t.locked_in)
    left = day.allowance - day.realised_losses - at_risk

    share = day.family_share[family]     # a starting size, not a reservation
    wanted = min(share, left)            # smaller only when less is left
    if wanted <= 0:
        return None                      # nothing left: the trade waits

    return wanted / (stop_distance * day.value_per_point)   # lots, sized on the real stop

locked_in is true once a trade's stop sits at break-even or better. Orders that have not filled and recovery legs that have not been placed are not in open_trades, so they draw nothing.

A worked example, in made-up units

The numbers below are invented to show the mechanics. They are not the real proportions and not an amount from any account. Say the day's allowance is 100 units, and gold's starting share is 40.

StepWhat happensLeft afterwards
1First gold trade takes its full share of 40.60
2Second gold trade takes another full 40.20
3Third gold trade wants 40 but only 20 is left, so it is sized to exactly 20.0
4A fourth trade finds nothing left and waits.0
5The first gold trade moves its stop to break-even and locks in. Its 40 comes back.40

At step 5 the waiting trade can go in, at the size the remaining room allows.

What you need to do

Nothing. The size of your allowance comes from your account's daily drawdown limit and your usable capital. If you move money into or out of the vault, sizing follows it the same day.


Notes

  1. Family-share sizing went live on 2 October 2026 at 18:05 UTC. The capital cap was removed on 30 September 2026 at 23:37 UTC. Locked-in trades stopped counting as exposure on 25 September 2026 at 04:15 UTC.
  2. The diagrams are illustrations. They show how the rule works, not amounts from any real account.
  3. Internal change references: #474 (family-share sizing), #483 (no capital cap), #433 (exposure counts only what can still lose), #471 (gold sized on the order's stop), #477 (FX sized on the placed ladder).