Interactive exploration of liquidity trading risk, bid-ask spreads, and liquidity-adjusted VaR
Liquidity trading risk is the risk that unwinding a position costs more than expected due to the gap between buying and selling prices — the bid-ask spread (see Hull 2023, chap. 21). Even if an asset’s mid-market value is known, the actual proceeds from selling (or cost of buying) depend on the spread at the time of the trade. This risk depends on the size of the position, the speed at which it must be liquidated, and market conditions at the time.
A firm may be solvent — its assets exceed its liabilities at mid-market prices — yet still face losses when forced to liquidate positions quickly, because it must trade at bid or ask prices rather than at mid-market.
The bid-ask spread
Every traded instrument has a bid price (the price at which a dealer will buy) and an ask price (the price at which a dealer will sell). The gap between them is the bid-ask spread:
where \(\text{mid} = (\text{ask} + \text{bid}) / 2\) is the mid-market price. When a firm sells an asset, it receives the bid price, which is below the mid-market price by approximately half the spread. Similarly, buying costs approximately half the spread above mid-market. Therefore, the cost of liquidating a position with mid-market value \(\alpha_i\) and proportional spread \(s_i\) is:
where \(s_i\) is the proportional bid-ask spread and \(\alpha_i\) is the mid-market value of position \(i\). Note that diversification reduces market risk but does not necessarily reduce liquidity cost — each position incurs its own spread cost regardless of correlations between asset returns.
Stressed market conditions
Bid-ask spreads are not constant — they widen during periods of market stress. To account for this uncertainty, we model the proportional spread \(s_i\) as a random variable with mean \(\mu_i\) and standard deviation \(\sigma_i\). Under the assumption that spread movements are perfectly correlated across instruments (a worst-case scenario), the stressed liquidation cost at confidence level \(c\) is:
where \(\lambda = N^{-1}(c)\) is the inverse of the standard normal cumulative distribution function evaluated at confidence level \(c\).
Note
Why assume perfect correlation?
The assumption that all bid-ask spreads widen simultaneously is conservative: in a liquidity crisis, spreads tend to blow out together as market makers withdraw. This perfect-correlation assumption means we simply add the worst-case individual spread costs, rather than diversifying them. If spreads were independent, the stressed cost would be lower — but the whole point of stress testing is to capture the scenario where everything goes wrong at once.
Liquidity-adjusted VaR
Standard Value-at-Risk (VaR) measures the worst-case mark-to-market loss at a given confidence level over a given horizon. But it assumes positions can be unwound at mid-market prices. Liquidity-adjusted VaR (L-VaR) adds the cost of actually liquidating the portfolio:
The first version uses observed spreads; the second accounts for spread uncertainty at the same confidence level used for VaR itself. L-VaR is always greater than or equal to VaR, since liquidation costs are non-negative.
Interactive exploration
Adjust the parameters below to explore how position sizes, bid-ask spreads, and spread volatility affect liquidation costs and liquidity-adjusted VaR. Position A represents a liquid instrument (e.g., a large-cap equity), while Position B represents a less liquid one (e.g., a corporate bond).
Tip
How to experiment
Change position values to see how portfolio size affects liquidation costs.
Adjust the mean spreads to compare liquid vs illiquid instruments.
Increase spread standard deviations to see how spread uncertainty inflates stressed costs.
Move the confidence level to observe how \(\lambda\) changes the stressed market scenario.
Note that setting spread std. dev. to 0 makes stressed costs equal normal costs.
Portfolio positions
viewof alphaA = Inputs.range([0,100], {label:"Position A value ($ M)",step:1,value:20})
viewof alphaB = Inputs.range([0,100], {label:"Position B value ($ M)",step:1,value:15})
Bid-ask spread parameters
viewof muA = Inputs.range([0.1,10], {label:"Mean proportional spread A (%)",step:0.1,value:0.5})
viewof sigmaA = Inputs.range([0,5], {label:"Spread std. dev. A (%)",step:0.1,value:0.3})
viewof muB = Inputs.range([0.1,10], {label:"Mean proportional spread B (%)",step:0.1,value:2.0})
viewof sigmaB = Inputs.range([0,5], {label:"Spread std. dev. B (%)",step:0.1,value:1.5})
The normal market liquidation cost represents the expense of unwinding positions at current bid-ask spreads. This is half the proportional spread times the position value for each instrument.
The stressed cost assumes that bid-ask spreads for all instruments widen simultaneously (perfect correlation). This means the total stressed cost is simply the sum of individual stressed costs — no diversification benefit. This is a conservative assumption appropriate for stress scenarios.
Liquidity-adjusted VaR is always at least as large as standard VaR. The difference captures the additional cost of actually liquidating the portfolio rather than simply marking it to market. In stressed markets, where spreads widen, the liquidity component can become a significant fraction of total risk.
References
Hull, John. 2023. Risk Management and Financial Institutions. 6th ed. New Jersey: John Wiley & Sons.