How the Books manage risk
Risk in a Book is limited in two places: by the Book's own policy while the portfolio is built, and by the house limits, which the risk service checks before any change is taken. Where both set a limit, the tighter one applies, and no market condition can loosen either.
The controls at a glance
The figures are the ones the code sets. Each Book's own caps, drawdown breakers and current exposure are on its page.
| Control | Setting | Where it is set |
|---|---|---|
| Tail-risk budget | One-day 95% CVaR of at most 4.5% of the Book's value | House limits |
| Drawdown circuit breakers | 10% · 15% · 21% below the Book's peak value | Book policy and house limits; the tighter applies |
| Stepping back down | Below half the tier's level, after at least 3 sessions, one tier at a time | House limits |
| Regime overlay | Multipliers of at most 1: a limit can be tightened, never widened | Book policy and house limits; the tighter applies |
| Gross exposure | Growth targets 115%, Moderate and Conservative 100%; never above 165% | Book policy and house limits; the tighter applies |
| Largest single position | Growth 17%, Moderate 15%, Conservative 14% | Book policy |
| One issuer · one sector | 25% · 50% of the Book | Book policy and house limits; the tighter applies |
| Liquidity floor | $10 million median daily dollar volume over 30 days | Book policy |
| Order size · time to exit | At most 5% of a stock's daily volume · the whole Book within 5 trading days at that rate | Book policy and house limits; the tighter applies |
| Spread · commission | Estimated from daily prices, at most 60 bp · 0.5 bp | Cost model |
| Market impact | Almgren-Chriss, 0.10 temporary and 0.05 permanent, above 0.5% of daily volume | Cost model |
The eleven risk engines
Behind these controls sits the risk service: eleven engines in three groups. Five measure the risk, four decide what is permitted, and two check whether the risk models themselves deserve trust.
Measurement: what the risk is
| Engine | What it does |
|---|---|
| Tail risk | Value at risk and CVaR at 95% and 99%, by filtered historical simulation, with a parametric fallback when there is too little history. |
| Factor model | The platform's single covariance matrix, built from style and sector factors and repaired so it is always a valid covariance. |
| Attribution | Splits the Book's CVaR exactly across its positions (the Euler decomposition): marginal CVaR per position, the factor and stock-specific shares, and the effective number of independent bets. |
| Liquidity | Days to liquidate each position at a set share of its average daily volume, and a stressed horizon that lengthens further for crowded names. |
| Stress | Scenarios applied in factor space, and a reverse stress test that solves for the move that would breach a limit. |
Control: what is permitted
| Engine | What it does |
|---|---|
| Risk budget | The budget is counted in CVaR. Proposed trades are funded by their expected gain per unit of tail risk, best first (a fractional knapsack). |
| Limit checks | Test the book as it stands after each trade: CVaR, VaR, volatility, factor exposures, the effective number of bets, days to liquidate, stress loss, drawdown state, restricted lists and borrow, and the house concentration limits. |
| Drawdown breakers | The kill switch as a state machine: an append-only record of breaker states, read by a pure function, so every state can be replayed from the record. |
| Containment | Checks once, when a policy is written, that every Book's limits sit inside the house limits. |
Self-honesty: are the risk models any good
| Engine | What it does |
|---|---|
| Backtesting | Tests the risk estimates against what happened: Kupiec (is the breach rate right?), Christoffersen (are the breaches independent?), the Basel traffic light, and the Acerbi-Székely test for expected shortfall. |
| Model confidence | Scores confidence in the risk models part by part. The overall score is the weakest part, and it can only tighten limits, never loosen them. |
Why the budget is counted in CVaR, not VaR
VaR is not subadditive: two positions can each look safe while together they breach, so a VaR budget can even be used up by a trade that diversifies. CVaR is subadditive and scales with position size, which is also what makes the split of risk across positions exact rather than approximate.
Two tail estimators, and each result says which
With at least 100 standardised residuals the tail engine uses filtered historical simulation; with fewer it falls back to a parametric estimate, and every result records which method produced it. The service it replaced computed value at risk five ways, including a hybrid that took the largest of four; one stated method is easier to test.
A risk budget, set in CVaR
Every change a Book proposes is measured before it is taken: the tail risk of the Book as it would stand afterwards, as one-day 95% conditional value at risk (CVaR), the average loss on the worst 5% of days. CVaR is used because it adds up across positions exactly, so each order's share of the budget is a measured fact rather than an allocation scheme.
The answer is arithmetic. If every limit fits, the change is allowed. If it is too large but can be scaled, it is resized, and the room that remains goes first to the orders the Book's own construction values most for each unit of risk. If a limit was already exceeded before the change, new risk is blocked. A block never stops a reduction: a Book can always cut risk.
When the risk model is less reliable, for example when it covers too little of the Book or its backtest fails, the budget shrinks. It never grows because the model is confident.
A regime overlay that can only tighten
A version of the house limits may attach a multiplier to each market regime, for position size, gross and net exposure, tail risk and liquidity. Every multiplier is at most 1, a rule the software's types enforce, so no regime reading can loosen a limit. A regime without a multiplier keeps the base limits.
A Book's own policy can do the same to its gross exposure target by volatility regime: it may scale the target down, never up.
Drawdown circuit breakers
Drawdown is measured from the Book's high-water mark, not from where it started. At a 10% fall the risk budget is scaled down. At 15% the Book takes no new risk. At 21% it takes no new risk either, and closes positions only if its policy says so. Reductions are allowed at every tier.
Escalation is immediate. Stepping back down happens one tier at a time, and only once the drawdown has fallen below half of the tier's level and at least three sessions have passed, so a Book does not flip in and out of a tier on small moves.
Exposure bounds and position caps
Gross exposure, long plus short as a share of the Book, has a target set by each Book's policy: 115% for Growth and 100% for Moderate and Conservative. It can never exceed 165%. Net exposure, long minus short, is bounded on both sides by the Book's policy and by the house limits.
No single position may be opened or increased above the Book's cap: 17% for Growth, 15% for Moderate and 14% for Conservative. A position that grows past its cap as its price rises may run up to a house drift ceiling, where a trim is ordered. One issuer's securities together are capped at 25% of the Book and one sector at 50%.
Stops on every position
A trailing stop follows each position's best price since entry at a distance set by the stock's own volatility, widened or narrowed within fixed bounds by how wide the position's forecast range is.
A maximum-loss stop closes a position whose loss reaches a limit fixed when it was opened. That distance is the position's unit of risk.
Once a position is a clear winner, a profit lock keeps at least half of its peak open profit. When the forecast no longer supports the position, the share kept rises to 70%, 80% and 85% as the peak reaches two, three and five units of risk.
A position that has gone nowhere for a set number of trading days is closed, to free its place.
Liquidity
A stock is eligible only if its median daily dollar volume over the last 30 days is at least $10 million. No order may exceed 5% of a stock's average daily dollar volume, and the whole Book must be possible to exit within five trading days at that rate.
Trading costs, charged on every fill
The spread is estimated for each stock from its daily prices, with the EDGE estimator of Ardia, Guidotti and Kroencke (2024). An estimate older than seven days is replaced by 5 basis points. The spread is capped at 60 basis points, and half of it is charged on each side of a trade. A commission of 0.5 basis points is added.
Market impact follows the Almgren-Chriss model: a temporary term that grows with the square root of the order's share of daily volume and a permanent term that grows in proportion to it, scaled by the stock's volatility and adjusted for market liquidity, so it is higher when markets are volatile or illiquid. Orders below 0.5% of a stock's daily volume are charged no impact.
The impact coefficients are fitted only from live fills. There are none yet, so the model's defaults apply: 0.10 for the temporary term and 0.05 for the permanent term.
How the limits themselves are governed
The house limits live in a versioned, dated limit book. An approved version cannot be edited; changing a limit means a new version, approved by someone other than its author, with a pre-registered hypothesis about what the change will do. Each version records the date from which it applies.
An exemption from a single limit expires within 30 days, cannot be approved by the person who asked for it, and is reported on every day it is used.
Every verdict is a pure function of its inputs, so any day can be replayed exactly. A Book whose policy is set to fail closed takes no new risk while the risk service cannot answer; each Book's page shows its setting.
Each Book's own limits and record
Opulence Alpha is non-custodial research software. The Books hold no client money. Nothing here is investment advice.