---
title: "Improving Our Exposure Model With Implied Volatility Surfaces - Estimation and Smoothing"
date: "2025-12-03"
excerpt: "We’ve implemented one of the final pieces missing in VannaCharm’s open interest-based dealer exposure model."
author: "Chris"
tags: ["options", "exposure", "volatility", "black-scholes"]
draft: false
---

_If you’re interested in the more technical (code-based) breakdown of this change, check out the post on_ [_Day 2 of Full Stack Craft’s 12 Days of Full Stack Dev_](https://fullstackcraft.com/blog/the-12-days-of-full-stack-dev-day-2/) _series._

This builds upon [the success of our viral post on Gamma, Vanna, and Charm exposures](https://medium.com/option-screener/so-youve-heard-about-gamma-exposure-gex-but-what-about-vanna-and-charm-exposures-47ed9109d26a), which spurred the creation of this entire tool. Essentially, the formulas written in that post were — until today — the key underlying formulas used for our exposure calculations here on VannaCharm.

**This new IV estimation and smoothing method is now live and baked into the values you see on the [dashboard](https://vannacharm.com/dashboard).**

However, back when I wrote that post, I failed to recognize at the time that, under the hood, **I was using a fixed volatility (the volatility of the underlying itself) for the Greek calculations at all strikes.** This is the default assumption made by the Black-Scholes model, but it is not the case in reality. In reality, both put and call options have an implied volatility (IV) smile or smirk — higher IV as you get further away from the underlying spot price.

Updating our exposures to use per expiry / per strike IVs most directly affects the vanna exposure since IV is a key component of that calculation; however, we also benefit from the fact that gamma and charm are products of the Black Scholes model itself and therefore also are somewhat affected by a dynamic IV at each strike.

Let’s get into how we can include an entire volatility surface into our dealer exposure calculations, including a smoothing function.

## Implied Volatility Surface

As many know, the IV of a given options chain typically has a volatility ‘smirk’ or ‘smile’, with the lowest part of the smile right at the current underlying spot — strikes above and below have a higher IV than strikes directly at the money.

To back-calculate the IV of a given option contract, we essentially provide every value into the Black Scholes formula _except_ volatility. For VannaCharm, we use a bisection search to tweak volatility until the price produced by Black-Scholes matches its current market-reported price.

## Smoothing Algorithm

Now, to improve our IV estimate even further, and especially since exposures look at a _range_ of strikes near the money, we can use a smoothing algorithm to smooth the IVs into a nice smooth IV curve, since instantaneous option chain data is never perfect — bid-ask spreads, stale quotes, and illiquid strikes all introduce artifacts in a potentially “perfect” IV surface. To get a cleaner surface, we currently apply smoothing based on **total variance** rather than directly on IV.

## Why Total Variance?

Total variance `w = σ² * T` has better mathematical properties for smoothing:

- It’s directly related to option value
- Smoother across strikes (in theory)
- Ensures convexity (important for no-arbitrage)

## The Smoothing Process

With a bit of iteration and testing, we’ve settled on the following process currently, which seems to provide decent results:

1.  Convert to total variance as mentioned above
2.  Use a cubic spline interpolation to fit a curve through all the variance points
3.  Enforce convexity with the convex hull algorithm
4.  Convert these values back to IV space

## Thanks for Reading!

I hope you found this interesting and useful! Until next time, good luck out there in these crazy markets!

-Chris & The VannaCharm Team