Volatility Surface Calibration and Option Pricing Under Regime, Repair, and Numerical Constraints

A governed research and batch-pricing system for listed European and American options. This page presents the main mathematical choices, implementation, empirical findings, and limitations; the linked technical note contains the complete record.

The calibration is one part of the model

The project began as an implied-volatility fitting exercise. It became a study of the full chain of conditional decisions that determine a quoted surface and a theoretical price: carry, contract family, inversion, objective geometry, repair, exercise style, numerical resolution, and benchmark design.

6assets
8August 2025 dates
48asset-date contexts
2,400valid prices
Governed pipeline from saved option inputs to surfaces, prices, signals, and evidence
Technical report Figure 1. The research branch can challenge policy, but it does not silently change the canonical path.

Completed scope

Research and controlled batch pricing

Deterministic manifests, style-aware prices, surface diagnostics, matched early-exercise premiums, signal features, alerts, and claim-linked evidence.

Outside scope

Live trading and unattended risk

No live ingestion, execution, transaction-cost backtest, independent long-history validation, service-level guarantee, or claim of executable mispricing.

Economic coordinates before surface parameters

European index carry is estimated expiry by expiry from put-call parity. American equity and ETF carry uses the zero curve and a projected cash-dividend schedule. The release bundle excludes licensed quote chains and credentials; synthetic workflows and sanitized aggregate evidence remain reproducible.

Parity identityC - P = D(T)[F(T) - K]
Implied forwardF(T) = K + [C - P] / D(T)
Surface coordinatesk = log(K/F),   w = σ2T

Contract families are classified before calibration on settlement, root class, and expiry archetype. This prevents a dense or well-behaved family from masking a tail in a different convention.

Taxonomy of standard monthly, explicit month-end, quarter-end, and nonstandard weekly option contracts
Technical report Figure 2. Classification is an input to calibration, not a label added after scoring.
Atomic familySettlementExpiry archetypeCanonical surface
monthly_am_standardAM / standard rootStandard monthlyRepaired grid
monthly_pm_standardPM / weekly rootStandard monthlyRepaired grid
weekly_pm_nonstandardPM / weekly rootNonstandard weeklyRepaired grid + guarded refinement
eom_pmPM / weekly rootExplicit month-endRepaired grid
quarter_end_pmPM / weekly rootExplicit quarter-endRepaired grid
pooledMixedReporting unionNo calibration
Known limitation. The core classifier uses explicit vendor fields and a weekday month-end test. A production contract master should add exchange calendars and authoritative settlement metadata.

Bracketed inversion and price-aligned weights

Implied volatility is solved as a monotone price root with explicit economic bounds and failure states. The initial bracket is [10-6, 3], with guarded expansion to 5 and 8, Brent tolerance 10-8, and an 80-iteration limit. Lattice inversion searches for the lowest valid model point when very small volatility makes the risk-neutral probability invalid.

# src/volsurf/core/implied_vol.py
root, details = brentq(
    objective,
    effective_low,
    high,
    xtol=tolerance,
    rtol=max(4.0 * math.ulp(1.0), tolerance),
    maxiter=max_iterations,
    full_output=True,
    disp=False,
)
Raw SVI slicew(k) = a + b{ρ(k - m) + √[(k - m)2 + σ2]}
Price-to-variance Jacobiandw/dP = 2σT / Vega
Observation weightωi ∝ [Vegai / (2σiT hi)]2

Raw SVI is fitted by bounded, deterministic multi-start L-BFGS-B in total variance. The Jacobian converts quote-price half-spread into local total-variance uncertainty. It aligns the objective with price sensitivity, but does not guarantee a globally arbitrage-free surface or remove model misspecification.

Price-space sensitivity and Jacobian-consistent total-variance weight across log-moneyness
Technical report Figure 3. Price sensitivity and the induced total-variance weight.
NDX observed implied volatilities and calibrated raw-SVI smiles by expiry
NDX slice fits. Quote observations and fitted smiles remain distinct from the later grid-repair step.

Calibration and repair are separate operations

The fitted slices are evaluated on a regular (T, k) grid. Calendar repair applies least-squares isotonic projection down each maturity column. Strike rows are then adjusted by constrained SLSQP until the discrete butterfly diagnostic satisfies its configured tolerance. Raw and repaired outputs are both retained.

Calendar conditionw(Ti+1, k) ≥ w(Ti, k)
Repair objectiveminimize Σ[(w* - w) / scale]2, subject to grid constraints
Heatmaps of input total variance, projected total variance, and repair adjustment
Technical report Figure 4. The intervention is visible and measurable; it is not folded into the calibration score.
# src/volsurf/surfaces/repair.py
for column in range(grid.shape[1]):
    original = grid[:, column]
    projected = isotonic_increasing(original)
    changed += int(np.sum(
        np.abs(projected - original) > 1.0e-14
    ))
    grid[:, column] = projected

