Skip to content
All library documents

Currency Units and Greek Definitions for FX Options

Article Quant Q&A · Author: jim mako

Summary

The document explains how to determine the currency denomination of FX option Greeks by starting with the units of the option value and spot rate. If an option is valued in domestic currency and spot is domestic currency per unit of foreign currency, differentiating value with respect to spot gives delta in foreign currency units. Further derivatives have different dimensions, so the currency attached to gamma or vega should be inferred from the precise definition and valuation convention rather than assumed from a display label.

It also distinguishes a domestic-currency premium from a premium converted into foreign currency by dividing by spot. That conversion changes the reported delta: the corresponding hedge quantity is scaled by spot, and the answer relates it to the premium expressed in foreign units. Examples using Black–Scholes and Garman–Kohlhagen formulas illustrate the unit analysis and explain how gamma can be rescaled. The discussion cautions that market and vendor conventions may differ, and its author explicitly does not verify third-order Greeks; therefore, the derivative definitions and quote conventions should be checked for the specific instrument.

Key ideas

  • Track the units of option value and spot before assigning currency units to a Greek.
  • With domestic value and domestic-per-foreign spot, the derivative of value with respect to spot has foreign currency units.
  • Dividing the option value by spot converts a domestic premium into foreign currency and changes the associated delta convention.
  • Gamma's denomination follows from the units of the second spot derivative and may be rescaled for reporting.
  • Vendor conventions can differ, so confirm the definitions used for each Greek.

Tags

Full text
# Numeraire explanation on currency greeks


# Numeraire explanation on currency greeks












Would it be possible to help understand the numeraire of certain currency options?

Derivations from the Black Scholes models for Delta and Gamma,

$Delta = e^{-r_f T} N(d_1)$

$Gamma = \frac{e^{-r_f T}}{S \sigma \sqrt{T}}n(d_1)$

would give the values in terms of the first currency, whereas the derivation for Vega would return the value in terms of the second currency;

$Vega = S e^{-r_f T} \sqrt{T} n(d_1)$

How is it best to understand the when the derivation of a Greek would be in first or second currency terms?

Thank you.

## Answer by ir7 (score 6, accepted)

https://quant.stackexchange.com/a/66068

The best way is to start with definitions (instantaneous and their finite difference versions) of Greeks.

For a currency pair $(FOR,DOM)$ with FX rate $S$, the number of $[DOM]$ (domestic, numeraire, right-side) units needed to buy one $[FOR]$ (foreign, asset, left-side) unit, let $V(S)$ be an option's price in $[DOM]$ units. Note that the unit of $S$ is: $$ \frac{[DOM]}{[FOR]}.$$ Delta is then defined as: $$ \Delta:= \frac{\partial V}{\partial S} \approx \frac{V(S^+)-V(S)}{S^+-S}$$ with unit $$\frac{[DOM]}{\frac{[DOM]}{[FOR]}} = [FOR].$$

The (first order) P&L can then be consistently reconstructed wrt to units: $$ dV = \Delta \cdot dS $$ or $$ V(S^+)-V(S) \approx \Delta \cdot (S^+-S) $$

(Same approach applies to Gamma and Vega.)

