Skip to content

Liquidity-Adjusted VaR: Bid-Ask, Market Impact, and Time to Liquidate

Standard VaR assumes you can liquidate at mid, instantly, for free. All three assumptions are wrong. Adding spread, impact, and time back into the risk number gives you L-VaR.

7 of 12 ~13 min

Standard VaR makes three quiet assumptions: you can trade at the mid-price, your own order doesn’t move the market, and liquidation takes no time. In real markets all three fail. There is a bid-ask spread between what you can buy at and what you can sell at; selling a large position pushes the price down against you; and unwinding a hundred million dollars of a small-cap position takes days to weeks.

How much these assumptions cost depends on what you hold. In the daily trading-book VaR of a large bank, a 1% price move dwarfs a 0.05% bid-ask spread and the liquidity costs are noise. In a stressed corporate bond fund, or a concentrated position that takes days to unwind, liquidity costs dominate. Ignoring them understates the true cost of liquidation by anywhere from a few percent to the same order of magnitude as the price risk itself (Bangia, Diebold, Schuermann & Viswanath, 1999).

This article follows the three assumptions as they break, in order: first the bill for the spread, then the bill for impact, then the bill for time. Then it assembles the Liquidity-Adjusted VaR (L-VaR) — and explains why even that number needs a haircut under stress.

Where Standard VaR Lies to You

Recall the standard VaR definition:

VaRα(h)=FL−1(α),L=−ΔP, over horizon h\text{VaR}^\alpha(h) = F_L^{-1}(\alpha), \quad L = -\Delta P, \text{ over horizon } h

For a portfolio with mid-prices MtM_t and holdings qq, the change in mark-to-market P&L is

ΔPt=q⋅(Mt+h−Mt)\Delta P_t = q \cdot (M_{t+h} - M_t)

Standard VaR estimates the α\alpha-quantile of ΔPt\Delta P_t under the assumption that the position can be unwound at mid. In practice a long has to sell at the bid and a short has to buy at the ask; the cost of crossing half the spread is swallowed by the definition itself.

Size that swallowed cost and the picture is clear. For a liquid equity with a 5 bps spread, liquidation pays roughly 2.5 bps of half-spread; against a 1% daily VaR, that is 2.5% of the risk number — ignorable. For an illiquid corporate bond with a 1% spread, the half-spread cost is 0.5% of the position; against a 5% monthly VaR, that is already 10% of VaR. The same “ignore the spread” approximation is a rounding error on liquid equities and a tenth of the risk left off the books on illiquid credit.

Push that logic further and you can name the positions where standard VaR fails worst: small-cap equities, corporate bonds (distressed credits especially), derivative books that need to be unwound in size, concentrated single names that cannot be closed in a day, closed-end fund positions on the way out. What they share is wide spreads, thin volume, and size that is large relative to market depth. For these, standard VaR can understate liquidation cost by an order of magnitude.

The First Bill: The Half-Spread

The simplest liquidity adjustment just adds the swallowed cost back. For a position of size qq and bid-ask spread ss (in decimals, e.g., s=0.001s = 0.001 means a 10 bps spread), the expected spread cost is approximately q⋅s/2q \cdot s / 2. The Liquidity-Adjusted VaR of Bangia, Diebold, Schuermann & Viswanath (1999) is

L-VaRα=VaRα+q⋅s/2\text{L-VaR}^\alpha = \text{VaR}^\alpha + q \cdot s / 2

For a dollar-denominated multi-asset portfolio:

L-VaRα=VaRα+12∑i∣qi∣⋅si⋅Pi\text{L-VaR}^\alpha = \text{VaR}^\alpha + \frac{1}{2} \sum_i |q_i| \cdot s_i \cdot P_i

where sis_i is the spread of asset ii, PiP_i its price, and qiq_i the holding.

Note that the half-spread is the expected cost for an uninformed trader in normal markets. In stressed markets the realized cost can run 2-5x higher; in calm markets, lower. Bangia et al. themselves call this L-VaR a lower bound on the liquidity cost at that confidence level — it is a starting point, not the destination.

Run the numbers once. A $1M position in a stock with a 5 bps spread: half-spread cost is $1{,}000{,}000 \times 0.0005 / 2 = $250$. Daily VaR at 99% is $30,000 (3%). L-VaR is $30,250 — an adjustment under 1% of VaR. Now a $1M position in a corporate bond with a 100 bps spread: half-spread cost is $5,000. Monthly VaR is $50,000 (5%). L-VaR is $55,000 — liquidity is suddenly 10% of total risk. Same formula, different asset, and the answer moves from “ignore it” to “report it.”

