Investment restriction

Minimum diversification (holdings count, top-N weight)

A minimum diversification rule sets a floor on the number of holdings or issuers, or caps the combined weight of the largest N holdings. Typical clauses are ‘hold at least 20 different issuers’ and ‘the top 10 holdings may not exceed 40%’. Acclimetry counts distinct holdings or issuers, or ranks holdings by absolute weight against NAV, and tests the result against the approved bound.

Rule template
diversification
Diversification requirement
Measured in
count
Worked examples, run by the engine
2

How policies word it

Diversification is a legal duty for many trustees and a common policy principle. UK trustees must consider ‘the need for diversification’, and pension trustees must keep assets properly diversified.

A duty becomes testable once the policy turns it into a number:

  • Breadth: at least 20 different issuers, or at least 30 holdings.
  • Top-heaviness: the 10 largest holdings no more than 40% of the portfolio.

Some regulations use the same forms. The UCITS government-securities exception, which allows more than 35% with one issuer, requires at least six different issues. The US tax rule for variable contracts caps the largest one to four investments at 55%, 70%, 80% and 90%.

  • The portfolio will hold securities of at least 20 different issuers.
  • The 10 largest holdings may not exceed 40% of the portfolio.
  • The equity portfolio will contain a minimum of 30 holdings.
  • No single investment may exceed 55% of the account, nor any two together 70%.

How it is measured

The rule version names one measure:

  • Minimum holdings: the number of distinct instruments held.
  • Minimum issuers: the number of distinct issuers held. Two bonds of one issuer count once.
  • Top-N weight: the N largest holdings by absolute weight, added together and divided by NAV.

Counts read distinct keys, so missing prices do not affect them. Top-N weights need a value for every holding, because an unvalued holding could belong in the top N.

Exempt classes, such as cash, can be left out of the count and the ranking. Counts return a number with headroom; top-N returns a percentage and the ranked holdings.

When it is breached and what follows

A count below the hard minimum, or a top-N weight above the hard maximum, is a breach. Warning bounds give notice, for example at 22 issuers against a minimum of 20.

Top-N breaches are often passive: a rally in the largest holdings raises their combined weight. Counts can fall after sales, mergers or takeovers that remove an issuer.

Each breach joins a case with assignment, escalation and service-level clocks. A rebuild after a large sale can be covered by a time-bound waiver, which never changes the result.

Data the check reads

Rule parameters

Minimum number of holdings or issuers, or a cap on the combined weight of the largest N holdings.

ParameterIn the platformOptions and help
measureMeasure
topNTop NRequired for max_top_n_weight.
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

A book of three holdings fails a minimum of five

Rule template: diversification

measure: min_holdings
Bounds: hard min 5

Holdings
HoldingMarket value
A300
B300
C400
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Distinct holdings Breach 3 ≥ 5 -2 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.

The two largest of four holdings, 300 and 250 of a 1,000 book, weigh 55% together, inside a 60% cap

Rule template: diversification

measure: max_top_n_weight
topN: 2
Bounds: hard max 60%

Holdings
HoldingMarket value
A300
B250
C240
D210
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Top 2 holdings Compliant 55% ≤ 60% 5% WITHIN_LIMITS
  • WITHIN_LIMITS: The measured value sits inside every approved bound.

Largest contributors: Top 2 holdings → A 30%, B 25%

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.

Six holdings but five issuers: the two gilts share one issuer, so the count is 5, below the minimum of 6. Cash is exempt and needs no issuer.

Rule template: diversification

measure: min_issuers
exemptClassNames: Cash
Bounds: hard min 6 · warn min 8

Holdings
HoldingIssuerClassMarket value
UK Treasury 2028HM TreasuryBonds200,000
UK Treasury 2035HM TreasuryBonds150,000
Acme plcAcme plcEquities180,000
Beta plcBeta plcEquities170,000
Gamma plcGamma plcEquities160,000
Delta plcDelta plcEquities140,000
Sterling deposit–Cash50,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Distinct issuers Breach 5 ≥ 6
warning ≥ 8
-1
-3 to warning
BELOW_HARD_MINIMUM
  • BELOW_HARD_MINIMUM: The measured value falls below the approved hard minimum, beyond any stated tolerance.

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

Interpretation traps

Holdings are not issuers

Five gilts are five holdings and one issuer. A policy that says ‘20 securities’ and one that says ‘20 issuers’ need different measures.

Counts ignore size

Twenty issuers with one at 60% passes a count test. Pair a count with an issuer concentration limit or a top-N cap.

Top-N ranks holdings, not issuers

The ranking is by holding. Where a rule treats all of one issuer's securities as one investment, check the mapping, or hold each issuer once.

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_MAXIMUMBreachThe 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.
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

Can Acclimetry test the 1940 Act 75-5-10 rule?

Not as one rule. The test applies issuer caps within 75% of the portfolio, which no single template expresses today.

How do I test a 55/70/80/90 rule?

As four top-N rules, with N of 1 to 4 and caps of 55%, 70%, 80% and 90%. A composite rule can combine them; the regulation's own counting rules decide what one investment is.

Do missing prices affect a minimum holdings count?

No. Counts read distinct keys and are unaffected by missing prices; top-N weights need a value for every holding.

Sources

Updated: 12 October 2026Acclimetry · Foreranger Ltd