Investment restriction

Issuer concentration limit (single issuer, single instrument)

An issuer concentration limit caps the share of portfolio value held with any single issuer, instrument or issuer group. ‘No more than 5% in any single issuer’ is the typical form. Acclimetry measures every group of the chosen dimension against the same cap, so each issuer gets its own result, headroom and contributors.

Rule template
concentration
Concentration limit
Measured in
% of portfolio value
Worked examples, run by the engine
2

How policies word it

Of 12 public policies read for this library in October 2026, six set a numeric concentration cap (data study). Among numeric limits, only allocation ranges appeared more often. Typical forms are a maximum weighting in any one security, such as 10%, or no more than 5% in a single issuer.

The wording decides the dimension. ‘Security’ or ‘investment’ points to the instrument, ‘issuer’ to the legal entity, and ‘issuer and its affiliates’ or ‘group’ to the ultimate parent. Regulated funds take the group reading: under the UCITS Directive, companies in one group count as a single body.

  • No more than 5% of the portfolio at market value in the securities of any single issuer.
  • The maximum weighting in any one security is 10%.
  • No direct holding above 5% of the portfolio; collective investment funds up to 10% each.
  • Exposure to any issuer and its affiliates shall not exceed 10% of net assets.

How it is measured

The rule chooses one dimension: instrument, issuer, or issuer group (ultimate parent). For each group the engine adds the market value of its positions and divides by the value of the portfolio. Each group is compared with the hard maximum and any warning maximum, and the result names the contributing positions.

Because the cap applies to every group, a breach by one issuer does not hide another. If any position has no readable value, the weights cannot be stated and the rule is not evaluated: the platform does not fabricate a zero.

The measure is direct holdings. Exposure through funds needs the look-through exposure limit, and exposure across family entities needs related-portfolio concentration.

When it is breached and what follows

An issuer can cross the cap without a trade, when its price rises or other holdings fall. The measurement is the same either way. The policy decides whether there is time to cure, and a grace period in days on the rule version can reflect it.

The case opens at the first breach and its clocks start when any grace ends. A warning maximum, say 8% against a 10% cap, gives notice before the hard limit. A proposed purchase can be checked against the cap in Trade Impact before it is placed.

A waiver can let a named holding stay over the cap for a period. It is approved within delegated authority, expires, and never turns the breach into a pass.

Data the check reads

Rule parameters

No single instrument (or issuer group) may exceed the approved share of portfolio value.

ParameterIn the platformOptions and help
dimensionDimensionasset (Instrument) · issuer (Issuer) · issuerGroup (Issuer group (ultimate parent))

Bounds the rule must set: hardMax

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

Worked examples, run by the engine

A single issuer at 30% of a 1,000 book breaches a 25% cap

Rule template: concentration

dimension: issuer
Bounds: hard max 25%

Holdings
HoldingIssuerMarket value
AISS-1300
BISS-2700
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
ISS-1 Breach 30% ≤ 25% -5% ABOVE_HARD_MAXIMUM
ISS-2 Breach 70% ≤ 25% -45% ABOVE_HARD_MAXIMUM
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.

Largest contributors: ISS-1 → A 30% · ISS-2 → B 70%

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 position with no readable value is not fabricated as zero

Rule template: concentration

dimension: issuer
Bounds: hard max 25%

Holdings
HoldingIssuerMarket value
AISS-1200
BISS-2–
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
ISS-1 Not evaluated: data quality – ≤ 25% – MISSING_POSITION_DATA
  • MISSING_POSITION_DATA: One or more positions had no readable value, and the partial numbers do not prove the outcome either way.

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.

Issuer A’s bond and shares add up to 18%, over the 17.5% warning bound and inside a 20% cap, so it reads warning. Issuer B sits exactly on the cap: reached, not exceeded.

Rule template: concentration

dimension: issuer
Bounds: warn max 17.5% · hard max 20%

Holdings
HoldingIssuerClassMarket value
Issuer A 4% 2031Issuer A plcBonds100,000
Issuer A sharesIssuer A plcEquities80,000
Issuer B sharesIssuer B plcEquities200,000
Issuer C sharesIssuer C plcEquities170,000
Issuer D sharesIssuer D plcEquities160,000
Issuer E sharesIssuer E plcEquities150,000
Issuer F sharesIssuer F plcEquities140,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Issuer A plc Warning 18% ≤ 20%
warning ≤ 17.5%
2%
-0.5% to warning
ABOVE_WARNING_MAXIMUM
Issuer B plc Warning 20% ≤ 20%
warning ≤ 17.5%
0%
-2.5% to warning
ABOVE_WARNING_MAXIMUM
Issuer C plc Compliant 17% ≤ 20%
warning ≤ 17.5%
3%
0.5% to warning
WITHIN_LIMITS
Issuer D plc Compliant 16% ≤ 20%
warning ≤ 17.5%
4%
1.5% to warning
WITHIN_LIMITS
Issuer E plc Compliant 15% ≤ 20%
warning ≤ 17.5%
5%
2.5% to warning
WITHIN_LIMITS
Issuer F plc Compliant 14% ≤ 20%
warning ≤ 17.5%
6%
3.5% to warning
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: Issuer A plc → Issuer A 4% 2031 10%, Issuer A shares 8% · Issuer B plc → Issuer B shares 20% · Issuer C plc → Issuer C shares 17%

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

Interpretation traps

Issuer or issuer group

A bank’s shares, senior bonds and covered bonds may sit under different issuer entities. Measured by issuer, each can pass while the group exceeds the cap. Decide which the clause means and record it; see issuer groups and ultimate parents.

Tiered caps and exemptions

The template applies one cap to every group of its dimension. Tiered caps (5% direct, 10% for funds) and exemptions for government bonds are not settings of it. Record how that part of the clause is handled instead of stretching one cap over both.

Which denominator

The cap is measured against portfolio value at market. A clause written ‘of total assets’, ‘of net assets’ or ‘of the manager’s portfolio’ may mean something else; see denominators.

One unvalued position

A single position without a value leaves every weight unsettled, so the rule is not evaluated rather than passed. A rule version can choose a conservative-breach policy instead; see missing and stale data.

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_MINIMUMBreachThe 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_DATA ✓Not 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

Does a 5% issuer cap apply to every issuer or only the largest?

Every issuer. Each group of the chosen dimension gets its own result, so two issuers over the cap produce two breaches.

How do I cap a whole banking group?

Choose the issuer-group dimension, which adds positions up by their ultimate parent. Each position then needs an issuer-group key.

Can Acclimetry run the UCITS 5/10/40 test?

The 10% ceiling per issuer can be a concentration rule, and a 5% warning bound then lists the issuers above 5%. Nothing sums those issuers against 40%: the aggregate is not expressed as one rule today.

Sources

Updated: 12 October 2026Acclimetry · Foreranger Ltd