But the half-spread only covers small orders. Once the position is too large to clear in a day, the real damage lives elsewhere.

The Second Bill: Market Impact

As you sell, the price moves against you. The standard empirical approximation for this cost is the square-root impact law:

Impact=η⋅σ⋅Q/V\text{Impact} = \eta \cdot \sigma \cdot \sqrt{Q / V}

where QQ is the number of shares to trade, VV is average daily volume, σ\sigma is daily volatility, and η\eta is a constant (typical values around 0.05-0.2). The square-root law comes from large-sample measurement of real executions (Bouchaud et al., 2018), not from any particular model; it says impact grows sublinearly in trade size — quadruple the volume, and impact only doubles.

The practical adjustment to VaR is direct:

MIVaRα=VaRα+η⋅σ⋅Q/V⋅q\text{MIVaR}^\alpha = \text{VaR}^\alpha + \eta \cdot \sigma \cdot \sqrt{Q/V} \cdot q

where qq is the dollar position. When this term matters is easiest to see across three size regimes. A $1M position in a stock with $50M average daily volume, σ=2%\sigma = 2\%, η=0.1\eta = 0.1: impact is 0.1 \cdot 0.02 \cdot \sqrt{0.02} \cdot 1\text{M} = 0.1 \cdot 0.02 \cdot 0.141 \cdot 1\text{M} \approx \282$— invisible next to a$30,000 VaR. The same $1M position against only $500K of daily volume (illiquid): impact is 0.1 \cdot 0.02 \cdot \sqrt{2} \cdot 1\text{M} \approx \2{,}828$— now you feel it. A$5M position against $500K daily volume — ten days of volume: impact is $0.1 \cdot 0.02 \cdot \sqrt{10} \cdot 5\text{M} \approx $31{,}623$, the same order of magnitude as the daily VaR itself. The half-spread is an additive nuisance; impact is a dollar cost that grows super-linearly in position size, and past a certain size it takes over the whole number.

The Third Bill: Time

Standard VaR pins the holding period hh. For a position too large to unwind within hh, the relevant quantity is how long it takes to clear position qq without exceeding an impact threshold. Define the “liquidation horizon”

T(q)=min⁡{t:Impact(q,t)≤threshold}T(q) = \min\{t : \text{Impact}(q, t) \le \text{threshold}\}

A common choice: T(q)T(q) is the time to liquidate at constant rate such that total impact stays below some threshold — often a fraction of the bid-ask spread, so that impact doesn’t dominate the round-trip cost.

To connect impact to time, you first have to separate two distinct impact models in the literature. They give different answers to the question “does trading slower help?”, and they must not be mixed.

The first is the linear impact model of Almgren & Chriss (2000): each share traded pays a linear temporary impact cost, so the total temporary impact is

ImpactAC(q,T)=η⋅q\text{Impact}^{\text{AC}}(q, T) = \eta \cdot q

independent of the liquidation horizon TT. Permanent impact is γq\gamma q per share, again TT-independent. Under linear impact the total cost is q(η+γ)q(\eta + \gamma) no matter how you spread the trading over time. This is the right model when per-trade costs scale proportionally with trade size, and it is the standard working assumption of optimal-execution theory.

The second is the Bouchaud square-root impact, the one actually observed empirically:

ImpactBouchaud(Q)=Y⋅σ⋅(QV)β\text{Impact}^{\text{Bouchaud}}(Q) = Y \cdot \sigma \cdot \left(\frac{Q}{V}\right)^{\beta}

with β≈0.5\beta \approx 0.5 in liquid markets, roughly 0.6 on average, and approaching 1 in illiquid markets (Bouchaud et al., 2018). What matters here is traded volume relative to market volume over the same window. Dump a full day of volume in one day (Q=VQ = V) and impact is about YσY\sigma; dump ten days’ worth and it is about Yσ10Y\sigma\sqrt{10}. But spread the position qq over TT days at q/Tq/T per day, and each day’s per-share impact is about Yσq/(TV)Y\sigma\sqrt{q/(TV)} — so the average per-share impact cost over the unwind is also about Yσq/(TV)Y\sigma\sqrt{q/(TV)}, which for fixed qq decreases as TT grows. Trading over more days saves impact cost, at the price of longer exposure to price moves. That is exactly the conclusion the linear model cannot deliver: in a linear world patience buys you nothing; in a square-root world it does.

For VaR purposes the relevant object is the total liquidation cost, not any single day’s impact. The two models disagree — pick one and don’t switch mid-calculation.

