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.

• The true PV effect is only found when multiplying the Greek with the corresponding change, i.e. $\Delta \times dS$ or $\Gamma \times dS^2$. In each case, the change in value of your instrument is of course denominated in instrument currency. Did that help? Commented Jul 16, 2021 at 15:39

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.$$

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, the classic Taylor expansion requires unit gamma. 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))")


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, unit gamma works in a 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.