Investment restriction

Asset allocation ranges (policy ranges and rebalancing bands)

An asset allocation range is the minimum and maximum share of portfolio value an asset class may hold, usually set around a strategic target. Acclimetry tests each named group against its own band, so a 35%–55% equity range breaches below 35% or above 55%. Warning bounds inside the range flag drift before rebalancing is due.

Rule template
allocation_range
Asset allocation range
Measured in
% of portfolio value
Worked examples, run by the engine
3

How policies word it

Policies set a target for each asset class and a range around it. Typical forms are ‘Public equity 45% (35%–55%)’ or a table of lower limit, target and upper limit. UK statements of investment principles often keep the numbers elsewhere, in a summary of investment arrangements or the manager’s agreement.

The range does two jobs: it is the limit the manager must respect and the trigger for rebalancing. Several policies require a rebalance when a class leaves its range. A narrower inner band, sometimes called a collar or bandwidth, warns that drift is building.

The target itself is not a limit. In Acclimetry the strategic asset allocation bands are governed rules, while tactical positions inside them remain the manager’s decision.

  • Public equity: target 45%, permitted range 35%–55% of the portfolio.
  • Fixed income will be held between 20% and 40% of total assets, with a target of 30%.
  • Each asset class shall remain within the lower and upper limits in Appendix A; the portfolio shall be rebalanced when a limit is breached.
  • Alternative investments may not exceed 15% of the portfolio at market value.
  • Rebalance to target whenever an asset class drifts more than 5 percentage points from it.

How it is measured

Each band names a group of one dimension: class, sub-class, type, sub-type or strategy. The engine adds the market value of the positions in the group and divides it by the value of the whole portfolio. The weight is compared with that group’s hard minimum and maximum and with any warning bounds.

Only the groups in the band table are tested. A class with no band is unconstrained, so a policy that caps ‘any other asset class’ needs a band for each class it means. Every band must state a hard minimum or a hard maximum.

Two edge cases are worth knowing. A governed group that holds nothing reads 0% and breaches its minimum. A portfolio holding nothing in any governed group reads not applicable, because it is not managed against these bands.

When it is breached and what follows

Allocation breaches are usually passive: markets move the weights, not a purchase. A breach is recorded when a weight passes a hard bound by more than the rule version’s tolerance, whatever moved it. Which cure period applies is set by the policy or regulation, not by the calculation.

A rule version may carry a grace period in days, which suits policies that allow time to rebalance. The result is still a breach from the first observation and the case opens at once, but its clocks start when the grace ends. A waiver can cover an agreed period outside the band; it is time-bound and never changes the result.

Before a rebalancing trade, Trade Impact can check the proposed orders against the same bands as a what-if.

Data the check reads

Rule parameters

Each configured group of the chosen dimension must keep its portfolio weight inside its approved band.

ParameterIn the platformOptions and help
dimensionDimensionclass (Class) · subClass (Sub class) · type (Type) · subType (Sub type) · strategy (Strategy)
The grouping the band table is written against.
bandsBands (percent of portfolio value)

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

Worked examples, run by the engine

A class band below its minimum breaches

Rule template: allocation_range

dimension: class
bands: group=Bonds, hardMin=40

Holdings
HoldingClassMarket value
BONDBonds300
EQStocks700
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Bonds Breach 30% – -10% BELOW_HARD_MINIMUM
  • BELOW_HARD_MINIMUM: The measured value falls below the approved hard minimum, beyond any stated tolerance.

Largest contributors: Bonds → BOND 30%

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 book holding nothing in any governed group reads Not Applicable, never Breach

Rule template: allocation_range

dimension: class
bands: group=Bonds, hardMin=40 · group=Stocks, hardMin=30, hardMax=70

Holdings
HoldingClassMarket value
CASHCash1,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Bonds Not applicable – – – NO_GOVERNED_HOLDINGS
Stocks Not applicable – – – NO_GOVERNED_HOLDINGS
  • NO_GOVERNED_HOLDINGS: The portfolio held valued positions, but none in any group the rule governs — the book is not managed against these bands (its holdings were removed, or it holds only ungoverned groups). Read as not applicable rather than as a breach of every band.

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 governed group that is merely empty while another is held is still a breach

Rule template: allocation_range

dimension: class
bands: group=Bonds, hardMin=40 · group=Stocks, hardMin=30, hardMax=70

Holdings
HoldingClassMarket value
EQStocks1,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Bonds Breach 0% – -40% BELOW_HARD_MINIMUM
Stocks Breach 100% – -30% ABOVE_HARD_MAXIMUM
  • BELOW_HARD_MINIMUM: The measured value falls below the approved hard minimum, beyond any stated tolerance.
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.

Largest contributors: Stocks → EQ 100%

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 53% sit above the 52% warning bound but inside the 55% hard maximum, so the equity band reads warning, not breach.

Rule template: allocation_range

dimension: class
bands: group=Equities, hardMin=35, warnMin=38, warnMax=52, hardMax=55 · group=Bonds, hardMin=20, hardMax=40

Holdings
HoldingClassMarket value
Global equitiesEquities530,000
UK giltsBonds330,000
Sterling cashCash140,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Equities Warning 53% 35% – 55%
warning 38% – 52%
2%
-1% to warning
ABOVE_WARNING_MAXIMUM
Bonds Compliant 33% 20% – 40% 7% WITHIN_LIMITS
  • ABOVE_WARNING_MAXIMUM: The measured value has crossed the early-warning maximum but not the hard limit.
  • WITHIN_LIMITS: The measured value sits inside every approved bound.

Largest contributors: Equities → Global equities 53% · Bonds → UK gilts 33%

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

Interpretation traps

Percentage points or percent of target

‘Within 5% of target’ can mean 40%–50% around a 45% target, or 42.75%–47.25% if read as 5% of the target. Write the band as absolute bounds. Record the reading as an author decision when the source leaves it open.

Unlisted classes are unconstrained

The template tests only the groups in its band table. A residual ‘other’ bucket, or a class added later, has no limit until it gets a band of its own. Review the table whenever the classification changes.

Funds count under their own class

The band reads each position’s own classification, so a bond fund classed as ‘Funds’ adds nothing to ‘Bonds’. To measure through pooled funds, use the look-through exposure limit.

Result codes this check can return

CodeStateMeaningWhat to do
WITHIN_LIMITSCompliantThe 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.–
NO_GOVERNED_HOLDINGS ✓Not applicableThe portfolio held valued positions, but none in any group the rule governs — the book is not managed against these bands (its holdings were removed, or it holds only ungoverned groups). Read as not applicable rather than as a breach of every band.If the book should hold these groups, that is a mandate question for its manager, not a data fix; if the rule should not cover this book, narrow its scope.
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.
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.

Regulatory analogues

Try it on your own holdings

The free Limit Checker runs this same template in your browser against a CSV of holdings. Nothing is uploaded.

Open the Limit Checker

Questions

Is a target allocation a limit?

No. The target is the neutral position and the range around it is the limit. Acclimetry tests the range and leaves the position within it to the manager.

Can a band have only a maximum?

Yes. Each band needs a hard minimum or a hard maximum and may have both. A cap such as ‘alternatives at most 15%’ is a band with a maximum only.

What happens when a governed asset class is empty?

If other governed classes are held, the empty class reads 0% and breaches any minimum. If the portfolio holds none of the governed classes, the rule reads not applicable.

Sources

Updated: 12 October 2026Acclimetry · Foreranger Ltd