Putting It Together: L-VaR

All three bills are now on the table. A complete Liquidity-Adjusted VaR stacks them: standard VaR for the price-move component, the half-spread for the bid-ask component, market impact for the size component (Almgren-Chriss for the proportional case, Bouchaud for the sublinear one), and a liquidation horizon TT to pin down the time dimension. The common formulation is

L-VaRα(T)=VaRpriceα(T)+q⋅s2+q⋅Impact(q,T)\text{L-VaR}^\alpha(T) = \text{VaR}^\alpha_{\text{price}}(T) + q \cdot \frac{s}{2} + q \cdot \text{Impact}(q, T)

where VaRpriceα(T)\text{VaR}^\alpha_{\text{price}}(T) is the standard price-move VaR over the liquidation horizon TT and the impact term counts as a positive cost. TT is chosen as the minimum that keeps impact below a threshold (say 50% of the spread), balanced against the price-move VaR that grows with horizon.

You don’t have to pick TT by fiat — it can be solved from an optimization. Almgren & Chriss (2000), in a mean-variance framework with risk-aversion parameter λ\lambda, trade off impact cost against price risk over the unwind and obtain an optimal liquidation timescale

T∗=ηλσ2T^* = \sqrt{\frac{\eta}{\lambda \sigma^2}}

where η\eta is the temporary-impact coefficient. The permanent-impact coefficient γ\gamma does not appear: under linear permanent impact its total cost is independent of the execution schedule, so it gets no vote on fast versus slow. The total expected cost has two parts — an impact cost you pay no matter how you execute, and a risk-aversion-weighted price-risk term — and T∗T^* is where they balance. As λ→∞\lambda \to \infty (high risk aversion), T∗→0T^* \to 0: you pay any impact cost to get out now. As λ→0\lambda \to 0, T∗→∞T^* \to \infty: you grind it out slowly. Note this lives in the linear-impact regime of Almgren-Chriss, not the square-root regime. For risk management (as opposed to execution), you typically use a higher λ\lambda than an execution desk would, hence a shorter T∗T^*.

In code, a toy L-VaR looks like this:

import numpy as np

# Toy L-VaR calculation
def l_var(price_var, position_size, spread, daily_vol,
          adv, eta=0.1):
    """
    price_var: standard VaR in dollars
    position_size: dollar position
    spread: bid-ask in decimals (e.g., 0.001 = 10 bps)
    daily_vol: position daily vol (decimals)
    adv: average daily volume (dollars)
    eta: market impact coefficient
    """
    half_spread = position_size * spread / 2
    market_impact = eta * daily_vol * np.sqrt(position_size / adv) * position_size
    # Note: impact as fraction of position ~ eta * daily_vol * sqrt(Q/ADV)
    # Total impact in dollars = position_size * eta * daily_vol * sqrt(Q/ADV)
    return price_var + half_spread + market_impact

# Examples
print("Equity (liquid):", l_var(30_000, 1_000_000, 0.0005, 0.02, 50_000_000))
print("Equity (small-cap):", l_var(30_000, 1_000_000, 0.005, 0.03, 5_000_000))
print("Corp Bond (illiquid):", l_var(50_000, 1_000_000, 0.01, 0.02, 500_000))

The outputs tell the story themselves. Liquid equity: $250 of half-spread plus about $283 of impact — under 2% of VaR, an L-VaR of roughly $30,533, barely distinguishable from standard VaR. Small-cap: $2,500 of half-spread plus about $1,342 of impact, roughly $3,800 total, around 13% of VaR. Illiquid bond ($500K ADV): $5,000 of half-spread plus about $2,828 of impact, roughly $7,800 or 16% of VaR — and that is at a $1M position; scale it to $5M as in the previous section and the impact term alone rivals the VaR itself.

The ES Version

The same three-term sum carries over to Expected Shortfall:

L-ESα=ESpriceα(T)+q⋅s2+q⋅Impact(q,T)\text{L-ES}^\alpha = \text{ES}^\alpha_{\text{price}}(T) + q \cdot \frac{s}{2} + q \cdot \text{Impact}(q, T)

But the additive form is an approximation — strictly, the three components are not independent, and in a genuine crisis all three spike together. A multiplicative correction is more conservative:

L-ESα=ESpriceα(T)⋅(1+liq premium)\text{L-ES}^\alpha = \text{ES}^\alpha_{\text{price}}(T) \cdot (1 + \text{liq premium})

with the liquidity premium calibrated to historical stress events. During 2008, liquidity premia in credit markets reached 30-100%; multiplying ES by 2 often lands closer to the stressed truth than adding a half-spread does.