result = minimize(
    objective,
    np.maximum(row, variance_floor),
    method="SLSQP",
    bounds=[(variance_floor, None)] * row.size,
    constraints=constraints,
)
NDX implied-volatility surface
European index surface in maturity and forward log-moneyness.
AAPL repaired implied-volatility surface
American equity research surface after the same explicit repair layer.
Fair-comparison rule. A repaired incumbent and an unrepaired challenger do not isolate the surface model. Candidate comparisons use matched repair treatment, common contexts, and disclosed support.

Paired contexts, exact support, and tail behavior

Average quote-level RMSE was not a sufficient promotion rule. A dense chain could dominate an aggregate, a deployment basket could reuse calibration observations, and a favorable family could offset a severe adverse date. The benchmark was rebuilt around family-date contexts and predeclared policies.

01Repair symmetry

Apply the same post-fit operator before attributing a difference to the surface family.

02Paired common contexts

Compare only contexts present on both sides; report support loss rather than silently dropping failures.

03Atomic family unit

Summarize quotes within family-date context before averaging across contexts.

04Tail and diagnostic gates

Require bounded worst-date regression, stable shape diagnostics, and no-harm checks.

05Companion universe

Score the export basket alongside a de-duplicated full-supported chain.

Export-basket sampling fraction and export versus full-supported context improvement
Technical report Figure 5. The export basket averaged 5.98% of full-supported rows, so it could not stand alone as a representativeness claim.
357expiries in carry audit
1.043mean interleaved-strike CV overfit ratio
0.0337 bpmean absolute log-forward shift
0aggregate selection or keep/drop flips
Carry endogeneity cross-validation ratios and log-forward shifts over 357 expiries
Technical report Figure 6. Interleaved-strike holdout results make the remaining carry-reuse concern measurable.
Boundary attribution and common-support diagnostics for volatility-surface candidates
Technical report Figure 8. Boundary effects are separated from support loss and parameter fragility.

These audits reduce specific endogeneity concerns on the saved panels. They do not prove exogeneity on unobserved history, and they do not turn a small, irregular archive into a broad regime sample.

A weak refinement, limited to nonstandard weeklies

The persistent European failure was concentrated in short-dated weekly_pm_nonstandard tails rather than average fit across all families. A weak price-local SVI refinement was allowed to change at most one eligible slice and was accepted only when price error improved without violating variance, parameter, butterfly, calendar-neighbor, or support guards.

Control and guarded weekly-refinement RMSE by NDX, RUT, and SPX
Technical report Figure 9. The August result is reported by asset and basket rather than only as a pooled mean.
Liquidity basket7.4179 → 3.8995mean repaired RMSE
Representative basket8.6654 → 3.9681mean repaired RMSE
Full supported chain6.3036 → 3.1700de-duplicated companion
Accepted changes7 / 24August asset-date slices
August weekly refinement and November transfer comparison
Technical report Figure 10. The November control improved by about 2.6% and 2.0%; this is a limited transfer check.
Weekly refinement on the full supported option chain
Technical report Figure 11. Full-chain results are counted once per asset-date chain.
Interpretation. This supports a narrow policy for one contract family. It does not establish that price-aware SVI should replace the global objective.

Useful research without global promotion

Several alternatives remained informative even when they did not become canonical. They identify where the baseline is vulnerable and where more data would be needed before changing policy.

Repair-matched eSSVI gate-count matrix by contract family and evaluation basket
Technical report Figure 12. Repair-matched eSSVI survives as a monthly_pm_standard candidate, not as a global replacement.
ApproachFindingDecision
Repair-matched eSSVICredible gate profile for standard PM monthlies; not stable across all families.Local candidate
Smoothed local-window repoWon 80 of 202 exact-support contexts; aggregate repaired RMSE materially worse in both baskets.Research only
Direct-price / strong regularizationSome in-sample gains, with shape, adverse-date, or transfer losses.Not promoted
American-aware normalizationChanged local AAPL, SPY, and INTC fits but created no new promotion context.Baseline retained
Dupire local volatilityWould add a derivative-sensitive dynamic layer without fixing the identified comparison and boundary problems.Not the next repair
Exact-support local-window repo result across 202 contexts
Technical report Figure 13. Context wins and aggregate loss are both shown; one does not substitute for the other.

Approximate normalization, explicit exercise downstream

American equity and ETF surfaces retain Black implied-volatility normalization because American-aware alternatives did not generalize on the available panels. That approximation is confined to calibration coordinates. Downstream theoretical prices preserve American exercise.

RoleEuropeanAmerican
Canonical priceAnalytic Black400-step CRR
Matched premium legCRR under European exerciseCRR under American exercise
Independent methodEuropean CRRLeisen-Reimer; 1,600 × 1,600 CN-PSOR
Matched numerical early-exercise premiumEEPCRR = VAmerican, CRR - VEuropean, CRR

