Investment restriction

Illiquid assets limit (liquidity profile)

An illiquid assets limit caps the share of a portfolio held in investments that cannot be sold or redeemed quickly. Policies write it as ‘no more than 15% in illiquid assets’, which leaves ‘illiquid’ to be defined. Acclimetry tests every holding against one approved definition, such as a lock-up, a gate or a recorded classification, and caps the failing weight.

Rule template
liquidity_profile
Liquidity profile limit
Measured in
% of portfolio value
Worked examples, run by the engine
3

How policies word it

Illiquidity caps appear in family-office, foundation and pension policies, and in fund rules. The wording is often loose: ‘prudent limits on illiquid assets’, or a cap with no definition.

A clause that does not define ‘illiquid’ is ambiguous and needs clarification before it can be tested. The answer is recorded as an author decision: which test, which threshold, and who supplies the data.

US open-end funds have a regulatory version. SEC Rule 22e-4 bars a fund from acquiring an illiquid investment that would take illiquid holdings above 15% of net assets.

  • No more than 15% of the portfolio may be invested in illiquid assets.
  • Investments with a remaining lock-up of more than 12 months are limited to 20% of total assets.
  • At least 70% of the portfolio must be held in investments that deal at least monthly.
  • Holdings the investment committee classifies as illiquid may not exceed 25% of the portfolio.

How it is measured

The rule version names one basis. Each holding is tested against the threshold, and the holdings that fail are weighed against the whole portfolio.

  • Days to liquidate or days of average trading volume: an approved estimate per holding.
  • Dealing frequency, remaining lock-up or notice period: the fund's terms, held in a data field.
  • Redemption gate: the share redeemable at one dealing date. Here a smaller number is worse.
  • Days to maturity: for holdings meant to be held to maturity.
  • Classification: a recorded label, held in a data field or taken from the holding's class or sub-class. The rule names which labels count as illiquid.

A holding at or beyond the threshold counts as illiquid. The result shows the illiquid weight, its headroom to the limit and the holdings that contribute most.

When it is breached and what follows

Most breaches of this limit are passive. A fall in listed markets raises the illiquid share, and a fund that imposes a gate can move into the illiquid set overnight.

A breach opens a case with assignment, escalation and service-level clocks; a grace period can delay the clocks, not the breach. Selling illiquid assets takes time, so the agreed path back can be recorded as a time-bound waiver, approved within delegated authority.

A proposed purchase of an illiquid asset can be checked in Trade Impact before execution, which mirrors an acquisition test such as Rule 22e-4's.

Data the check reads

Rule parameters

The weight of holdings that fail an approved liquidity test — on days to liquidate, trading volume, dealing frequency, lock-up, notice period, redemption gate, maturity or classification — must not exceed the limit.

ParameterIn the platformOptions and help
basisLiquidity basisdays_to_liquidate (Days to liquidate) · trading_volume (Days of average trading volume) · dealing_frequency (Dealing days per year) · lock_up (Remaining lock-up (days)) · notice_period (Notice period (days)) · redemption_gate (Redemption gate (percent redeemable)) · maturity (Days to maturity) · classification (Liquidity classification)
fieldCodeGoverned fieldRequired for every basis except Liquidity classification. The approved field carrying this input — nothing is inferred from asset class.
thresholdThresholdRequired for every basis except Liquidity classification. Holdings at or beyond this value count as illiquid for this rule.
illiquidValuesClassifications counted as illiquidUsed by the Liquidity classification basis. Naming them here is what makes the judgement yours and recorded.
classificationSourceWhere the classification is heldUsed by the Liquidity classification basis.
exemptClassNamesExempt classes

Bounds the rule must set: hardMax

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 200 holding needing 30 days against a 10-day threshold is 20% of the 1,000 book illiquid, inside a 25% cap

Rule template: liquidity_profile

basis: days_to_liquidate
fieldCode: DTL
threshold: 10
classificationSource: field
Bounds: hard max 25%

Holdings
HoldingMarket valueDTL
A8001
B20030
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Illiquid by days to liquidate Compliant 20% ≤ 25% 5% WITHIN_LIMITS
  • WITHIN_LIMITS: The measured value sits inside every approved bound.

Largest contributors: Illiquid by days to liquidate → B 20%

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.

On the redemption-gate basis a smaller number is worse: a 10% gate under a 25% threshold marks 400 of the 1,000 book illiquid, over a 30% cap

Rule template: liquidity_profile

basis: redemption_gate
fieldCode: GATE
threshold: 25
classificationSource: field
Bounds: hard max 30%

Holdings
HoldingMarket valueGATE
A600100
B40010
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Illiquid by redemption gate (percent redeemable) Breach 40% ≤ 30% -10% ABOVE_HARD_MAXIMUM
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.

Largest contributors: Illiquid by redemption gate (percent redeemable) → B 40%

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 holding with no approved liquidity input is a data gap, never assumed liquid

Rule template: liquidity_profile

basis: days_to_liquidate
fieldCode: DTL
threshold: 10
classificationSource: field
Bounds: hard max 25%

Holdings
HoldingMarket valueDTL
A9001
B100(blank)
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Illiquid by days to liquidate 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.

The two classes the rule names as illiquid hold 200,000 of a 1,000,000 portfolio: 20%, over the 15% cap.

Rule template: liquidity_profile

basis: classification
illiquidValues: Private Equity, Direct Property
classificationSource: className
Bounds: warn max 12% · hard max 15%

Holdings
HoldingClassMarket value
Global equity fundEquities550,000
Sterling bond fundBonds250,000
Buyout fundPrivate Equity120,000
Farmland holdingDirect Property80,000
Result
GroupStatusValueBoundsHeadroom to the hard boundCode
Illiquid by liquidity classification Breach 20% ≤ 15%
warning ≤ 12%
-5%
-8% to warning
ABOVE_HARD_MAXIMUM
  • ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.

Largest contributors: Illiquid by liquidity classification → Buyout fund 12%, Farmland holding 8%

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

Interpretation traps

Asset class is not a liquidity test

Nothing is inferred from asset class, instrument name or any other proxy. If whole classes are illiquid, name them on the classification basis, which records the judgement as yours.

A blank is not ‘no lock-up’

A holding missing the input makes the result not evaluated (data quality). An unrecorded lock-up, notice period or gate is a data gap, not evidence that there is none.

‘More than’ needs a threshold one step higher

A holding at or beyond the threshold counts as illiquid. A clause that says ‘more than 12 months’ therefore needs a threshold just above 12 months, such as 366 days.

One test per rule

A definition that combines tests, such as ‘a lock-up over a year or notice over 90 days’, does not fit one basis. Hold it as an approved classification per holding instead.

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_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.–
NO_MEASURED_POSITIONSNot applicableNo position in the portfolio fell inside this rule's measured population.–
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

Questions

What counts as an illiquid asset?

Whatever the policy defines. Acclimetry tests the definition the rule version records: one basis and threshold, or a named set of classifications.

Is the limit tested at purchase or all the time?

Every monitoring run tests the current holdings, so passive breaches show up. A proposed purchase can also be checked in Trade Impact before execution.

How is this different from a time-to-liquidate limit?

The time-to-liquidate limit reads one days-to-liquidate estimate against a horizon and counts only holdings strictly beyond it. This template offers eight bases and counts holdings at or beyond the threshold.

Sources

Updated: 12 October 2026Acclimetry · Foreranger Ltd