Investment restriction
Currency exposure bands
A currency exposure band keeps the weight of one named currency, as a share of net portfolio value, inside an approved range. Acclimetry measures each listed currency’s signed weight, optionally offsetting declared hedging instruments. The currency of each holding is read by denomination or from an economic-currency field.
currency_exposureCurrency exposure band
How policies word it
Currency limits take three forms. A single-currency cap reads ‘US dollar exposure no more than 30%’; an aggregate cap reads ‘foreign currency no more than 30%’. A hedging requirement such as ‘hedge at least 75% of US dollar exposure’ is a currency hedge ratio, with its own template.
The policy should say whether exposure is measured before or after hedges. It should also say whether a holding’s currency is the one it is priced in or the currency of its underlying assets.
- Exposure to the US dollar will not exceed 30% of the portfolio after hedging.
- Foreign currency exposure, after hedges, will be no more than 30% of net assets.
- At least 70% of the portfolio will be held in sterling-denominated assets.
- Currency exposure is measured by the currency of the underlying assets, not that of the share class.
How it is measured
Each band names a currency and states a hard minimum, a hard maximum or both, in signed percent of net portfolio value. The engine adds the signed value of positions in that currency and divides by net portfolio value. Only the currencies in the band table are tested.
With offset, positions in the named hedge classes, such as FX forwards, net against their currency at signed value. Dollar assets of 600 and a 200 short forward leave 400. With exclude, hedge classes are left out and the band reads the unhedged basis.
The currency basis is either denomination, the currency the instrument is priced in, or economic, read from a governed field. A US-dollar-priced depositary receipt over a Brazilian company is dollars by denomination and Brazilian real economically. A position without the economic field falls back to its denomination and is counted.
When it is breached and what follows
Currency weights move with exchange rates, so most breaches are passive. A warning bound gives time to adjust hedges before the hard limit, and proposed hedge trades can be checked in Trade Impact.
A breach opens a case at the first observation; a grace period in days delays its clocks, not the breach. Missing values are never read as compliant, and a waiver never changes a result.
Data the check reads
- Market value and signed value of every position
- The currency of each position, and a governed economic-currency field if that basis is used
- The hedge class names, such as FX forwards, and the hedge treatment: offset or exclude
- A band per currency: a hard minimum and/or maximum, with optional warning bounds
Rule parameters
Each configured currency must keep its (optionally hedge-offset) weight inside its approved band.
| Parameter | In the platform | Options and help |
|---|---|---|
| bands | Currency bands (signed percent of NAV) | |
| hedgeClassNames | Hedge class names | |
| hedgeTreatment | Hedge treatment (declared methodology) | offset (Offset — hedges net against their currency at signed value) · exclude (Exclude — unhedged basis, hedge classes left out) |
| currencyBasis | Currency basis | denomination (Denomination — the currency the instrument is priced in) · economic (Economic — the currency of the underlying exposure, from a governed field) An ADR priced in USD over a Brazilian issuer is USD by denomination and BRL economically. |
| economicCurrencyFieldCode | Economic currency field code | Read on the economic basis; a position without the field falls back to its denomination and is counted. |
Parameter names, methodology text and result-code meanings are shown exactly as the platform states them.
Worked examples, run by the engine
A currency band measures that currency against the whole book
Rule template:currency_exposure bands: currency=USD, hardMax=30
| Holding | Currency | Market value |
|---|---|---|
| U1 | USD | 400 |
| G1 | GBP | 600 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| USD | Breach | 40% | – | -10% | ABOVE_HARD_MAXIMUM |
ABOVE_HARD_MAXIMUM: The measured value exceeds the approved hard maximum, beyond any stated tolerance.
Largest contributors: USD → U1 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 200 short forward offsets 600 of USD assets at signed value: 400 of the 1,000 book is 40%, inside a 50% cap
Rule template:currency_exposure bands: currency=USD, hardMax=50hedgeClassNames: FX ForwardshedgeTreatment: offset
| Holding | Class | Currency | Long / short | Market value |
|---|---|---|---|---|
| U1 | Stocks | USD | – | 600 |
| FWD | FX Forwards | USD | short | -200 |
| G1 | Stocks | GBP | – | 600 |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| USD | Compliant | 40% | – | 10% | WITHIN_LIMITS |
WITHIN_LIMITS: The measured value sits inside every approved bound.
Largest contributors: USD → U1 60%, FWD -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 economic basis, the US-dollar-priced receipt over a Brazilian company counts as Brazilian real, so US dollar exposure is 27%: past the 25% warning bound, inside the 30% cap.
Rule template:currency_exposure bands: currency=USD, hardMax=30, warnMax=25currencyBasis: economiceconomicCurrencyFieldCode: ECONOMIC_CURRENCY
| Holding | Class | Currency | Market value | ECONOMIC_CURRENCY |
|---|---|---|---|---|
| Depositary receipt, Brazilian company | Equities | USD | 200,000 | BRL |
| US equities | Equities | USD | 270,000 | (blank) |
| UK equities | Equities | GBP | 530,000 | (blank) |
| Group | Status | Value | Bounds | Headroom to the hard bound | Code |
|---|---|---|---|---|---|
| USD | Warning | 27% | ≤ 30% warning ≤ 25% | 3% -2% to warning | ABOVE_WARNING_MAXIMUM |
ABOVE_WARNING_MAXIMUM: The measured value has crossed the early-warning maximum but not the hard limit.
Largest contributors: USD → US equities 27%
Computed at build time by the Acclimetry rule engine (backend commit 8197063); the same code runs in the product.
Interpretation traps
‘All foreign currency’ is not one band
Bands are per currency, and an unlisted currency is unconstrained. In a book without hedges or derivatives, a 70% sterling floor equals a 30% cap on all other currencies, because the weights sum to 100%. With hedges the two differ, so record how the clause is handled.
Denomination is not exposure
A sterling share class of a global equity fund is sterling by denomination but mostly foreign economically. Choose the economic basis and supply the field where the policy means underlying exposure; see currency basis and hedges.
What the hedge offsets
With offset, a hedge counts at the signed value the position data gives it. Check how forwards are carried, since one reported only at its mark-to-market value offsets little; see currency hedge ratio.
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. | – |
| 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.
Acclimetry evaluates the signed weight of each listed currency over net portfolio value, by denomination or a governed economic-currency field. Hedge classes are offset or excluded as the rule declares. It does not cap all foreign currencies in one band, derive economic currency itself, or value forwards; hedge ratios are a separate template.
The free Limit Checker runs this same template in your browser against a CSV of holdings. Nothing is uploaded.
Questions
Can one band cap all foreign currencies together?
No. Each band names one currency, and a currency without a band is not tested. Without hedges or derivatives, a floor on the base currency gives the same result.
Are hedges counted?
Only as the rule declares. Offset nets the named hedge classes against their currency at signed value; exclude leaves them out.