Converting FX Option Greeks into Dollar Risk Measures
Summary
The discussion explains how to interpret and scale Greeks for a GBP/USD call option. It emphasizes that the currency pair’s quotation and the chosen risk convention affect the sign and currency value of delta. A trader described as hedged by 50 deltas holds an underlying position equal to half the option’s underlying notional, while rate sensitivities can be understood through their effect on the forward price. The answers also caution against inverting an FX pair while retaining the original pair’s implied volatility.
The accepted response reverse engineers the example using a forward-based Black model and infers volatility near 10.45% to reproduce the quoted premium and Greeks. It converts vega and gamma to practical move sizes and explains that finite-difference sensitivities must be divided by the size of the input change. Another response reports similar calculations but notes that spot and forward delta conventions differ and that gamma depends on the definition of a one-percent currency move. The source inputs and conventions are partly inferred, so exact replication is uncertain.
Key ideas
- FX delta’s sign and dollar value depend on quote direction and whether risk is measured against spot or the forward.
- A 50-delta hedge means holding an underlying position equal to half the option’s notional.
- Finite-difference sensitivities must be scaled by the size of the underlying or parameter change.
- Vega and gamma are often quoted for practical moves such as a volatility point or a one-percent price move.
- Reversing an FX pair changes the relevant implied volatility and sensitivity conventions.
- Reverse engineering the example depends on inferred inputs, so close agreement is not guaranteed.
Tags
Full text
# FX Option and Greeks Value in Dollars
# FX Option and Greeks Value in Dollars
I'm trying to replicate the Example given in pag. 229-230 of Dynamic Hedging by N. Taleb and I am not sure on how to convert the Greeks in Dollars and how the author is computing the Greeks.
> Start with a currency position in GBP-USD. Spot is 1.605. The trader buys a 6-month call (183 days) in the amount of GBP 100 mil. The price is 4.578% and the trader pays $4'578'000. USD rate is 5.8438% (yearly) and GBP is 6.915%. He computes the Forward exchange rate to be 1.5973.
I managed to obtain the call value with BS (see formula in the Appendix) by supposing the market trades at 1, thus dividing the spot rate and the strike (=1.5973 I suppose) by the spot rate.
I would like to replicate the whole "Taleb \$-value column" in the below Table. Take the Delta, which is around 0.50. How do you calculate its value in dollars? Since it is negative, is the trader selling GBP or USD?
Please, let me know if more details are needed. Thanks for the help. I am new to FX Options.
## Bonus Part for the ones willing to read everything
I report in the Table below the Greeks, in Dollars values, computed directly from Black-Scholes Model and from "discretization" of the underlying or parameters that affects the BS formula, as it seems Taleb is doing. (see Appendix for formulas).
| Greek | BS Model | \$ Value | "Discrete" Method | \$ Value | Taleb \$ Value |
| Delta | 0.5021 | 80'198'736 | 0.00519 | 829'283 | -82'656'000 |
| Gamma | 3.4365 | 548'918'092 | 0.03407 | 5'442'567 | 8'355'000 |
| Vega | 0.2742 | 43'808'238 | 0.00274 | 438'038 | 438'000 |
| $\text{Rho}$ | 0.2334 | 37'292'607 | 0.00237 | 379'053 | 385'000 |
| $\text{Rho}_f$ | -0.2464 | -40'767'691 | -0.00250 | -399'570 | -408'000 |
Bonus Questions:
- It seems that the face value of 159'730'000$ is used, instead of the one of the call, to compute the "\$-values" above? How Taleb is computing the Dollar value of the Greeks?
- Except Gamma, some Greeks are distant some power of 10. I suppose I should multiply the BS Greeks for $0.01$, the increment that I am considering in the "discrete" version of the Greeks since they represent, mathematically, a derivate. Correct?
- How is the author calculating the Gamma?
- Taleb states that the trader hedge is "50 deltas": what does this means? How does this affect the numbers in my Table?
- Taleb is also calculating the sensitivity to $r_f$ in this way: $(183/360) \times 100\text{bp}\times \text{Delta} $. Where does this formula come from?
Again, thanks for the help.
## Appendix
Appendix: Black Scholes - Formulas (see Options, Futures and Other Derivatives by Hull, ch. 19)
$d_1 = \frac{\log(S/K)+(r-r_f+0.5\sigma^2)T}{\sigma\sqrt{T}}$
$d_2 = d_1 - \sigma\sqrt{T}$
$c(S;K;T,\sigma,r,r_f) = Se^{-r_f T}\Phi(d_1)-Ke^{-rT}\Phi(d_2)$
$\text{Delta} = \Phi(d_1)e^{-r_f T}$
$\text{Gamma} = \frac{\phi(d_1)e^{-r_f T}}{\sigma S\sqrt{T}}$
$\text{Vega} = S\sqrt{T}\phi(d_1)e^{-r_f T}$
$ \text{Rho} = KTe^{-r_f T}\Phi(d_2) $
$ \text{Rho}_f = STe^{-r_f T}\Phi(d_1)$
Appendix: Discrete Formulas Note: the asset is supposed to trade at 1. I indicate here only the parameter that change.
$\text{Delta} = c(S=1.01S)-c(S=S)$
$\text{Gamma} = \text{Delta}(S=1.01S)-\text{Delta}(S=S)$
$\text{Vega} = c(\sigma=16.7\%)-c(\sigma=15.7\%)$
$ \text{Rho} = c(r=6.8438\%)-c(r=5.8438\%)$
$ \text{Rho}_f =c(r_f=7.915\%)-c(r_f=6.915\%) $
Appendix: R code
```
call_BS_currency=function(S,K,t,r,rf,sigma=0.157,base=365)
{
d1=(log(S/K)+(r-rf+0.5*(sigma^2))*t/base)/(sigma*sqrt(t/base))
d2=d1-sigma*sqrt(t/base)
c=S*exp(-rf*t/base)*pnorm(d1)-K*pnorm(d2)*exp(-r*t/base)
delta=exp(-rf*t/base)*pnorm(d1)
gamma=dnorm(d1)*exp(-rf*t/base)/(S*sigma*sqrt(t/base))
vega=S*sqrt(t/base)*dnorm(d1)*exp(-rf*t/base)
rho1=K*t/base*exp(-r*t/base)*pnorm(d2)
rho2=-t/base*exp(-rf*t/base)*S*pnorm(d1)
c(c=c,delta=delta,gamma=gamma,vega=vega,rho1=rho1,rho2=rho2)
}
greek_discrete_computation=function(face_value)
{
delta=call_BS_currency(S=1.6050/1.6050*1.01,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)[1]-
call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)[1]
gamma=call_BS_currency(S=1.6050/1.6050*1.01,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)[2]-
call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)[2]
vega=call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.167)[1]-
call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)[1]
rho1=call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.068438,
rf=0.06915,
base=360,
sigma=0.157)[1]-
call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)[1]
rho2=call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.07915,
base=360,
sigma=0.157)[1]-
call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)[1]
c(face_value=face_value/face_value,
delta=delta,
gamma=gamma,
vega=vega,
rho1=rho1,
rho2=rho2)*face_value
}
# BS Greeks and Face Value
100*1e6*1.5973*call_BS_currency(S=1.6050/1.6050,
K=1.5973/1.6050,
t=183,
r=0.058438,
rf=0.06915,
base=360,
sigma=0.157)
# Discrete Greeks
greek_discrete_computation(100*1e6*1.5973)
```
## Answer by LongTimeLurker (score 3, accepted)
https://quant.stackexchange.com/a/80127
Alright so this is the best I can come up with. It's always tricky to reverse engineer textbooks where all inputs are not explicitly given. i'd also like to point out that the chapter is more about working with Greeks provided as given, than their derivation per se, so perhaps the below is a mood point.
I simply don't think the Vol used is 15.7% but rather ~10.45%. It's the only vol that gives the same Greeks as he is using unless I'm missing something blatantly obvious.
I'm using black76. It seems easier given we're provided with the forward price directly and the interest rates are not continuously compounded but discrete 360 base rates that I find easier to convert to a discount factor.
You're going to have to excuse the notation here, this is a lot of stuff to type.
F= 1.5973, K = 1.5973 (assumption, we know he says 50 delta and ATM, but not given what ATM convention he is using), sigma = 10.45% T = 183/365 = 0.50137, GBP notional = 100m DFUSD = 1/(1+0.058438 x 183/360) = 0.9712
with that I get D1 = 0.0369969 and D2 = -0.0369969.
C = [norm(d1) x F - norm(d2) x K] x DF_USD x 100m = 4,578k USD.
Delta = -norm(d1) x F x 100m GBP x DF_USD x 100m = -79,850k USD. (negative because we are long GBP, Short USD and traders often like showing direction wrt. USD)
Vega = normprime(d1) x F x T^0.5 x 0.01 x DF_USD x 100m = 438K USD.
Gamma = (normprime(d1)/(sigma x T^0.5)) x 0.01 x DF_USD x 100m = 8,357k (full disclosure, 2k difference, gamma is very sensitive to the tiniest differences input on an ATM option)
Further details
On this point: "I managed to obtain the call value with BS (see formula in the Appendix) by supposing the market trades at 1, thus dividing the spot rate and the strike (=1.5973 I suppose) by the spot rate."
That's a big no no in FX options in general :) an implied vol for GBPUSD cannot be used for USDGBP and vice versa (your inversion).
"Except Gamma, some Greeks are distant some power of 10. I suppose I should multiply the BS Greeks for 0.01 , the increment that I am considering in the "discrete" version of the Greeks since they represent, mathematically, a derivate". Correct?
If you calculate sensitivities as finite/forward difference. You're effectively calculating a slope over a discrete interval. Y2-Y1/X2-X1. So yes, you need to divide the output change with the input change increment.
As AKdemy said, sensitivities are usually scaled to sizes practical for the different risk factors. Vega and Gamma are usually multiplied down to a vol point/percentage point respectively to keep them manageable, theta to a single day and curves to a single bps.
"Taleb states that the trader hedge is "50 deltas": what does this means? How does this affect the numbers in my Table?"
Means that (spot I suppose) delta is 50% of the underlying notional. For 100 units of underlying in the option you buy 50 units spot as a hedge.
Taleb is also calculating the sensitivity to rf in this way: (183/360)×100bp×Delta
Hint: A 1 year forward, where the interest rate moves 100bps, will result in the forward price changing by ~1%. This is useful if, for instance, using black 76, where the interest rates are not direct inputs.
Hope this helps
## Answer by Attack68 (score 3)
https://quant.stackexchange.com/a/80131
Using @LongTimeLurker 's values I plugged these into my calculator, and I get the following values in agreement with his:
```
# PYTHON
from rateslib import * # version >= 1.4.0
# Spot FX Rate
fxr = FXRates({"gbpusd": 1.605}, settlement=dt(2024, 7, 29))
# Build Curves for an FX Forward market
usdusd = Curve({dt(2024, 7, 29): 1.0, dt(2025, 1, 30): 0.9712})
gbpgbp = Curve({dt(2024, 7, 29): 1.0, dt(2025, 1, 30): 0.9664})
gbpusd = Curve({dt(2024, 7, 29): 1.0, dt(2025, 1, 30): 0.9665})
# Build an FX Forward model from data.
fxf = FXForwards(
fx_rates=fxr,
fx_curves={"usdusd": usdusd, "gbpgbp": gbpgbp, "gbpusd": gbpusd}
)
# Solve the curves so that the forward rate is exactly 1.5973
solver = Solver(
curves=[gbpusd],
instruments=[FXExchange(pair="gbpusd", settlement=dt(2025, 1, 30), curves=[None, gbpusd, None, usdusd])],
s=[1.5973],
fx=fxf,
)
# Finally construct an FXCall and calculate the greeks
fxc = FXCall(
pair="gbpusd",
expiry=dt(2025, 1, 28),
delivery_lag=2,
payment_lag=2,
strike=1.5973,
notional=100e6,
delta_type="forward"
)
fxc.analytic_greeks(fx=fxf, curves=[None, gbpusd, None, usdusd], vol=10.45)
```
The results are as follows:
```
{'delta': <Dual: 0.514754, (fx_gbpusd, c1972_0, c1972_1), [3.4, -5.4, 5.6]>,
'delta_gbp': <Dual: 51475393.768868, (fx_gbpusd, c1972_0, c1972_1), [335693162.0, -538787525.0, 557439308.8]>,
'gamma': <Dual: 3.373116, (fx_gbpusd, c1972_0, c1972_1), [-3.2, 5.1, -5.2]>,
'gamma_gbp_1%': <Dual: 5387875.250399, (fx_gbpusd, c1972_0, c1972_1), [-1678201.1, 2693512.8, -2786757.0]>,
'vega': <Dual: 0.437912, (fx_gbpusd, c1972_0, c1972_1), [0.1, -0.2, 0.2]>,
'vega_usd': <Dual: 437912.180504, (fx_gbpusd, c1972_0, c1972_1), [136442.8, -218990.6, 226571.7]>,
'vomma': <Dual: -0.005736, (fx_gbpusd, c1972_0, c1972_1), [-0.0, 0.0, -0.0]>,
'vanna': <Dual: 0.141166, (fx_gbpusd, c1972_0, c1972_1), [-32.2, 51.6, -53.4]>,
'_kega': <Dual: 0.041850, (fx_gbpusd, c1972_0, c1972_1), [-9.5, 15.3, -15.8]>,
'_kappa': <Dual: -0.471266, (fx_gbpusd, c1972_0, c1972_1), [-3.3, 5.2, -5.4]>,
'_delta_index': None,
'__delta_type': 'forward',
'__vol': 0.1045,
'__strike': 1.5973,
'__forward': <Dual: 1.597299, (fx_gbpusd, c1972_0, c1972_1), [1.0, -1.6, 1.7]>,
'__sqrt_t': 0.7080747580684533,
'__bs76': <Dual: 0.045782, (fx_gbpusd, c1972_0, c1972_1), [0.5, -0.8, 0.8]>,
'__notional': 100000000.0,
'__class': 'FXCallPeriod'}
```
If we multiply the GBP delta by -1.5973 = -\$82,221,646. This is forward delta, spot delta gives a different value.
The USD Gamma is \$8,606,052, although this value relies on GBPUSD moving by 1% which is obviously different if USDGBP moves by 1%, and it was converted by the forward rate of 1.5973. So getting full agreement with Taleb through reverse engineering is tricky here.
The premium (from bs76) is \$4,578,200Shown 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.