Serving the Quantitative Finance Community

 
User avatar
Alan
Posts: 3050
Joined: December 19th, 2001, 4:01 am
Location: California
Contact:

SABR calibration - volvol

March 24th, 2014, 1:17 pm

QuoteOriginally posted by: pcaspersI used quantlib. With the additional points the picture is similarparameters: alpha = 8.7957e-06 beta = 0.999917 nu = 5.35027 rho = 0.128663 errors: rmse = 0.0319503, max = 0.0464164 strike input_vol sabr_vol0.00125 0.639414 0.6743140.00375 0.258993 0.2901070.005 0.486541 0.5317570.00625 0.666904 0.713320.0075 0.817223 0.8591510.00875 0.946197 0.9810630.01 1.05957 1.08580.01125 1.16172 1.177590.0125 1.25374 1.259280.01375 1.33877 1.332860.015 1.41745 1.399790.01625 1.49079 1.461180.0175 1.55957 1.51786beta=1, rho>0 is problematic: f(t) not a martingale
 
User avatar
pcaspers
Posts: 30
Joined: June 6th, 2005, 9:49 am
Location: Germany

SABR calibration - volvol

March 24th, 2014, 2:40 pm

is it only this limit case ?i.e. 0 <= beta < 1, rho \in [-1,1]beta = 1, rho = 0is both ok ?
 
User avatar
Alan
Posts: 3050
Joined: December 19th, 2001, 4:01 am
Location: California
Contact:

SABR calibration - volvol

March 24th, 2014, 9:50 pm

QuoteOriginally posted by: pcaspersis it only this limit case ?i.e. 0 <= beta < 1, rho \in [-1,1]beta = 1, rho = 0is both ok ?Yes, those are OK. The general deal is [$]-\infty < \beta <1; f_t[$] is a true martingale;[$] \beta = 1; f_t[$] is a true martingale for [$]\rho \le 0[$], but strictly local for [$] \rho > 0[$];[$] 1 < \beta < \infty; f_t[$] is a strictly local martingale. Source: Option Valuation under Stochastic Volatility II (chapt: A closer look at the SABR model)
Last edited by Alan on March 23rd, 2014, 11:00 pm, edited 1 time in total.
 
User avatar
pcaspers
Posts: 30
Joined: June 6th, 2005, 9:49 am
Location: Germany

SABR calibration - volvol

March 25th, 2014, 6:08 pm

thanks, Alan. Is the second volumne already available ?
 
User avatar
Alan
Posts: 3050
Joined: December 19th, 2001, 4:01 am
Location: California
Contact:

SABR calibration - volvol

March 25th, 2014, 7:20 pm

not quite yet -- but hopefully by summer
 
User avatar
dicesare
Posts: 1
Joined: July 14th, 2002, 3:00 am

SABR calibration - volvol

March 26th, 2014, 12:44 pm

Should be helpful Correlations and bounds for stochastic volatility models - P.-L. Lions and M. Musiela
 
User avatar
pcaspers
Posts: 30
Joined: June 6th, 2005, 9:49 am
Location: Germany

SABR calibration - volvol

March 26th, 2014, 6:47 pm

Quote[$]-\infty < \beta <1; f_t[$] is a true martingale;[$] \beta = 1; f_t[$] is a true martingale for [$]\rho \le 0[$], but strictly local for [$] \rho > 0[$];what does that mean for [$]E( \max(f_t - k, 0) )[$] if [$]\rho \leq 0[$] and [$]\beta < 1, \beta \rightarrow 1[$] ? Is there a discontinuity at [$]\beta = 1[$] ?
Last edited by pcaspers on March 25th, 2014, 11:00 pm, edited 1 time in total.
 
User avatar
Alan
Posts: 3050
Joined: December 19th, 2001, 4:01 am
Location: California
Contact:

SABR calibration - volvol

March 27th, 2014, 1:07 pm

