Skip to content
All library documents

Building a Target Implied Volatility Surface from Spot Data and Proxy Options

Article Quant Q&A · Author: Mamadou Lamarana Diallo

Summary

The discussion considers how to estimate an option implied volatility surface when the target asset has spot history but no option data, while related assets have observable option surfaces. It presents break-even volatility, or fair skew, as a way to infer a physical-measure skew from historical spot prices, then apply a scaling adjustment toward the risk-neutral measure. Another suggested workflow is to rescale a proxy’s at-the-forward volatility using a realized volatility ratio and adjust skew or curvature when warranted.

A response challenges selecting a proxy by return correlation, cointegration, and realized volatility alone. A stochastic-volatility example shows that assets can pass those screens and match at the money while having materially different skews and wings when their spot-volatility leverage differs. The proposed alternative is to estimate level, leverage, volatility of volatility, persistence, and return moments from the target’s own history, using the proxy mainly to inform the physical-to-risk-neutral adjustment. These are model-based approximations: spot data cannot identify the variance risk premium, and a proxy surface may not transfer reliably.

Key ideas

  • Break-even volatility methods use historical spot prices to estimate a physical-measure skew without option quotes.
  • Correlation and cointegration do not establish that two assets have similar volatility surfaces.
  • Matching realized volatility can inform the at-the-money level but does not determine skew, curvature, or term structure.
  • The spot-volatility leverage effect is a key quantity for assessing whether a proxy’s skew resembles the target’s.
  • A target’s spot history can inform surface shape, while a proxy may help estimate the physical-to-risk-neutral adjustment.

Tags

Full text
# Proxy Volatility


# Proxy Volatility












I have a target underlying asset for pricing, but I only have the spot price for it. I’m looking for proxies for which I have the spot price, forward price, and implied volatility. I already have a mechanism that allows me to select the proxy based on correlation, cointegration, and return volatility! Now, I’d like to construct the implied volatility of my target underlying asset! Do you have any recommended methods or books? Did my selection metrics convince you?

## Answer by Frido (score 2)

https://quant.stackexchange.com/a/85786

One of my favourite methods is using "Break even volatilities" aka "Fair skews". Search for these terms and also the paper/presentation by Dupire on the topic.

This method works using only historical spot prices, it doesn't need IVs or other option related data.

The idea is to find the break-even delta hedging volatility using these historical prices. Hence the skews are "P-measure skews" (as opposed to Q-measure skews). But they do give a very good idea of how the skew should look like were options traded. You can then apply your own scaling to go from P to Q.

Below an example of Break even skews for the coin XRP for options of various tenors. The x-axis is moneyness (K/S).

## Answer by almost_surely_ (score 1)

https://quant.stackexchange.com/a/85808

Chris and Quantuple are right in the comments: without option prices there is no implied volatility to extract, only a modelling choice about what to assume. Frido's break-even volatilities and user93883's ATF rescaling both answer how to make that choice.

But you asked a second question that nobody has addressed — "did my selection metrics convince you?" — and the answer is no. Correlation, cointegration and return volatility are the wrong screen, and the reason is structural rather than a matter of degree.

### The object you're selecting is not the one you're measuring

You are not looking for an asset that moves like your target. You are looking for an asset whose volatility process looks like your target's. Those are different objects, and your three metrics all measure the first one.

Correlation is scale-invariant, so it carries exactly zero information about volatility level. $\text{corr}(X, 2X) = 1$. A proxy with $\rho = 0.99$ can have twice your target's vol and the correlation screen will rank it top. Correlation is normalised by both standard deviations — the magnitude is divided out by construction. It tells you about direction of co-movement, which is what you need for hedging, not for borrowing a surface.

Cointegration is a statement about drift, and drift is exactly what pricing discards. Cointegration says a linear combination of the levels is mean-reverting — a long-run $\mathbb{P}$-measure equilibrium. Under $\mathbb{Q}$ the drift of every traded asset is pinned at $r-q$ by no-arbitrage, whatever equilibrium relationship holds in the real world. So the metric that looks most sophisticated is the one most orthogonal to the object you want.

