Investment restriction
Collateral, margin, repo and securities-lending limits
Collateral, margin, repo and securities-lending limits cap the amounts a portfolio has tied up in financing and derivative arrangements, as a share of NAV. A policy might say ‘securities on loan may not exceed 20% of the portfolio’. Acclimetry adds the stated amounts for one measure in absolute terms, so posting and receiving both count, and tests the total against the limit.
collateral_exposureCollateral / margin / repo / stock-loan limit
How policies word it
These limits appear in investment management agreements, fund documents and the policies of owners who lend securities or trade derivatives. Each clause usually covers one activity:
- Securities lending: securities on loan may not exceed 20% of the portfolio.
- Repo: repurchase agreements are limited to 10% of net assets.
- Margin: initial margin posted may not exceed 5% of NAV.
- Collateral: collateral posted to counterparties may not exceed 10% of the portfolio.
Clauses on collateral quality, such as eligible assets or haircuts, are a separate question. This template does not measure them, and they can be held as a manual obligation.
- Securities on loan may not exceed 20% of the portfolio.
- Repurchase agreements are limited to 10% of net assets.
- Initial margin posted on derivatives may not exceed 5% of NAV.
- Collateral posted to counterparties must not exceed 10% of the portfolio.
How it is measured
The rule version names one measure. The amounts of the measured positions are added in absolute terms and divided by NAV.
- Collateral: the position's own Collateral Value column, or a named data field for positions that state none.
- Margin: the Initial and Variation Margin columns, or a data field. The rule counts initial, variation or both, which is the default.
- Repo and securities lending: a named data field only, because positions carry no column for them.
Measured classes narrow the population, for example to derivatives for a margin limit. With the default setting, a measured position that states no amount is a data gap, not a zero.
The result shows the total as a share of NAV, the headroom and the positions that contribute most. It also says how many amounts came from columns and how many from the field.
When it is breached and what follows
A total above the hard maximum is a breach, and warning bounds give notice first. Margin calls and rising prices of lent securities can push the total up without any new trade.
Breaches join a case with assignment, escalation and service-level clocks, and a grace period can hold the clocks while a recall settles. Waivers are time-bound and approved within delegated authority; they never change the result.
Data the check reads
- For collateral and margin: the position's Collateral Value or Initial and Variation Margin columns, or a named data field
- For repo and securities lending: a named data field with the amount per position
- The measured classes, such as derivatives, if not every position is in scope
- Amounts in the portfolio's base currency
- Market values for every position, for NAV
Rule parameters
Collateral posted or received, margin, repo or securities-lending exposure — read from the position's own stated columns, or from a governed field — as a share of NAV.
| Parameter | In the platform | Options and help |
|---|---|---|
| measure | Measure | collateral (Collateral (posted or received)) · margin (Margin) · repo (Repo exposure) · securities_lending (Securities lending) |
| fieldCode | Amount field | Optional for collateral and margin: the position's own Collateral Value and Initial / Variation Margin columns are read first, and this governed field supplies a position that states none. Required for repo and securities lending, which have no column. |
| marginComponent | Margin component | total (Initial + variation (total)) · initial (Initial margin only) · variation (Variation margin only) For a margin limit: the initial margin, the variation margin, or their sum (the default). |
| classNames | Measured classes | Leave empty to measure every position. |
| requireAmount | Missing amount is a data gap |
Bounds the rule must set: hardMax
Methodology choices
- Amounts are absolute — posting and receiving both consume the limit unless the feed signs them.
- Collateral and margin are read from the position's own columns first (Collateral Value; Initial and Variation Margin); a governed field, when named, supplies a position that states none. Repo and securities lending read the governed field only.
- A collateral or margin figure stated in another currency than the book's is counted as stated, not converted; the result says how many were.
Parameter names, methodology text and result-code meanings are shown exactly as the platform states them.
Worked examples, run by the engine
Margin of 50 posted on a derivative in a 1,000 book is 5%, inside a 10% cap
Rule template:collateral_exposure measure: marginfieldCode: MARGINclassNames: DerivativesrequireAmount: true
Bounds: hard max 10%
| Holding | Class | Market value | MARGIN |
|---|---|---|---|
| FUT | Derivatives | 200 | 50 |
| EQ | Stocks | 800 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Margin | Compliant | 5% | ≤ 10% | 5% | WITHIN_LIMITS |
WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: Margin → FUT 5%
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.
Repo amounts are absolute, so 100 received and 100 posted are 200 of a 1,000 book, or 20%, over a 15% cap
Rule template:collateral_exposure measure: repofieldCode: REPOrequireAmount: true
Bounds: hard max 15%
| Holding | Market value | REPO |
|---|---|---|
| R1 | 500 | -100 |
| R2 | 500 | 100 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Repo exposure | Breach | 20% | ≤ 15% | -5% | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Repo exposure → R1 10%, R2 10%
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 derivative in the measured population stating no margin is a data gap, not a stated zero
Rule template:collateral_exposure measure: marginfieldCode: MARGINclassNames: DerivativesrequireAmount: true
Bounds: hard max 10%
| Holding | Class | Market value | MARGIN |
|---|---|---|---|
| FUT1 | Derivatives | 200 | 50 |
| FUT2 | Derivatives | 200 | (blank) |
| EQ | Stocks | 600 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Margin | Not evaluated: data quality | – | ≤ 10% | – | 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.
Collateral is read from the position's own stated column — 100 received on one swap and 50 on another are 15% of a 1,000 book, over a 10% cap, with no governed field named
Rule template:collateral_exposure measure: collateralclassNames: DerivativesrequireAmount: true
Bounds: hard max 10%
| Holding | Class | Market value | Collateral |
|---|---|---|---|
| EQ | Stocks | 600 | – |
| SWA | Derivatives | 300 | 100 USD received |
| SWB | Derivatives | 100 | 50 EUR received |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Collateral | Breach | 15% | ≤ 10% | -5% | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Collateral → SWA 10%, SWB 5%
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 margin limit sums the stated initial and variation margin — 20 + 5 on a derivative in a 1,000 book is 2.5%, inside a 5% cap
Rule template:collateral_exposure measure: marginclassNames: DerivativesrequireAmount: true
Bounds: hard max 5%
| Holding | Class | Market value | Margin |
|---|---|---|---|
| FUT | Derivatives | 200 | initial 20 · variation 5 USD |
| EQ | Stocks | 800 | – |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Margin | Compliant | 2.5% | ≤ 5% | 2.5% | WITHIN_LIMITS |
WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: Margin → FUT 2.5%
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 field supplies a position that states no margin of its own — 50 from the column on one derivative and 30 from the field on another are 8% of a 1,000 book, over a 6% cap
Rule template:collateral_exposure measure: marginfieldCode: MARGINclassNames: DerivativesrequireAmount: true
Bounds: hard max 6%
| Holding | Class | Market value | Margin | MARGIN |
|---|---|---|---|---|
| FUT1 | Derivatives | 200 | initial 50 USD | (blank) |
| FUT2 | Derivatives | 200 | – | 30 |
| EQ | Stocks | 600 | – | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Margin | Breach | 8% | ≤ 6% | -2% | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Margin → FUT1 5%, FUT2 3%
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.
Securities on loan total 250,000, or 25% of the 1,000,000 portfolio, over the 20% cap. Cash is outside the measured classes, so it needs no amount.
Rule template:collateral_exposure measure: securities_lendingfieldCode: ON_LOANclassNames: Equities, BondsrequireAmount: true
Bounds: warn max 18% · hard max 20%
| Holding | Class | Market value | ON_LOAN |
|---|---|---|---|
| UK equity holding | Equities | 300,000 | 120000 |
| US equity holding | Equities | 250,000 | 80000 |
| UK Treasury 2032 | Bonds | 200,000 | 50000 |
| Corporate bond 2029 | Bonds | 150,000 | 0 |
| Sterling deposit | Cash | 100,000 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| Securities lending | Breach | 25% | ≤ 20% warning ≤ 18% | -5% -7% to warning | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: Securities lending → UK equity holding 12%, US equity holding 8%, UK Treasury 2032 5%
Computed at build time by the Acclimetry rule engine (backend commit 8197063); the same code runs in the product.
Interpretation traps
Posting and receiving do not offset
Amounts are taken in absolute terms. A book that posts 100 and receives 100 shows 200, not zero, even when the feed signs the amounts.
Amounts are not converted
A collateral or margin figure stated in another currency is counted as stated. Feed amounts in the base currency; the result says how many were in another one.
No measured classes means every position
If no classes are named, every position is measured. With missing amounts treated as data gaps, an equity with no margin then stops the reading.
Columns win over fields
For collateral and margin, the position's own columns are read first. A data field fills in only positions that state nothing, so it does not override a stale column value.
Result codes this check can return
| Code | State | Meaning | What to do |
|---|---|---|---|
| WITHIN_LIMITS ✓ | Compliant | The measured value sits inside every approved bound. | – |
| ABOVE_WARNING_MAXIMUM | Warning | The 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_MINIMUM | Warning | The 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 ✓ | Breach | The 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 | Breach | The 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_DATA | Breach | Data 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_PORTFOLIO | Not applicable | The portfolio held no positions at the evaluation moment. | – |
| NO_MEASURED_POSITIONS | Not applicable | No position in the portfolio fell inside this rule's measured population. | – |
| NOT_IN_SCOPE | Not applicable | This 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_ACCEPTED | Not evaluated: data quality | A 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 quality | One 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_ACCEPTED | Not evaluated: data quality | The 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_REJECTED | Not evaluated: data quality | The portfolio's newest snapshot was rejected, so there is no authoritative data to measure. | Load a corrected file. |
| STALE_POSITIONS | Not evaluated: data quality | The newest snapshot is older than the organisation's staleness threshold. | Load current positions, or revisit the threshold on Data & Quality ▸ Policy. |
| STALE_PRICES | Not evaluated: data quality | A 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_DATA | Pending external data | An 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_SUPPORTED | Not evaluated: unsupported | The 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_ERROR | Not evaluated: system error | The 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
- UCITS OTC derivative counterparty limit: 5% and 10% (COLL 5.2.11R; Art 52(1))
- AIFMD gross method: repo, securities lending and reinvested borrowings count towards exposure (Article 7)
Acclimetry evaluates the absolute total of one measure, collateral, margin, repo or securities lending, across the measured positions as a share of NAV. It reads amounts from position columns or a named field and does not convert currencies, apply haircuts or value collateral. It does not check collateral eligibility or net exposures under agreements.
Questions
Does collateral received count towards the limit?
Yes. Posted and received amounts both count in absolute terms; the template does not separate them by direction.
Can one rule cover margin and securities lending together?
No. Each rule version has one measure, so two activities need two rules. A composite rule can combine their outcomes if the policy links them.
How is this different from a counterparty concentration limit?
A counterparty concentration limit measures exposure facing each counterparty. This template measures the amounts of one financing activity across the whole portfolio.
Sources
- FCA Handbook, COLL 5.2 (UK UCITS investment powers), read 12 October 2026; pending FCA API snapshot · © FCA, OGL v3.0 · Read on12 October 2026
- Commission Delegated Regulation (EU) No 231/2013, Article 7 (gross method), UK version · OGL v3.0 · Read on12 October 2026