High-impact news, such as a central bank decision or the US jobs report, can move a market further in a minute than in a normal hour, and spreads widen just before the figure comes out. Since 2 October at 18:05 UTC, Project Iris prepares open trades for these moments gradually: the closer the release, the tighter their break-even and trailing distances. This post explains how that tightening builds, what happens when several events line up, and what Iris deliberately does not do.

Which news counts

Iris uses the same economic calendar that its entry rules already read, and only events marked high impact count. Each event belongs to a currency. An open trade is affected when its instrument carries that currency. For example, US news affects US indices, gold priced in dollars, and dollar pairs.

How the tightening builds

Curve without values: distances are normal well before a release, tighten gradually as it approaches, are at their tightest in the final minutes and around the release, then return to normal shortly after; bars compare one release, two at once, several at once with a floor, a market open, and news next to a market openCurve without values: distances are normal well before a release, tighten gradually as it approaches, are at their tightest in the final minutes and around the release, then return to normal shortly after; bars compare one release, two at once, several at once with a floor, a market open, and news next to a market open
The closer the release, the closer the stops. Not to scale.

A shorter distance means break-even arms sooner and the trail stays closer to price, so a trade that is already in profit keeps more of that profit if the release goes against it.

The first version of this protection went live on 30 September at 23:37 UTC. It was a single fixed step. The gradual version replaced it so that a trade is not jolted from normal to tight in one moment.

When several things line up

Sometimes two high-impact releases come out at the same time, or a release falls close to a market open. In that case the effects combine:

Market opens only tighten distances. Unlike news releases, they do not stop recovery legs from being added.

A walk through one release

As an illustration, take a US jobs report and an open gold trade priced in dollars.

What never changes

What we decided against

We also looked at freezing every stop in the last minutes before a release, because spreads widen sharply then. We decided against it: stops keep moving through releases. What protects a trade from those wide spreads is the rule described in How a stop moves on a winning trade: a brief spread spike is ignored.

Since 4 October: smaller entries before news

Since 4 October at 13:51 UTC, a gentler version of the same tightening also applies to new entries: the closer a high-impact release for one of the instrument's currencies, the somewhat smaller a new trade. It only ever makes a trade smaller. The pause on new trades in the final minutes before a release is a separate rule and stays as it was.

The tightening as a small program

The idea behind "gradual, and more when several things line up" is short enough to read as code. This sketch is an illustration of the shape. The real ramp, its length and its floor are not published, and it is not the engine's source code.

def event_strength(minutes_to_release, ramp_minutes):
    """0.0 = normal distances, 1.0 = tightest. Rises a little every minute."""
    if minutes_to_release > ramp_minutes:
        return 0.0
    return 1.0 - max(0.0, minutes_to_release) / ramp_minutes

def distance(normal, floor, strengths):
    """strengths: one value per high-impact release, lighter ones for market opens."""
    total = min(1.0, sum(strengths))               # several at once tighten more...
    return max(floor, normal * (1.0 - total))      # ...down to a floor, never past it

def tightened_stop(trade, price, new_distance, costs):
    if trade.profit <= costs:
        return trade.stop                          # under water: the stop is not touched
    candidate = price - new_distance if trade.side == "buy" else price + new_distance
    return next_stop(trade, candidate)             # only ever in the trade's favour

The last function carries the rule from "What never changes": a trade that is under water keeps its stop, and a stop only moves in the trade's favour. next_stop is the same ratchet shown in How a stop moves on a winning trade.

What you need to do

Nothing. The calendar, the tightening and the market opens are all handled by the engine.


Notes

  1. The gradual tightening went live on 2 October 2026 at 18:05 UTC. The single-step version it replaced went live on 30 September 2026 at 23:37 UTC.
  2. The walk-through is an illustration, not a record of a particular trade.
  3. Internal change references: #484 (caution before high-impact news), #490 (gradual, stacked, open-aware tightening), #489 (brief spread spikes), #492 (entry sizing before news, live 4 October 2026 at 13:51 UTC).