# SABR Calibration: Normal vs Log-Normal Market Data

This question is about getting some clarification as to how to understand market quotes for normal & log-normal vols together with certain model assumptions.

So let us define

1. $C_{BS}(F_0,K,T,\sigma,\beta)=\mathbb{E}[(F_T-K)^+]\quad \text{with}\quad dF_t=\sigma F_t^\beta dW_t$$2. C_{SABR}(F_0,K,T,\sigma_0,\beta,\nu,\rho)=\mathbb{E}[(F_T-K)^+]$$\text{with}\quad dF_t=\sigma_t F_t^\beta dW_t,\quad \sigma_t=\nu \sigma_t dZ_t,\quad dW_tdZ_t = \rho dt$$And for any given combination of F_0,K,T,\sigma_0,\beta,\nu,\rho the SABR-implied vol v_{SABR} is the quantity such that the following relationship holds$$C_{BS}(F_0,K,T,v_{SABR},1) = C_{SABR}(F_0,K,T,\sigma_0,\beta,\nu,\rho)$$See http://www.math.ku.dk/~rolf/SABR.pdf right-hand side of page 89. Now let us assume that for a fixed expiry/tenor we are given a set of volatility market quotes: Ideally, I want to calibrate the SABR model to it. So when I set \beta=1 and calibrate \sigma_0,\nu,\rho to the log-normal vols, I get a very nice fit: However, when I set \beta=0 and calibrate \sigma_0,\nu,\rho to the normal vols, I get a very poor fit: So I have two questions: 1. Is my definition of the SABR vol v_{SABR} correct? For example, would$$C_{BS}(F_0,K,T,v_{SABR},\beta) = C_{SABR}(F_0,K,T,\sigma_0,\beta,\nu,\rho)$$perhaps be more correct? Note that the difference here is the \beta in C_{BS} as opposed to having a 1 there. 2. Is maybe my normal vol market data of an atypical shape causing SABR to only find a poor fit? Or is my SABR implementation faulty? ## 2 Answers I think you did something wrong in translating the input to numerics. As pointed out by dm63 normal vols are quoted in basis points. Using equation A.67a) from the Hagan paper you linked we see (setting \beta = 0)$$\sigma_N(K) = \alpha\frac{\xi}{x(\xi)}\left[1+\frac{2-3\rho^2}{24}\nu^2\tau_{exp}\right]$$where \tau_{exp} = 0.25 in your example and$$\xi = \frac{\nu}{\alpha}(f-K)x(\xi) = \log{\left(\frac{\sqrt{1-2\rho\xi+\xi^2}-\rho+\xi}{1-\rho}\right)}$$I've implemented a very simple (not at all optimized) code just as an example:  #maket data iVol <- c(46.6,49.8,52.3,55.2,58.8,62.8,72,92.2)/10000 strike <- c(0.298,0.798,1.048,1.298,1.548,1.798,2.298,3.298)/100 exp <- 0.25 atmF <- 1.298/100 #object function f.obj <- function(x,strike,iVol,exp,atmF) { return(1/length(strike)*sum((iVol-sigma.hat(x,strike,atmF,exp))^2)) } # approximatino using formula A.67a) in Hagan paper sigma.hat <- function(x,strike,atmF,exp) { #x = alpha #x = nu #x = rho xi <- x/x*(atmF-strike) x.xi <- log(((sqrt(1-2*x*xi+xi^2)-x+xi)/(1-x))) ret <- ifelse(abs(strike-atmF)<10^(-4), x*(1+((2-3*x^2)/(24))*x^2*exp),x*((xi)/(x.xi))*(1+((2-3*x^2)/(24))*x^2*exp)) return(ret) } # fit the model sol1 <- nlm(f.obj, c(atmF, 0.1, 0.5), strike = strike, iVol = iVol, exp= exp, atmF = atmF)$estimate
sol2 <- nlm(f.obj, c(atmF,sol1,sol1),strike = strike, iVol = iVol, exp = exp, atmF = atmF)$estimate sol1 sol2 x.seq <- seq(0.9*min(strike),1.1*max(strike),0.001) y.seq <- sigma.hat(sol2,x.seq,atmF,exp)*10000 plot(100*x.seq,y.seq,type="l",col="red",xlab = "Strike", ylab = "implied Vol", main = "Sabr Normal model") points(100*strike,iVol*10000,col="blue")  leading to the following fit: • Agree that the formula for$\sigma_N(K)$is way more accurate than the$\sigma_{BS}(K)$with$\beta=0\$. – Jaehyuk Choi Oct 13 '18 at 17:34
• @JaehyukChoi the main issue here is not about which formula is more accurate. This is about what the formula output is: normal (Bachelier) vols or Black-Scholes vols. If you try to fit normal vols with the formula that gives you Black vols, you will of course run into problems, unless you convert those Black vols back to normal vols. – jherek Mar 20 '19 at 21:34

I think (1) is the issue. You need to compare market normal vols to normal vols implied by the sabr model. (2) is not the issue - these vols look reasonable.

By the way we express normal vols in bp per annum, not percent!