Investment restriction

Benchmark-relative limits (active weight)

A benchmark-relative limit bounds the active weight of each group: the portfolio's weight minus the benchmark's weight. A policy might allow ‘no active weight beyond plus or minus 5% of the benchmark’ for each asset class or country. Acclimetry subtracts the benchmark weights supplied with the rule from the portfolio's weights and tests each listed group against its band.

Rule template
benchmark_relative
Benchmark-relative limit
Measured in
% of portfolio value
Worked examples, run by the engine
3

How policies word it

Benchmark-relative clauses let a manager deviate from a reference portfolio within set limits. The reference may be a market index or the owner's own policy benchmark, such as 60% equities and 40% bonds.

  • By asset class: equities within plus or minus 5 percentage points of the policy benchmark.
  • By country or region: no country more than 3 points over or under its index weight.
  • By issuer: no issuer more than 2 points above its index weight.

Sector is not one of the grouping attributes. A sector-relative clause can be tested only where sectors are held in one of the listed attributes.

  • No asset class may deviate by more than 5 percentage points from its policy benchmark weight.
  • Country weights must stay within plus or minus 3% of the index weight.
  • Active weight in any single issuer may not exceed +2% of the benchmark.
  • The equity allocation may range from 5 points below to 10 points above its 50% benchmark weight.

How it is measured

Active weight is the portfolio's weight in a group minus the benchmark's weight, both in percent of NAV. The result is in percentage points: 55% against a 50% benchmark weight is +5.

The rule version holds the benchmark's name, its as-of date and a weight per group, each with its own active bounds. Only listed groups are measured; a listed group the portfolio does not hold reads as a full underweight.

Each group returns its own result, with the active weight, headroom and the holdings that contribute most.

When it is breached and what follows

An active weight above the hard maximum or below the hard minimum is a breach, so overweights and underweights both count. Market moves create passive breaches: the portfolio drifts while the supplied weights stay as recorded.

Breaches join a case with assignment, escalation and service-level clocks. When the index weights move, a new rule version records the new weights, with maker-checker approval.

Proposed rebalancing trades can be checked against the same bands in Trade Impact before execution.

Data the check reads

Rule parameters

Active weight (portfolio minus benchmark) per group must stay inside the approved band, using supplied benchmark weights.

ParameterIn the platformOptions and help
attributeGrouping attributeclass, subClass, type, subType, strategy, currency, country, countryCode, region, continent, issuerCountry, issuer, issuerGroup, counterparty, counterpartyGroup
benchmarkNameBenchmark name
benchmarkAsOfBenchmark as-of date
weightsBenchmark weights
exemptClassNamesExempt classes

Methodology choices

Parameter names, methodology text and result-code meanings are shown exactly as the platform states them.

Worked examples, run by the engine

Stocks at 550 of a 1,000 book against a 50% benchmark weight is +5 active, inside a ±10 band

Rule template: benchmark_relative

attribute: class
benchmarkName: Vector composite index
benchmarkAsOf: 2026-06-30
weights: group=Stocks, weight=50, hardMin=-10, hardMax=10

Holdings
HoldingClassMarket value
EQStocks550
BDBonds450
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Stocks Compliant 5% – 5% WITHIN_LIMITS
  • WITHIN_LIMITS: The measured value sits inside every approved bound.

Largest contributors: Stocks → EQ 55%

These are the product's own test cases for this template, evaluated by the Acclimetry rule engine (backend commit 8197063). The build fails if any result changes.

Stocks at 650 of a 1,000 book against a 50% benchmark weight is +15 active, over a +10 cap

Rule template: benchmark_relative

attribute: class
benchmarkName: Vector composite index
benchmarkAsOf: 2026-06-30
weights: group=Stocks, weight=50, hardMin=-10, hardMax=10

Holdings
HoldingClassMarket value
EQStocks650
BDBonds350
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Stocks Breach 15% – -5% ABOVE_HARD_MAXIMUM
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.

Largest contributors: Stocks → EQ 65%

These are the product's own test cases for this template, evaluated by the Acclimetry rule engine (backend commit 8197063). The build fails if any result changes.

A benchmark group the book does not hold is −20 active against its 20% weight, under a −10 floor — an underweight breaches too

Rule template: benchmark_relative

attribute: class
benchmarkName: Vector composite index
benchmarkAsOf: 2026-06-30
weights: group=Property, weight=20, hardMin=-10

Holdings
HoldingClassMarket value
EQStocks1,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Property Breach -20% – -10% BELOW_HARD_MINIMUM
  • BELOW_HARD_MINIMUM: The measured value falls below the approved hard minimum, beyond any stated tolerance.

These are the product's own test cases for this template, evaluated by the Acclimetry rule engine (backend commit 8197063). The build fails if any result changes.

Equities at 68% against a 60% benchmark weight are 8 points overweight, beyond the ±5 band; bonds are 6 points underweight, also a breach.

Rule template: benchmark_relative

attribute: class
benchmarkName: Policy benchmark (60/35/5)
benchmarkAsOf: 2026-09-30
weights: group=Equities, weight=60, hardMin=-5, hardMax=5, warnMin=-4, warnMax=4 · group=Bonds, weight=35, hardMin=-5, hardMax=5 · group=Cash, weight=5, hardMin=-5, hardMax=5

