Skip to content

4. The Greeks (Black-76)

Below you will find all Greeks for the Black-76 model as formulas, code and descriptions.

The Black-76 model is a variant of Black-Scholes-Merton and is mostly used to price options on futures and bonds.

Parameters

Reference of all symbols that are used in the formulas:

$F$ = Futures price

$K$ = Strike price

$T$ = Time to maturity (in years)

$r$ = Risk-free rate

$\sigma$ = Volatility

$\phi(.)$ = Probability Density Function (PDF) of $\mathcal{N}(0, 1)$

$\Phi(.)$ = Cumulative Density Function (CDF) of $\mathcal{N}(0, 1)$

$d_1 = \frac{ln(\frac{F}{K}) + \frac{1}{2}\sigma^2 T}{\sigma\sqrt{T}}$

$d_2 = d_1 - \sigma\sqrt{T}$

Delta

Call

$$e^{-rT}\Phi(d_1)$$

Rate of change in option price with respect to the underlying futures price (1st derivative). Proxy for probability of the option expiring in the money.

Source code in blackscholes/call.py
110
111
112
113
114
115
def delta(self) -> float:
    """Rate of change in option price
    with respect to the underlying futures price (1st derivative).
    Proxy for probability of the option expiring in the money.
    """
    return exp(-self.r * self.T) * self._cdf(self._d1)

Put

$$-e^{-rT}\Phi(-d_1)$$

Rate of change in option price with respect to the underlying futures price (1st derivative). Proxy for probability of the option expiring in the money.

Source code in blackscholes/put.py
100
101
102
103
104
105
def delta(self) -> float:
    """Rate of change in option price
    with respect to the underlying futures price (1st derivative).
    Proxy for probability of the option expiring in the money.
    """
    return -exp(-self.r * self.T) * self._cdf(-self._d1)

Gamma

$$e^{-rT} \frac{\phi(d_1)}{F \sigma \sqrt{T}}$$

Rate of change in delta with respect to the underlying stock price (2nd derivative).

Source code in blackscholes/base.py
313
314
315
316
317
318
319
320
321
def gamma(self) -> float:
    """
    Rate of change in delta with respect to the underlying stock price (2nd derivative).
    """
    return (
        exp(-self.r * self.T)
        * self._pdf(self._d1)
        / (self.F * self.sigma * sqrt(self.T))
    )

Vega

Symbol for Vega is $\mathcal{V}$.

$$Fe^{-rT} \phi(d_1) \sqrt{T}$$

Rate of change in option price with respect to the volatility of underlying futures contract.

Source code in blackscholes/base.py
323
324
325
326
327
def vega(self) -> float:
    """Rate of change in option price with respect to the volatility
    of underlying futures contract.
    """
    return self.F * exp(-self.r * self.T) * self._pdf(self._d1) * sqrt(self.T)

Theta

Call

$$-\frac{Fe^{-rT}\phi(d_1)\sigma}{2\sqrt{T}} - rKe^{-rT}\Phi(d_2)+rFe^{-rT}\Phi(d_1)$$

Rate of change in option price with respect to time (i.e. time decay).

Source code in blackscholes/call.py
117
118
119
120
121
122
123
124
125
126
127
128
129
def theta(self) -> float:
    """Rate of change in option price
    with respect to time (i.e. time decay).
    """
    return (
        -self.F
        * exp(-self.r * self.T)
        * self._pdf(self._d1)
        * self.sigma
        / (2 * sqrt(self.T))
        - self.r * self.K * exp(-self.r * self.T) * self._cdf(self._d2)
        + self.r * self.F * exp(-self.r * self.T) * self._cdf(self._d1)
    )

Put

$$-\frac{Fe^{-rT}\phi(d_1)\sigma}{2\sqrt{T}} + rKe^{-rT}\Phi(-d_2) - rFe^{-rT}\Phi(-d_1)$$

Rate of change in option price with respect to time (i.e. time decay).

Source code in blackscholes/put.py
107
108
109
110
111
112
113
114
115
116
117
118
119
def theta(self) -> float:
    """Rate of change in option price
    with respect to time (i.e. time decay).
    """
    return (
        -self.F
        * exp(-self.r * self.T)
        * self._pdf(self._d1)
        * self.sigma
        / (2 * sqrt(self.T))
        + self.r * self.K * exp(-self.r * self.T) * self._cdf(-self._d2)
        - self.r * self.F * exp(-self.r * self.T) * self._cdf(-self._d1)
    )

Rho

Call

$$-Te^{-rT} \bigg[ F\Phi(d_1) - K \Phi(d_2) \bigg]$$

Rate of change in option price with respect to the risk-free rate.

Source code in blackscholes/call.py
131
132
133
134
135
136
137
138
139
def rho(self) -> float:
    """Rate of change in option price
    with respect to the risk-free rate.
    """
    return (
        -self.T
        * exp(-self.r * self.T)
        * (self.F * self._cdf(self._d1) - self.K * self._cdf(self._d2))
    )

Put

$$-Te^{-rT} \bigg[ K\Phi(-d_2) - F \Phi(-d_1) \bigg]$$

Rate of change in option price with respect to the risk-free rate.

Source code in blackscholes/put.py
121
122
123
124
125
126
127
128
129
def rho(self) -> float:
    """Rate of change in option price
    with respect to the risk-free rate.
    """
    return (
        -self.T
        * exp(-self.r * self.T)
        * (self.K * self._cdf(-self._d2) - self.F * self._cdf(-self._d1))
    )

Vanna

$$\frac{\mathcal{V}}{F} \bigg[ 1 - \frac{d_1}{\sigma \sqrt{T}} \bigg]$$

where $\mathcal{V}$ indicates the Vega Greek.

Sensitivity of delta with respect to change in volatility.

Source code in blackscholes/base.py
344
345
346
def vanna(self) -> float:
    """Sensitivity of delta with respect to change in volatility."""
    return self.vega() / self.F * (1 - self._d1 / (self.sigma * sqrt(self.T)))

Vomma

$$\mathcal{V} \frac{d_1 d_2}{\sigma}$$

where $\mathcal{V}$ indicates the Vega Greek.

2nd order sensitivity to volatility.

Source code in blackscholes/base.py
348
349
350
def vomma(self) -> float:
    """2nd order sensitivity to volatility."""
    return self.vega() * self._d1 * self._d2 / self.sigma