It's worse than uninformative in the ratio case. Take $A$, $B$ traded, and use $B$ as numeraire: $A_t/B_t$ is a $\mathbb{Q}^B$-martingale, so $\operatorname{Var}(A_t/B_t) = \operatorname{Var}(A_0/B_0) + \mathbb{E}[\langle A/B\rangle_t]$, which is non-decreasing. Stationarity requires constant variance, forcing $\langle A/B \rangle \equiv 0$ and $A/B$ constant. A stationary ratio between two traded assets is inconsistent with no-arbitrage under $\mathbb{Q}$. For a general cointegrating vector on log prices the argument is looser, but the economic content is the same.

Cointegration is a reasonable sanity screen — it tells you two names are economically the same kind of thing. Just don't mistake it for a volatility metric. (It does matter directly if you're pricing spread or basket options on the pair, where the joint law is the payoff. Not your case.)

Realized volatility is the only one pointing the right way, and it pins the ATM level only. Nothing about skew, convexity, or term structure. And it's a $\mathbb{P}$ measurement standing in for a $\mathbb{Q}$ quantity — see the variance risk premium point below.

### What that costs you, quantitatively

Two Heston assets. Identical $v_0, \kappa, \theta, \xi$. Spot Brownians driven by a 95% shared factor, vol processes correlated. The only difference is the leverage effect: $\rho_{sv} = -0.7$ for the target, $-0.1$ for the proxy. Both plausible real names; neither is a pathological construction.

Your three screens:

| metric | value | verdict |
| return correlation | 0.873 | passes |
| realized vol (target vs proxy) | 0.2001 vs 0.2000, ratio 1.0003 | passes |
| cointegration | 95% shared driving factor | passes any screen |

The resulting surfaces, $T=1$, forward $=100$:

| strike | target IV | proxy IV | error (vol pts) |
| 80 | 0.2297 | 0.2043 | −2.54 |
| 90 | 0.2042 | 0.1921 | −1.20 |
| 100 | 0.1803 | 0.1857 | +0.54 |
| 110 | 0.1595 | 0.1861 | +2.67 |
| 120 | 0.1455 | 0.1916 | +4.61 |

ATM is fine — 0.54 vol points, well inside anyone's tolerance. The 90–110 skew is $+0.2236$ for the target and $+0.0300$ for the proxy: the proxy captures 13% of the skew. Wings are wrong by 2.5 to 4.6 vol points in opposite directions, which for anything OTM is not a calibration error, it's a different trade.

Your screen cannot see this, because every quantity it measures is essentially identical between the two assets. Push the proxy's leverage to $+0.7$ and the skews come out with opposite signs while correlation stays above 0.8.

### What to select on instead

The good news: you have spot prices for the target, and every parameter that shapes the surface is estimable from spot alone. In a stochastic-vol parametrisation the surface is governed, to leading order, by level ($v_0, \theta$), skew ($\rho\nu$), convexity ($\nu^2$) and term structure ($\kappa$). So screen on the target's own spot history:

| what you match | estimator from spot | shapes |
| vol level | realized vol | ATM |
| leverage effect | $\text{corr}(r_t,\ \Delta\log\hat\sigma_t)$ on rolling realized vol | skew — the one you're missing |
| vol-of-vol | vol of rolling realized vol | smile convexity |
| vol persistence | autocorrelation of realized vol | term structure of skew |
| return skewness | third moment of returns | skew (model-free check) |
| return kurtosis | fourth moment | convexity (model-free check) |

The leverage-effect correlation is the single highest-value addition, and it's about four lines of code. It is precisely what separated target from proxy above while every one of your metrics stayed blind.

### The one thing spot cannot give you

The variance risk premium. Implied vol is $\mathbb{Q}$; realized is $\mathbb{P}$; the wedge between them is a risk premium that varies systematically by asset class — large and persistent for equity indices, smaller for single names, unstable for crypto. Match realized vol perfectly and you still inherit the proxy's VRP, which may be nothing like your target's.

This is the part where the proxy genuinely earns its keep, and it argues for a specific division of labour: use the target's own spot history for shape (level, skew, convexity, term structure), and use the proxy only for the $\mathbb{P}\to\mathbb{Q}$ adjustment. That is close to what Frido is doing — break-even volatilities give you a $\mathbb{P}$-measure skew from the target's own prices, then you scale to $\mathbb{Q}$. His method sidesteps the selection problem for shape entirely, which is why I'd put it ahead of borrowing a surface wholesale. Your proxy then carries one scalar-ish adjustment instead of the whole surface, and a bad proxy costs you a level error rather than an inverted skew.