Note: As a heads-up, in FX option markets, depending on what $FOR$ or $DOM$ are, the currency translation of the option price $V$ can be used as premium: $$ W(S) = \frac{V(S)}{S}, $$ which has $[FOR]$ units. The Delta that one would report is not $\frac{\partial W}{\partial S}$, which has $[DOM]$ units (it's not our 'asset'), but rather:

$$ \Delta:= \frac{\partial W}{\partial S}\cdot S,$$

which has $[FOR]$ units.

We note the relationship

$$ \frac{\partial W}{\partial S} \cdot S = \frac{\partial V}{\partial S} - W, $$

showing that the 'new' delta is the 'old' delta minus the premium ($W$) received in $FOR$ (asset) units which can immediately act as hedge.

The (first order) P&L can then be consistently reconstructed wrt to units as follows: $$ dW = \Delta \cdot dS/S. $$

## Answer by AKdemy (score 6)

https://quant.stackexchange.com/a/66086

Everything (warning: I have not checked 3rd order greeks) that is not delta is in terms of ccy2 in the standard Garman Kohlhagen model. Gamma is not in CCY1 by default either (some vendors like Bloomberg display it like that to be consistent with Delta).

Why

Let's start by not looking at FX but equity to help build intuition. The actual price of an option is (usually) in some currency, say USD because currency is a commonly accepted medium of exchange, and unit of account, whereas stocks are not. In fact, that is the reason stocks are quoted in currency in the first place (as opposed to say another stock or noodles, tuna or cigarettes). Therefore, the natural choice with (stock) options is to express them in terms of currency as opposed to (fractions of) shares of stock.

Using standard Black Scholes one can write the following Julia code to illustrate this.

```
function BSM(S,K,t,rf,d,σ)

  d1 = ( log(S/K) + (rf - d + 1/2*σ^2)*t ) / (σ*sqrt(t))
  d2 = d1 - σ*sqrt(t)
  c  = exp(-d*t)S*N(d1) - exp(-rf*t)*K*N(d2)
  delta_c = exp(-d*t)*N(d1)
  vega_c = S * exp(-d*t)*n(d1) * sqrt(t)*0.01
  gamma_c = exp(-d*t)*n(d1) / (S*σ *sqrt(t))
  theta_c =(-(S * exp(-d*t)*n(d1)* σ )/ (2 * sqrt(t)) - rf * K * exp(-rf*t) * N(d2) + d * S * exp(-d*t)*N(d1))/365
  rho_c = ( K*t * exp(-d*t) * N(d2))*0.01
  return DataFrame(premium = c, pricePct= c/S, vega = vega_c, delta = delta_c, gamma = gamma_c, rho = rho_c, theta = theta_c)
end

s = 138
s1 = 138000
k = 138
k1 = 138000
t = 90 # days 
rf = 0 
d = 0 
σ = 0.22
noShares = 100
```

You see that all Greeks I added, except Delta, depend on the actual value of the underlying because they are expressed in ccy and not in (one) stock. There is an interesting question about the asymmetric shape of volga that I answered here which directly relates to the units of Greeks as well.

Gamma as displayed above is frequently called unit gamma as it refers to a change in delta to a one unit change in the underlying. Unit changes are a difficult thing (in finance) - something clearly visible when looking at the standard deviation of prices (as opposed to returns). This can be normalized to percent gamma (change in delta to a 1% change in price) by adjusting for the spot rate. Side remark, this is also important for the classic Taylor expansion. More on that later.

```
println("Percent Gamma for Spot = $s equals $(round(df.gamma[1]/100*s,digits=5))")
println("Pct γ for Spot = $s1 equals $(round(df1.gamma[1]/100*s1,digits=5))")
```

How about FX In equity, the price is in CCY (USD for example) per one share. In FX, the price is still in CCY (USD for instance) for one unit of foreign currency (EUR for example). Therefore, there really is no difference - apart from the fact that expressing the price in either currency makes more sense than it does in terms of shares of stock.

More formally, an FX spot rate $$S_t = \frac{DOM}{FOR}$$ represents the number of units of domestic currency needed to buy one unit of foreign currency at time t. In EURUSD, this corresponds to $\frac{USD}{EUR}$ or $\frac{CCY2}{CCY1}$.

A buyer of a EUR vanilla call (USD Put) receives a EUR notional amount N and pays N × K USD, where K is the strike. The Garman Kohlhagen formula applies by default to one unit of foreign notional (corresponding to one share of stock in equity markets), with a value in units of domestic currency. Paying the premium in CCY1 (EUR in the example here), would be the equivalent of paying for stock options in shares of stock, albeit less realistic for stock options. To get to the CCY1 value, the value in CCY2 is simply divided by spot (this is crucial for explaining the reason why delta is in CCY1 but gamma is in CCY2 by default as will be shown at the very end).

To summarize, notional is in CCY1 (equivalent to number of shares), Premium in CCY2 and call refers to CCY1 (which is a Put on CCY2). Therefore, premium in CCY2 is $$v_{ccy2} = S*e^{-ccy1*t}*N(d1) - K*e^{-ccy2*t}*N(d2)$$ In CCY1, you have $$ v_{ccy1} = v_{ccy2}/S $$

Let's demonstrate this in Julia:

```
# GK model
function GKModel(S, K,t,ccy1,ccy2,σ)
    d1 = ( log(S/K) +  ( ccy2 -ccy1 + 0.5*σ^2)*t ) / (σ*sqrt(t))
    d2 = d1 - σ*sqrt(t)
    c  = S*exp(-ccy1*t)*N(d1)-K*exp(-ccy2*t)*N(d2)
    # p  = exp(-ccy2*t)*K*N(-d2)-S*N(-d1)*exp(-ccy1*t)
    delta =   exp(-ccy1*t)*N(d1)
    vega =  S*sqrt(t)n(d1)*exp(-ccy1*t)*0.01
    gamma = exp(-ccy1*t)*n(d1)/(S*σ*sqrt(t))
  return DataFrame(premCCY2 = c, premCCY2_pct=c/S, delta = delta , vega = vega, gamma= gamma)
end

S = 1.1 # EURUSD for example
K = 1.1
vol = 6/100
ccy1 = 0
ccy2 = 0 #(rd)
t = 1
N_eur = 10_000
```

Delta is again unaffected by the value of spot whereas all other values (expressed in CCY2) naturally change.

Checking the change of the option price with respect to 1% change in spot shows the following (this time with actual notional in CCY1).

To hedge, one needs to sell an amount equal to delta in CCY1 to be delta hedged.

```
# sell EUR for USD is delta hedge
hedge = df.delta[1]*S
println("Selling $(round(df.delta[1],digits=4)) EUR at spot gives $(round(hedge, digits=4)) USD")
# mark to market after fx appreciated 
mtm = hedge/(S*1.01)
println("New EUR value after EUR appreciated = $(round(mtm,digits=4))")
pnlHedge = mtm-df.delta[1]
println("The loss in the hedge is $(round(pnlHedge,digits=4)) ")
```

Checking against the actual change in CCY2 premium makes it look like the hedge was not particularly good.

However, remember, it is actually in CCY1 as opposed to CCY2.

This not only matches closely the delta of 0.511 but also shows that the delta hedge was quite good indeed.

Looking at Gamma reveals that there must be an issue in terms of CCY of denomination. The change in delta is nowhere near what gamma suggests. As mentioned before, this is also important in the Taylor expansion. Trying this here shows it works quite well (simple comparing it to the actual change in value in CCY2). That is what @Kermittfrog was eluding to I think. However, it does not address the actual question of ccy of denomination (in my opinion).

To get gamma in ccy1, one needs to multiply by spot. Afterwards, delta plus gamma equals the new delta (approximately).

```
println(round(df.gamma[1]*S*0.01,digits=4)) #(to get gamma in notional ccy1)
println("The new delta will be close to delta old + gamma in EUR => $(round(df.delta[1],digits=4)) + $(round(df.gamma[1]*S*0.01,digits=4)) =  $(round(df.delta[1] + df.gamma[1]*S*0.01,digits=4))")
```

To conclude this rather lengthy post with, in my opinion, a very intuitive explanation; the reason delta is in CCY1 (or shares) is that you divide by spot (just like you do with premium in CCY2 to express it in CCY1). Similarly, for Gamma, looking at the derivative, $$\Gamma = \frac{\partial\Delta}{\partial S} = \frac{\partial^2 v_{ccy2}}{\partial S^2}$$ one can break this down to the dimensions of $\partial^2 v_{ccy2}$ which is CCY2, and $\partial S^2$ which is $(\frac{CCY2}{CCY1})^2$. Therefore, gamma is in $$\frac{CCY2}{(\frac{CCY2}{CCY1})^2}$$ This in turn is equal $$\frac{CCY1^2}{CCY2}$$ Rescaling by spot gives you Gamma in terms of CCY1 because $$\frac{CCY1^2}{CCY2}*\frac{CCY2}{CCY1} = CCY1$$ The code is in domestic vs foreign as opposed to CCY2 vs CCY1 but I think it should be clear that it is identical.

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.