Choosing the Horizon TT

TT has shown up everywhere above, and its choice is a policy decision, not a theorem. In practice there are three routes.

The lazy route sets TT equal to the standard VaR horizon: for daily VaR, T=1T = 1, assuming a one-day unwind. That assumption draws an implicit line on position size — one day of average daily volume. Beyond 1-day ADV, a one-day liquidation necessarily generates real impact and this route stops working; you need a longer horizon.

The second route works backwards from price risk: a 1-week (5-day) VaR is roughly 5\sqrt{5} times the 1-day VaR under iid assumptions, larger with autocorrelation, and a 1-month VaR is much bigger still. Pick the horizon at which price-move VaR is commensurate with the realized cost of liquidation.

The third route is the optimal horizon derived above, T∗=η/(λσ2)T^* = \sqrt{\eta/(\lambda\sigma^2)}: higher risk aversion or higher volatility shortens T∗T^*, lower lengthens it. Most banks and asset managers take this route with a moderate λ\lambda, calibrated to avoid both extremes — too fast (impact dominates) and too slow (price moves dominate).

Where the Inputs Come From

Every input to L-VaR is market microstructure data with its own source. Bid-ask spreads: exchange feeds for listed instruments, dealer quotes for OTC; for corporate bonds, FINRA’s TRACE gives post-trade data, and pre-trade spreads can be inferred from dealer quotes. Average daily volume: exchange data for listed names, DTCC aggregates for OTC bonds. Daily volatility: historical price series, typically 60- or 120-day rolling estimates. The impact coefficient η\eta: calibrated from execution cost studies; many broker-dealers publish theirs.

The genuine problem is illiquid instruments with no recent trades — no spread, no volume, nothing to estimate from. The conservative move is to take the largest plausible spread and the smallest plausible volume and compute a worst-case liquidity cost. Better an ugly number than a missing one.

Under Stress, Every Input Moves

The whole calculation above shares one soft spot: spreads, volumes, and impact coefficients are all estimated from history, and liquidity is precisely the thing that disappears when you need it. Three classic cases follow the same script.

LTCM in 1998 held large positions in illiquid instruments. During the Russian crisis, bid-ask spreads in mortgage-backed securities went from 25 bps to over 200 bps — a factor of 8 on the spread alone. A VaR built on calm-period spreads was wildly wrong for those positions. In the 2008 credit crisis, cash investment-grade bonds moved from 50-100 bps of spread in early 2007 to 200-500 bps in late 2008, while many VaR models still assumed 50; liquidity-adjusted VaR with time-varying spread estimates did visibly better. In the flash crashes (2010, 2015, and others), multi-name market impact ran 5-10x normal during short-vol bursts, and models calibrated on long-run history missed the spikes entirely.

The lesson is a single one: liquidity costs are time-varying, and the variation almost always runs against you under stress. Models that treat the spread as constant are systematically wrong in the tails — and the tails are the only reason VaR exists.

The robust practice is therefore to stress liquidity itself: double or triple the spread (L-VaR scales linearly with it); cut volume to 10-25% of normal (impact scales inversely with V\sqrt{V}); then stack the concurrent stress — spread up 3x, volume down 4x, price-move VaR at 99.9% instead of 99% — and the combined effect can be 5-10x the calm-period L-VaR. Most banks carry a “stressed L-VaR” requirement analogous to stressed VaR: recompute the number under the worst historical spreads and volumes.

If you run L-VaR, run it with stressed inputs. If you run only standard VaR, at least know this: your number assumes a frictionless market, and that market does not exist.

References

Almgren, R., & Chriss, N. (2000). Optimal execution of portfolio transactions. Journal of Risk, 3(2), 5-39.

Bangia, A., Diebold, F. X., Schuermann, T., & Viswanath, P. L. (1999). Modeling liquidity risk, with implications for traditional market risk measurement and management. Working paper, Wharton.

Bouchaud, J.-P., Bonart, J., Donier, J., & Gould, M. (2018). Trades, Quotes and Prices: Financial Markets Under the Microscope. Cambridge University Press.

Gârleanu, N., & Pedersen, L. H. (2013). Dynamic trading with predictable returns and transaction costs. Journal of Finance, 68(6), 2309-2340.

McNeil, A. J., Frey, R., & Embrechts, P. (2005). Quantitative Risk Management. Princeton University Press.

Pastor, L., & Stambaugh, R. F. (2003). Liquidity risk and expected stock returns. Journal of Political Economy, 111(3), 642-685.