SANOS from zero
1/5Parametric models have a shape bias
Every parametric model — SVI, SABR, polynomial fits — begins by choosing a formula family. That family determines what shapes are possible before you look at a single market quote.
SVI has five parameters. That gives it five degrees of freedom to match the market smile. For liquid, well-behaved markets, five is usually enough. The smile is smooth, vaguely parabolic, and SVI nails it.
But markets are not always well-behaved. An earnings event, a protocol exploit, a regulatory headline — these can produce localized bumps in implied vol at specific strikes. A five-parameter curve cannot develop a bump at K=90 while staying flat everywhere else. It would have to warp the entire curve to accommodate one local feature.
SANOS takes the opposite approach. Instead of picking a formula family, it puts a value at every node in a grid and lets the data decide what shape the surface takes. The only requirements: it must be smooth, it must be arbitrage-free, and it must respect the observed bid-ask quotes.
SVI is like fitting a bendable template ruler to a set of points — the ruler can curve, but it cannot develop a kink. SANOS is like laying a flexible mesh over the points, where each intersection can move independently. The mesh can capture local features the ruler cannot.
The grid replaces the formula
In SANOS, the vol surface is defined by a grid of nodes: one value at each (strike, expiry) intersection. 9 strikes and 5 expiries gives you 45 free variables. Scale to 20 strikes and 5 expiries and you have 100.
Each node holds a total variance value (or equivalently, an implied vol). The surface between nodes is interpolated. The key difference from parametric models: there is no formula linking these values to each other. Each node is a free variable, constrained only by no-arbitrage and smoothness.
Below, the grid shows implied vol values across strikes and expiries. Notice the localized bump near K=90, T=0.25 — this is the kind of feature a parametric model would miss. The right panel shows the smile at a selected expiry, with the SVI best-fit overlaid for comparison.
Click any cell to adjust its vol. Watch how the SANOS smile (green) deviates from SVI (yellow dashed) wherever the grid captures local structure. SVI is forced to stay smooth globally; the grid can follow the data point by point.
SANOS: N_K × N_T nodes → local flexibility
No-arbitrage as linear constraints
With 100 free variables, you need guardrails. SANOS gets them from static no-arbitrage conditions, expressed as linear inequalities on the grid values.
Two key constraints:
Calendar spread constraint. Total variance (w =σ^2 × T) must be non-decreasing in T for each strike. If it decreased, you could sell a short-dated option and buy a longer-dated one at the same strike for a riskless profit. On the grid, this means each column must increase from top to bottom.
Butterfly spread constraint. Call prices must be convex in strike at each expiry. Equivalently, the second difference of total variance across adjacent strikes must be non-negative. This prevents negative probability density — a physical impossibility.
Both constraints are linear in the grid values. Calendar: w(K, T_2) ≥ w(K, T_1) for T_2 > T_1. Butterfly: w(K-1, T) - 2·w(K, T) + w(K+1, T) ≥ 0. No nonlinear terms, no complicated coupling. Just inequalities you can hand to a linear solver.
This is the deep advantage of working in total-variance space on a grid: the no-arbitrage conditions that would be nonlinear in implied vol become linear in total variance. The whole surface construction problem stays in the realm of linear programming.
Linear programming finds the answer
Collect all the pieces: node values as unknowns, bid-ask bounds as box constraints, no-arbitrage as linear inequalities, smoothness as the objective. The whole thing is a linear program.
An LP has a crucial property: no local minima. The feasible region is a convex polytope, and the optimum is always at a vertex. Unlike SVI calibration (which is nonlinear and can get stuck in local minima depending on initialization), the LP always finds the global optimum.
The bid-ask quotes define box constraints: at each observed strike, the total variance must lie between the bid-implied and ask-implied values. The tighter the spread, the smaller the box. The wider the spread, the more freedom SANOS has to find a smooth, arb-free surface.
Watch the feasible region (green) shrink as constraints are added. Positivity, calendar, butterfly, and bid-ask — each one carves away impossible surfaces. The LP solution (yellow dot) sits at a vertex of the final polytope. That vertex is guaranteed to be the smoothest arb-free surface consistent with all the data.
subject to: bid_i ≤ w_i ≤ ask_i (data)
w(K, T_2) ≥ w(K, T_1) (calendar)
w(K-1) - 2w(K) + w(K+1) ≥ 0 (butterfly)
When SANOS wins and when it doesn't
SANOS is not universally better than parametric models. It has a specific sweet spot, and knowing when to use it matters more than knowing how it works.
SANOS wins when:
Sparse data. When you have 5 quotes and need a full surface, parametric models struggle because there are not enough points to pin down the parameters. SANOS can build a surface from sparse data because the no-arbitrage constraints themselves provide information — they narrow the feasible set even without market quotes.
Wide bid-ask spreads. Parametric fits to mid-prices can produce arb-free surfaces that lie outside the bid-ask. SANOS treats the spread as a feature, not noise. The wider the spread, the more freedom to find a smooth, arb-free surface.
Local features. Event-driven vol bumps, kinks from concentrated positioning, expiry-specific effects. Any structure that a five-parameter formula cannot express.
Widen the spread slider and watch the SANOS fit (green) diverge from mid (orange dashed). Both pass through the bid-ask bars, but SANOS uses the extra freedom to stay smoother. When spreads are tight, the two fits converge.
SANOS loses when:
No dynamic interpretation. SVI parameters (a, b, rho, m, sigma) have economic meanings: overall variance, skew magnitude, correlation, displacement. SANOS nodes are just numbers on a grid. You lose the ability to say "skew increased by 0.02" — you can only say "these 20 nodes moved."
Storage and communication. An SVI surface is 5 numbers per expiry — trivially storable and transmittable. A SANOS surface is hundreds of node values. For databases, caches, and wire protocols, this matters.
Battle-tested track record. SVI has been used for 20+ years. SANOS is newer. In production systems where reliability and team familiarity matter, this is a real cost.
The practical pattern: use SANOS for fitting and pricing (where local accuracy matters), use SVI for storage and communication (where compactness matters). They complement each other.
Where to go next:
SVI Parameterization — the parametric model SANOS is designed to complement
SABR Model — a stochastic vol model with dynamic interpretation
Local Vol from zero — how the local vol surface is extracted from implied vol
Interpolation Methods — all methods compared