Class SviSurface
- All Implemented Interfaces:
TotalVarianceSurface
SviSlice), one per pillar expiry,
interpolated linearly in total variance at fixed log-moneyness
k = ln(K/F(t)).
Between pillars, w(t, k) = (1−u)·w₁(k) + u·w₂(k) with
u = (t − t₁)/(t₂ − t₁). If the pillar slices do not cross
(w₂(k) ≥ w₁(k) for all k) every interpolated w is non-decreasing in t,
so the surface has no calendar arbitrage (Gatheral and Jacquier 2014,
section 2, lemma 2.1 on total variance). Before the first pillar
w = w₁(k)·t/t₁; after the last, w = w_n(k)·t/t_n (constant implied vol per
k). Slice independence means crossing slices are possible: check with
TotalVarianceSurface.calendarViolations(double[], double, double, int) or prefer SsviSurface, which is
calendar-free by construction. Linear interpolation of two butterfly-free
slices need not be butterfly-free; TotalVarianceSurface.minDensityFactor(double, double, double, int) checks it.
-
Constructor Summary
ConstructorsConstructorDescriptionSviSurface(double[] expiries, SviSlice[] slices, double spot, double rate, double carry) -
Method Summary
Modifier and TypeMethodDescriptionstatic SviSurfacecalibrate(double spot, double rate, double carry, double[] expiries, double[][] strikes, double[][] vols, double[][] weights) Fits one SVI slice per expiry (SviSlice.calibrate(double[], double[], double[]), butterfly penalty on) to implied vol quotes.doublecarry()Continuous carry yield (dividend yield, or foreign rate for FX).doubleexpiry(int i) intdoublerate()Continuously compounded risk-free rate.slice(int i) doublespot()Spot price.doubletotalVariance(double t, double k) Total implied variance at expiryt(years, > 0) and log-moneynessk.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface TotalVarianceSurface
calendarViolations, forward, impliedVol, minDensityFactor, price
-
Constructor Details
-
SviSurface
-
-
Method Details
-
calibrate
public static SviSurface calibrate(double spot, double rate, double carry, double[] expiries, double[][] strikes, double[][] vols, double[][] weights) Fits one SVI slice per expiry (SviSlice.calibrate(double[], double[], double[]), butterfly penalty on) to implied vol quotes.- Parameters:
weights- residual weights per quote, or null for equal weights
-
expiryLength
public int expiryLength() -
expiry
public double expiry(int i) -
slice
-
spot
public double spot()Description copied from interface:TotalVarianceSurfaceSpot price.- Specified by:
spotin interfaceTotalVarianceSurface
-
rate
public double rate()Description copied from interface:TotalVarianceSurfaceContinuously compounded risk-free rate.- Specified by:
ratein interfaceTotalVarianceSurface
-
carry
public double carry()Description copied from interface:TotalVarianceSurfaceContinuous carry yield (dividend yield, or foreign rate for FX).- Specified by:
carryin interfaceTotalVarianceSurface
-
totalVariance
public double totalVariance(double t, double k) Description copied from interface:TotalVarianceSurfaceTotal implied variance at expiryt(years, > 0) and log-moneynessk.- Specified by:
totalVariancein interfaceTotalVarianceSurface
-