QuoteOriginally posted by: pcaspersQuote[$]-\infty < \beta <1; f_t[$] is a true martingale;[$] \beta = 1; f_t[$] is a true martingale for [$]\rho \le 0[$], but strictly local for [$] \rho > 0[$];what does that mean for [$]E( \max(f_t - k, 0) )[$] if [$]\rho \leq 0[$] and [$]\beta < 1, \beta \rightarrow 1[$] ? Is there a discontinuity at [$]\beta = 1[$] ?No -- that should be smooth vs [$]\beta[$]. To see the weirdness in your cases, you need to fix [$]\beta = 1[$] and take [$]\rho > 0[$].Define c to be what you wrote and [$]p = E( \max(k - f_t, 0) )[$]; then [$] c - p = E[f_t] - k \neq f_0 - k [$]. The put/call parity failure is due to a `martingale defect' [$]\Delta(\rho) \equiv f_0 - E[f_t] > 0[$].However, [$]\Delta(\rho)[$] is continuous in [$]\rho[$] , tending to zero as [$]\rho \downarrow 0[$].There would be a discontinuity in [$] (c - p) - (f_0 - k)[$] vs. [$]\beta[$]if you fixed [$]\rho > 0[$], [$]\beta < 1[$]; then took [$]\beta \rightarrow 1[$]
Last edited by Alan on March 26th, 2014, 11:00 pm, edited 1 time in total.
 
User avatar
pcaspers
Posts: 30
Joined: June 6th, 2005, 9:49 am
Location: Germany

SABR calibration - volvol

March 27th, 2014, 6:51 pm

yes. thanks again.
 
User avatar
Jim
Posts: 1
Joined: February 1st, 2002, 5:20 pm

SABR calibration - volvol

March 27th, 2014, 10:03 pm

I think there is a more fundamental problem here. Your option prices are for in-the-money options. ED options are American options with early exercise. The prices quoted are almost all intrinsic value. SABR and Black76 are for European options. The implied vols to which you are trying to fit a SABR smile aren't appropriate. Garbage in, garbage out.
 
User avatar
pcaspers
Posts: 30
Joined: June 6th, 2005, 9:49 am
Location: Germany

SABR calibration - volvol

March 28th, 2014, 5:56 am

true, I had this question in mind when I asked about the instruments behind the data. and forgot again :-)anyway, I never worked with american quotes in context of smile modeling. What would you do here ?
 
User avatar
bassemus49
Topic Author
Posts: 0
Joined: February 12th, 2014, 12:13 pm

SABR calibration - volvol

April 14th, 2014, 8:30 pm

I tried on some other data after your input and tried calibrate SABR again with a better result:F0=97,91T=2,4547945Call 96,375 1,72750Call 96,625 1,52250Call 96,875 1,32500Call 97,125 1,13750Call 97,375 0,96250Call 97,625 0,79750Call 97,875 0,64750Call 98,125 0,51500Put 98,75 1,07500Put 98,5 0,92500Put 98,25 0,79000Put 98 0,67250Put 97,75 0,56750Put 97,5 0,47750Now I got with Excels Solver (and beta fixed at 0,5):α 7,2524%β 0,5ρ -0,132076ν 14,2718%The model now perform very well on other strikes too (within 0-2%). Now I face a problem when I take the SABR parameters to a Monte Carlo implementation of the SABR model -- the MC implementation consequently prize way too low?Here is the main implementation I use: For i = 1 To numSim For j = 1 To numPaths rnd1 = Application.NormSInv(Rnd()) rnd2 = Application.NormSInv(Rnd()) alpha(j) = alpha(j - 1) * Exp(-0.5 * ny ^ 2 * dt + ny * Sqr(dt) * rnd1) F(j) = F(j - 1) * Exp(-0.5 * alpha(j - 1) ^ 2 * F(j - 1) ^ (2 * beta - 2) * dt + alpha(j - 1) * F(j - 1) ^ (beta - 1) * (rho * rnd1 + Sqr(1 - rho ^ 2) * rnd2) * Sqr(dt)) Next j 'Payoff for en call option på forward quotes payOff = payOff + Application.Max(F(numPaths) - K, 0) Next i avgpayOff = payOff / numSim call_MC = Exp(-(r * T)) * avgpayOffDo I miss anything here?