Both legs use identical spot, strike, maturity, rate, carry, volatility, and tree resolution. The difference is model conditional, not a unique economic attribution.

# src/volsurf/pricing/early_exercise.py
american = price_crr(
    **common, exercise_style=ExerciseStyle.AMERICAN
)
european = price_crr(
    **common, exercise_style=ExerciseStyle.EUROPEAN
)
premium = american.require_price() \
    - european.require_price()
American normalization RMSE changes by method, asset, and option side
Technical report Figure 14. American-aware normalization changed local fits but did not produce a promoted replacement.
Call and put early-exercise-premium distributions for INTC, NVDA, and SPY
Technical report Figure 15. Put premiums carry most of the mass; the distribution is strongly right-skewed.
Matched pairs1,200 / 1,200
Mean premium0.004264
Largest observed0.4172NVDA put
Negative premiums0

A positive model premium is not a trading signal. Borrow, dividend uncertainty, exercise operations, transaction costs, and model error can dominate the amount.

Tree and finite-difference convergence

Two apparent CRR-versus-PDE failures were traced to the comparison engine. The 400-step CRR price was within 0.00138 of its 3,200-step family reference. The original 400 × 400 CN-PSOR grid at a five-spot domain was materially under-resolved.

CRR step ladder and CN-PSOR grid and domain convergence for two American options
Technical report Figure 16. Neither family reference is ground truth; the ladder diagnoses numerical resolution within each method.

Canonical tree

CRR 400 stepsMaximum gap to 3,200-step CRR reference: 0.00138.

Rejected PDE check

400 × 400, 5SReference gaps: about 0.323 and 0.0488.

Retained PDE check

1,600 × 1,600, 4SReference gaps: about 0.00524 and 0.000605.

Projected SOR with Rannacher startup

The library validates economic and numerical inputs and returns non-convergence as failure. Six CTest suites cover Black pricing, trees, European finite differences, American pricing, invariants, and invalid inputs.

The C++ solver is maintained independently. It is not yet invoked by the Python snapshot pipeline, so the project does not describe it as an integrated production cross-check.

// cpp/src/pricing.cpp
const double unconstrained =
    residual / diagonal[index];
const double relaxed = solution[index]
    + settings.psor_omega
    * (unconstrained - solution[index]);
const double projected =
    std::max(obstacle[index], relaxed);

maximum_change = std::max(
    maximum_change,
    std::abs(projected - solution[index])
);
solution[index] = projected;

if (maximum_change
    < settings.psor_tolerance) {
    return {solution, iteration};
}

Valid prices, strict quality failure retained

The closing accounting run covers INTC, NDX, NVDA, RUT, SPX, and SPY over eight August 2025 dates. Each asset contributes 400 prices. European indices use Black from the canonical repaired surface; American equities and ETF contracts use CRR with American exercise.

Contexts48 / 48
Valid prices2,400
Engine failures0
Bound failures0
Quote-quality failures7
Per-asset closing pricing RMSE and MAE on a logarithmic dollar scale
Technical report Figure 17. Raw-dollar error is displayed by asset because NDX dominates the pooled scale.
Closing quote-quality states and strict failure attribution
Technical report Figure 18. All seven failures occur exactly at the 40% relative-spread limit.
AssetStyle / engineRMSEMAEMax abs. error
INTCAmerican / CRR0.05400.02280.6321
NDXEuropean / Black7.90615.760827.7368
NVDAAmerican / CRR0.15250.08361.3260
RUTEuropean / Black0.63620.44263.7832
SPXEuropean / Black3.31842.272414.7489
SPYAmerican / CRR0.25430.18991.2180

The pooled RMSE is 3.5122 and MAE is 1.4620, but neither is scale free. They are system-accounting statistics, not a universal accuracy claim. The release gate remains failed because the policy permits zero quote-quality failures; the threshold was not relaxed for presentation.

The report is the primary project record

Cover page of the complete volatility-surface technical note

The 55-page note contains the full mathematical and empirical path, including the parts that do not fit naturally on a portfolio page.

Carry and forward coordinatesContract-family taxonomyIV inversion and SVI calibrationJacobian-consistent weightingStatic-arbitrage repairBenchmark endogeneityBoundary and support analysisAlternative surfaces and repoAmerican normalizationEarly-exercise premiumCRR, LR, and CN-PSORClosing evidence and limits

Finished within a narrow evidence boundary

Data

Irregular saved windows, limited transfer month, and no public quote-level redistribution. The panel is not a balanced or random regime sample.

Model

Continuous-carry pricing is an approximation around discrete dividends. Black normalization remains approximate for American contracts.

Numerics

The PDE convergence panel has two contracts. It rejects a coarse grid but does not establish a universal finite-difference resolution.

Use

Signals and alerts are research outputs. No trading profitability, turnover, hedging, capacity, or execution claim is made.