Skip to content
    Finance / Heston (1993) characteristic-function European option pricing

    Heston Model Calculator — Stochastic Volatility Option Pricing

    Price European options under the Heston stochastic volatility model: call and put values, model-implied volatility, forward, and the Feller condition from five parameters.

    ToolCalculatorExecutionIn browserCategoryFinancial
    ZorvLabs · Heston volatility

    Heston Volatility Calculator

    Heston (1993) stochastic-volatility option pricing with characteristic-function call pricing, an implied-volatility smile, and 2D / 3D / both views.
    Pricing method
    semi-closed form
    Characteristic-function pricing with deterministic quadrature.
    Call price
    8.384823
    European call under Heston
    Put price
    6.424393
    Parity-derived put
    Implied vol
    0.188570
    Black-Scholes inversion
    Forward price
    102.020134
    Spot carry forward
    View mode
    3D surface
    Spot S0
    Variance v0
    Mean reversion κ
    Long-run variance θ
    Vol of vol ξ
    Correlation ρ
    Rate r
    Dividend q
    Strike center K
    Horizon T (years)
    Spot min factor
    Spot max factor
    Strike min factor
    Strike max factor
    Surface X resolution
    Surface Y resolution
    CF integration upper
    CF integration steps
    R(0)
    100.000000
    Spot price S0
    v(0)
    0.040000
    Initial variance
    C(K,T)
    8.384823
    Call price at strike
    IV(K,T)
    0.188570
    Implied vol at strike
    Δ
    0.663331
    Numerical delta
    Γ
    0.018966
    Numerical gamma
    Vega
    36.218844
    ∂C/∂v0
    Feller gap
    -0.113500
    2κθ − ξ²
    E[v_T]
    0.044388
    Mean variance at horizon
    ½-life
    0.330070
    ln 2 / κ
    Corr drag
    0.077000
    ρ × ξ × √v0 sign
    ATM smile slope
    0.002271
    Local skew proxy
    2D call price smile
    European call price across strikes
    Call price vs strikeStrike KC(K,T)55.0079.00103.00127.00151.00175.00-0.938.3817.7027.0136.3245.63Call priceIntrinsic
    2D implied volatility smile
    Implied vol recovered from Heston prices
    Implied vol vs strikeStrike KIV55.0079.00103.00127.00151.00175.000.000.050.100.140.190.24Implied vol
    2D variance term structure
    Mean variance under the CIR variance process
    Expected variance vs strike gridStrike KE[v_T]55.0079.00103.00127.00151.00175.000.040.040.040.040.040.04E[v_T]
    2D terminal density proxy
    Breeden-Litzenberger style density proxy from call curvature
    Density proxy over strikeStrike KDensity55.0079.00103.00127.00151.00175.000.000.000.010.010.020.02pdf proxy
    3D surface
    Call price surface over strike and maturity
    Heston call price surface C(K,T)StrikeTCsurface grid48 × 110 cells · max C = 45.161948
    Model equations
    Heston (1993) core model
    Asset: dS_t = (r − q)S_t dt + √v_t S_t dW_t^S.
    Variance: dv_t = κ(θ − v_t)dt + ξ√v_t dW_t^v, with corr dW_t^S dW_t^v = ρ dt.
    Call price: C = S_0e^(−qT)P_1 − Ke^(−rT)P_2.
    Characteristic function: φ_j(φ) = exp(C_j + D_j v_0 + iφ ln S_0), with the original Heston integral evaluation for P₁ and P₂.
    finance methodology

    A clear path from inputs to results.

    Price a European option when volatility itself is random rather than fixed. The Heston model lets variance mean-revert and be correlated with the spot, so a single set of parameters reproduces the volatility smile and skew that Black-Scholes cannot. Enter the spot, strike, maturity, rates, and the five variance-process parameters, and the calculator returns the call and put, the implied volatility that matches the price, the risk-neutral forward, and diagnostics such as the Feller condition.

    Step-by-step methodWorked exampleAssumptions explained

    How to use

    1. Set the spot price, strike, and maturity in years for the contract you want to value.
    2. Set the risk-free rate and the continuous dividend yield as annual decimals (3% = 0.03).
    3. Enter the initial variance v0 (the square of the current instantaneous volatility, so v0 = 0.04 is a 20% starting vol) and the long-run variance theta that it reverts toward.
    4. Set the mean-reversion speed kappa, the volatility-of-volatility xi, and the spot/variance correlation rho (typically negative for equities, which produces the downside skew).
    5. Read the price cards for the call and put, the implied Black-Scholes volatility the model price corresponds to, and the forward and discount factor.
    6. Check the Feller gap (2*kappa*theta - xi^2): when it is negative, as it is at the defaults, the variance path can touch zero, which is admissible but worth knowing when you interpret the surface.
    7. Adjust the integration cutoff and step count if you push to extreme parameters; the defaults (upper 120, 600 steps) resolve the Fourier integral to several decimals for standard inputs.

    The formula

    Reference: Heston (1993), "A Closed-Form Solution for Options with Stochastic Volatility and Applications to Bond and Currency Options", Review of Financial Studies 6(2), 327-343; Gatheral, The Volatility Surface (2006), for the P1/P2 decomposition and numerical integration.

    Worked example

    At-the-money one-year call with negative skew

    Inputs
    • Spot 100, strike 100, maturity 1 year; risk-free rate 3%, dividend yield 1%; initial variance v0 = 0.04 (20% vol), long-run variance theta = 0.045, mean-reversion speed kappa = 2.1, volatility-of-volatility xi = 0.55, correlation rho = -0.7.
    Calculation path
    1. 1

      The characteristic function phi_j(phi) is evaluated along the real line and the two probabilities P1 and P2 are obtained by Simpson quadrature of Re[e^{-i*phi*lnK} * phi_j(phi) / (i*phi)] from 0 to 120 in 600 steps, each shifted by 1/2 and scaled by 1/pi. With these inputs P1 and P2 give a call of S*e^{-qT}*P1 - K*e^{-rT}*P2 = 100*e^{-0.01}*P1 - 100*e^{-0.03}*P2 = 8.384823. Put-call parity C - S*e^{-qT} + K*e^{-rT} then gives the put 100*e^{-0.03} - 100*e^{-0.01} + 8.384823 = 6.424393. Inverting a Black-Scholes call to that price returns an implied volatility of 18.857%, below the 20% starting vol because kappa pulls variance toward theta and the -0.7 correlation reshapes the risk-neutral density. The Feller gap 2*2.1*0.045 - 0.55^2 = -0.1135 is negative, so variance can reach zero.

    Result

    Call 8.3848, put 6.4244, model-implied Black-Scholes volatility 18.86%, forward 102.0201, mean-reversion half-life ln2/kappa = 0.330 years; Feller gap -0.1135 (condition violated, zero-variance touching allowed).

    Interpreting the result

    The call and put are the model values given stochastic, mean-reverting variance; the single implied volatility reported next to them is the Black-Scholes number that reproduces the same price, which is how a Heston quote is compared to the market smile. A negative correlation rho tilts the risk-neutral distribution left, raising out-of-the-money put volatilities and producing the equity skew, while xi controls how pronounced the smile is. The Feller gap tells you whether the variance process is strictly positive (positive gap) or can touch zero (negative gap), and the half-life ln2/kappa says how quickly a variance shock decays.

    Assumptions & limitations

    • European exercise only; the Fourier pricing covers a single terminal payoff and does not value early exercise.
    • Constant risk-free rate and continuous proportional dividend yield; no rate term structure or discrete dividends.
    • The variance follows a square-root (CIR) process with constant kappa, theta, xi, and rho; these are held fixed rather than being time-dependent or themselves stochastic.
    • Prices come from numerical integration of the characteristic function with a finite cutoff and step count, so extreme parameters may need a larger cutoff for full convergence.
    • The implied volatility is solved by bisection against the model call and is only defined when the price lies inside the no-arbitrage band.
    • The Feller condition 2*kappa*theta >= xi^2 is reported, not enforced; the defaults deliberately violate it, which is common in equity calibrations.

    Frequently asked questions

    How is Heston different from Black-Scholes?

    Black-Scholes assumes a single constant volatility, so it prices every strike off one number and cannot fit the smile. Heston makes the variance itself a mean-reverting random process correlated with the spot, which generates a volatility surface from five parameters. At zero volatility-of-volatility (xi = 0) and zero correlation Heston collapses back to Black-Scholes.

    What is the Feller condition and why is it violated here?

    The Feller condition 2*kappa*theta >= xi^2 guarantees the variance process stays strictly positive. At the defaults 2*2.1*0.045 = 0.189 is below xi^2 = 0.3025, so the gap is -0.1135 and variance can touch zero. This is admissible and extremely common in real equity calibrations, where fitting the observed skew tends to require a high volatility-of-volatility; the pricing integral still converges.

    How is the price actually computed?

    The engine evaluates the Heston characteristic function and integrates two Fourier integrals for the in-the-money probabilities P1 and P2 using Simpson quadrature, with a cutoff of 120 and 600 steps by default. The call is then S*e^{-qT}*P1 - K*e^{-rT}*P2 and the put follows from put-call parity. Increasing the cutoff and steps improves accuracy for far-from-the-money strikes or very short maturities.

    What does the correlation rho control?

    Rho is the correlation between the shocks to the spot and to its variance. A negative value, like the -0.7 default, means volatility rises when the price falls, which fattens the left tail of the risk-neutral distribution and lifts out-of-the-money put volatilities. That is the mechanism behind the equity skew; a positive rho tilts the smile the other way, as is sometimes seen in commodities.

    Why is the implied volatility below the starting volatility?

    The initial variance v0 = 0.04 corresponds to a 20% instantaneous volatility, but the option price integrates variance over the whole year. Mean reversion at speed kappa = 2.1 pulls variance toward theta = 0.045, and the negative correlation reshapes the density, so the single Black-Scholes volatility that matches the one-year call comes out at 18.86% rather than 20%.

    Does this calibrate the model to market prices?

    No. It is a forward pricer: you supply the five variance-process parameters and it returns prices and the implied-volatility surface they imply. Calibration, the inverse problem of fitting kappa, theta, xi, rho, and v0 to a grid of market quotes, is a separate optimization that this tool does not perform.

    Methodology last reviewed 2026-10-06. Results are informational and not financial or engineering advice — see our disclaimer.