FX Vanilla Option Pricing: Quote Direction, Rates, and Day Counts
Summary
This discussion diagnoses a mismatch between a foreign exchange vanilla option price calculated with a Black–Scholes framework and a Bloomberg quote. The replies focus on conventions that can materially change the result: whether the exchange rate is quoted as domestic currency per foreign unit or its reciprocal, which currency is domestic in the pricing measure, how interest rates are expressed, and which currency’s notional the option value represents. The option price must be converted consistently when the notional currency differs from the pricing currency.
A second answer proposes a direct USD/CAD calculation and distinguishes time to payment from time to maturity, using the former for forward and discount calculations and the latter for volatility variance. It also notes that market rate and day-count conventions may differ from the initial assumptions. The answers disagree in their framing of the first calculation, and the supplied discussion does not resolve every Bloomberg setting. The example illustrates why quote direction, currency units, rate conventions, and maturity definitions should be checked before treating a pricing discrepancy as a model error.
Key ideas
- FX option formulas require a consistent domestic-versus-foreign quote convention.
- Interest rates must be assigned to the correct currencies and expressed in compatible units.
- Option values are denominated in a currency and notional that may require conversion for comparison.
- Time to payment and time to maturity can enter different parts of the calculation.
- Day-count and market-specific settings can explain residual differences from a vendor quote.
Tags
Full text
# Pricing of a Foreign Exchange Vanilla Option
# Pricing of a Foreign Exchange Vanilla Option
To understand how Bloomberg prices foreign exchange vanilla options , I extract the following screenshot from its OVML function.
The Black-Scholes formua for vanilla options are \begin{split} & P=\phi\big(Se^{-R_fT}N(\phi d_1)-Xe^{-R_dT}N(\phi d_2)\big) \\ & d_1 = \frac{\ln(\frac{S}{X})+(R_d-R_f)T+0.5\sigma^2T}{\sigma\sqrt{T}} \\ & d_2 = d_1-\sigma\sqrt{T} \end{split} where
$\phi$: 1 for call; -1 for put
$S$: Spot rate
$X$: Strike rate
$R_d$: Domestic interest rate
$R_f$: Foreign interest rate
$\sigma$: Volatility
$T$: Time horizon
From the screenshot, I get
\begin{split} & S = 1.3347 \\ & X = 1.3338 \\ & T = \frac{22}{252} = 0.08730 \text{ yrs} \\ & \sigma = 0.0655 \end{split}
I also look up that the $R_{USD} = 0.75$ and $R_{CAD}=0.50$. Plugging these numbers in, I get
$d_1 = \frac{\ln(\frac{1.3347}{1.3338})+(0.75-0.50)\times 0.08730+0.5\times 0.0655^2 \times 0.08730}{0.0655 \sqrt{0.08730}} = 1.5580$
$d_2=1.5580 - 0.0655*\sqrt{0.0873} = 1.5386$
and $P = 1.3347 \times e^{0.50\times 0.0873}\times N(1.5580) - 1.3338\times e^{-0.75\times 0.0873}\times N(1.5386) = 0.03864$, which is nowhere close to Bloomberg's result of 0.07452.
I also tried multiplying volatility by $\sqrt{12}$, assuming that the volaility they gave is monthly not annualized. The resulting price is 0.05624, which doesn't match either.
I also tried changing 0.75 and 0.5 into 0.0075 and 0.005, assuming that the interest rates are in percentages. The resulting price is 0.01688, which also doesn't match.
What am I missing?
## Answer by msitt (score 8, accepted)
https://quant.stackexchange.com/a/33613
Be careful of your rate conventions!
The issue here is that all your rates are expected to be in units of domestic vs 1 unit of foreign. So for example USDCAD is 1.3347, you really need to be using 1/1.3347 = 0.749 USD per 1 CAD.
So, your inputs need to be $$ \begin{align} S &= 1 / 1.3347 \\ X &= 1 / 1.3338 \\ R_d &= 0.75\% \\ R_f &= 0.50\% \\ \sigma &= 6.55\% \\ T &= 22/252 \end{align} $$ If you do this calculation you will get $$ P = 0.005614 $$ Now, the output of this is also in units of domestic per 1 unit of foreign notional (as pointed out by noob2). e.g. 0.005614 USD per 1 CAD notional. To get from CAD notional to USD notional, divide by $X$. $$ P_d = P / X = 0.7488\% $$ You can compare this to the $0.7452\%$ from your Bloomberg screenshot.
## Answer by jherek (score 6)
https://quant.stackexchange.com/a/49021
The answer given is mostly wrong: @msitt uses a convoluted way without explicitly mentioning it (put-call symmetry) to actually give the price of a USD Put, not of a USD Call as requested. Here is a more direct and correct approach.
I will consider, as mentioned by @FinanceGuyThatCantCode, that the volatility convention is ACT/365, which is standard.
I will also use the straightforward measures for USD/CAD: domestic=CAD, foreign=USD. The Black-Scholes price in the domestic measure (CAD) uses simply $S=1.33347, X=1.3338$. There are however two maturities to consider: $T_p=\frac{31}{365}$ (spot to payment) and $T=\frac{29}{365}$ (time to maturity). Then use $T_p$ to compute the forward $f=S e^{(r-q)T_p}$ and the discount factor $B(0,T)=e^{-r T_p}$, and $T$ to compute the total variance $\sigma^2 T$, with $\sigma=0.0655$. You then apply the Black-76 formula $$C_{CAD} = B(0,T) \left[f N(d_1)-X N(d_2)\right]$$ This price is in CAD. Now just convert it to USD by dividing by $S$. $$C_{USD}=\frac{C_{CAD}}{S}\,.$$ With $r=0.005$ and $q=0.0075$, this gives $C_{USD}=0.75922$%.
Now the rates are probably given in a specific different daycount convention. Using the rates $r=0.00269, q=0.00815$ from @FinanceGuyThatCantCode, which he implied from Bloomberg, I obtain $$C_{USD}=0.7465\%\,.$$ For USD 1 million, we have $C= 7465$ USD.
## Answer by AKdemy (score 1)
https://quant.stackexchange.com/a/64045
You can have a look here and there. The latter will show what BBG does with implied rates (or forward - which is a setting). This will, apart form some daycount differences (which are explained in the links) match BBG 100%.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.