### Reproducing the table

```
import numpy as np
from scipy.stats import norm
from scipy.optimize import brentq

S0, v0, kap, th, xi, T = 100., 0.04, 2.0, 0.04, 0.5, 1.0
N, M, dt = 252, 150_000, 1/252
a, b = np.sqrt(0.95), np.sqrt(0.90)      # shared spot factor / shared vol factor

def run(rhoA, rhoB, seed=7):
    rng = np.random.default_rng(seed)
    la = lb = np.full(M, np.log(S0)); va = vb = np.full(M, v0)
    sAA = sBB = sAB = 0.0
    for _ in range(N):
        Z0,Z1,Z2,Y0,Y1,Y2 = (rng.standard_normal(M) for _ in range(6))
        W1A = a*Z0 + np.sqrt(1-a*a)*Z1;  W1B = a*Z0 + np.sqrt(1-a*a)*Z2
        eA  = b*Y0 + np.sqrt(1-b*b)*Y1;  eB  = b*Y0 + np.sqrt(1-b*b)*Y2
        W2A = rhoA*W1A + np.sqrt(1-rhoA**2)*eA
        W2B = rhoB*W1B + np.sqrt(1-rhoB**2)*eB
        vpa, vpb = np.maximum(va,0.), np.maximum(vb,0.)
        da = -0.5*vpa*dt + np.sqrt(vpa*dt)*W1A
        db = -0.5*vpb*dt + np.sqrt(vpb*dt)*W1B
        la, lb = la+da, lb+db
        va = va + kap*(th-vpa)*dt + xi*np.sqrt(vpa*dt)*W2A
        vb = vb + kap*(th-vpb)*dt + xi*np.sqrt(vpb*dt)*W2B
        sAA += (da*da).sum(); sBB += (db*db).sum(); sAB += (da*db).sum()
    return np.exp(la), np.exp(lb), sAB/np.sqrt(sAA*sBB), np.sqrt(sAA/(N*M)*252)

def iv(ST, K):
    def bs(s):
        d1 = (np.log(S0/K)+0.5*s*s*T)/(s*np.sqrt(T))
        return S0*norm.cdf(d1) - K*norm.cdf(d1-s*np.sqrt(T))
    return brentq(lambda s: bs(s)-np.mean(np.maximum(ST-K,0.)), 1e-4, 3.0)

A, B, corr, rv = run(-0.7, -0.1)
print(f"correlation {corr:.3f}   realized vol {rv:.4f}")
for K in (80, 90, 100, 110, 120):
    print(f"{K}  target {iv(A,K):.4f}   proxy {iv(B,K):.4f}")
```

Run it with your own candidate pair's estimated parameters before you trust a proxy. If the leverage effects differ by more than about 0.2, the ATM will match and the wings will not.

### References

- B. Dupire, Fair Skew / break-even volatility — the route Frido points to, and the one I'd default to.

- P. Carr, L. Wu, Variance Risk Premiums, Review of Financial Studies 22(3), 2009 — the $\mathbb{P}\to\mathbb{Q}$ wedge and how much it varies by underlying.

- P. Hagan, D. Kumar, A. Lesniewski, D. Woodward, Managing Smile Risk, Wilmott, 2002 — the explicit map from $\rho,\nu$ to skew and convexity, which is what makes the selection criteria concrete.

- J.-P. Bouchaud, A. Matacz, M. Potters, Leverage Effect in Financial Markets, Physical Review Letters 87, 2001 — estimating the leverage effect from spot alone.

- J. Gatheral, The Volatility Surface, Wiley, 2006, ch. 3–4 — which surface features are governed by which dynamics.

## Answer by user93883 (score 0)

https://quant.stackexchange.com/a/85783

It’s a pretty common workflow. Our clients face this problem when pricing and risk managing options on less liquid indices, stocks, or crypto. If your vol surface is parametrized in dimensionless variables (e.g., ATF vol times the shape function as a function of normalized strike, like in Vola Dynamics), all you have to do is rescale the ATF vols by a conservative estimate of the ratio of the realized vols. One can also shift skew or curvature if one believes the target name has a more skewed or fat-tailed distribution.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.