Holdings
HoldingClassMarket value
Global equity fundEquities680,000
Sterling bond fundBonds290,000
Sterling depositCash30,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Equities Breach 8% – -3%
-4% to warning
ABOVE_HARD_MAXIMUM
Bonds Breach -6% – -1% BELOW_HARD_MINIMUM
Cash Compliant -2% – 3% WITHIN_LIMITS
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
  • BELOW_HARD_MINIMUM: The measured value falls below the approved hard minimum, beyond any stated tolerance.
  • WITHIN_LIMITS: The measured value sits inside every approved bound.

Largest contributors: Equities → Global equity fund 68% · Bonds → Sterling bond fund 29% · Cash → Sterling deposit 3%

Computed at build time by the Acclimetry rule engine (backend commit 8197063); the same code runs in the product.

Interpretation traps

Points, not percentages of the weight

A ±5 band on a 20% benchmark weight allows 15% to 25%. A relative band, such as ‘within 25% of the benchmark weight’, must be converted to points for each group.

Supplied weights go stale

The rule holds the weights as at their as-of date and does not fetch index updates. Schedule a review as a manual obligation and supersede the version when the weights move.

Unlisted groups are not tested

A group missing from the weights list has no active band. An off-benchmark asset class is then unconstrained unless another rule covers it.

Result codes this check can return

CodeStateMeaningWhat to do
WITHIN_LIMITS ✓CompliantThe measured value sits inside every approved bound.–
ABOVE_WARNING_MAXIMUMWarningThe measured value has crossed the early-warning maximum but not the hard limit.No breach yet; the early-warning band exists so the position can be managed before one.
BELOW_WARNING_MINIMUMWarningThe measured value has crossed the early-warning minimum but not the hard limit.No breach yet; the early-warning band exists so the position can be managed before one.
ABOVE_HARD_MAXIMUM ✓BreachThe measured value exceeds the approved hard maximum, beyond any stated tolerance.Remediate the exposure, or record an approved waiver against the case.
BELOW_HARD_MINIMUM ✓BreachThe measured value falls below the approved hard minimum, beyond any stated tolerance.Remediate the exposure, or record an approved waiver against the case.
CONSERVATIVE_MISSING_DATABreachData was missing and this rule version's approved unknown-data policy is conservative_breach, so the gap is treated as a breach rather than as Not Evaluated.Supply the missing values; the reading is deliberately pessimistic until you do.
EMPTY_PORTFOLIONot applicableThe portfolio held no positions at the evaluation moment.–
NOT_IN_SCOPENot applicableThis rule version does not apply to this portfolio — the portfolio is outside the version's stated scope. Recorded so that "considered and out of scope" can be told from "never run".–
AGGREGATE_MEMBER_NOT_ACCEPTEDNot evaluated: data qualityA portfolio in the measured set has no authoritative snapshot, so the set-level number cannot be stated.Accept the named portfolios' snapshots. A partial set produces no aggregate.
MISSING_POSITION_DATANot evaluated: data qualityOne or more positions had no readable value, and the partial numbers do not prove the outcome either way.Supply the missing valuations. The platform will not fabricate a zero to produce a reading.
SNAPSHOT_NOT_ACCEPTEDNot evaluated: data qualityThe portfolio's newest snapshot awaits data-quality review; only accepted data may produce an authoritative result.Accept, override or reject the snapshot on Data & Quality.
SNAPSHOT_REJECTEDNot evaluated: data qualityThe portfolio's newest snapshot was rejected, so there is no authoritative data to measure.Load a corrected file.
STALE_POSITIONSNot evaluated: data qualityThe newest snapshot is older than the organisation's staleness threshold.Load current positions, or revisit the threshold on Data & Quality ▸ Policy.
STALE_PRICESNot evaluated: data qualityA holding had no price on the position file and its approved price was older than the organisation's price-staleness threshold, so it was left unvalued.Load a current price for the holding, price it on the position file, or revisit the threshold on Data & Quality ▸ Policy.
AWAITING_EXTERNAL_DATAPending external dataAn approved input is late but still inside the organisation's grace window. This is not a pass and not an exception.None yet. If the delivery does not arrive, this becomes a data-quality exception.
BAND_HAS_NO_BOUNDSNot evaluated: unsupportedA band in this rule version states neither a minimum nor a maximum, so there is nothing to decide against.Supersede the version with bounds on the band, or remove it.
METHOD_NOT_SUPPORTEDNot evaluated: unsupportedThe rule version asks for a measurement method this engine does not implement. Declared rather than approximated.Choose a supported methodology, or treat this limit as a manual obligation until the method ships.
EVALUATOR_ERRORNot evaluated: system errorThe evaluator raised an error. Surfaced as a visible result rather than as silence.Report it. A system error is never a pass and never a compliant reading.

✓ seen in the worked examples. The rest come from the platform registry’s own scan of the template source.

Questions

Is a ±5% band relative to the benchmark weight or in percentage points?

In percentage points of NAV. A 20% benchmark weight with a ±5 band allows 15% to 25%.

Where do the benchmark weights come from?

They are supplied with the rule version, with the benchmark's name and as-of date. When the index weights change, a new approved version records them.

How does this differ from an asset allocation range?

An allocation range bounds absolute weights, such as equities between 40% and 60%. A benchmark-relative band bounds the difference from a stated weight, which is the same test while that weight does not change.

Updated: 12 October 2026Acclimetry · Foreranger Ltd