Skip to content

5. In-The-Money proxies

There are currently two ways to estimate the probability of an option being "in-the-money" in using the Black-Scholes-Merton model.

  1. Naive estimate
  2. Through dual_delta

Parameters

Reference of all symbols that are used in the formulas:

$T$ = Time to maturity (in years)

$r$ = Risk-free rate

$q$ = Annual dividend yield

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

$d_1 = \frac{ln(\frac{S}{K}) + (r - q + \frac{1}{2}\sigma^2)T}{\sigma\sqrt{T}}$

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

1. Naive estimate

There is a parity between this estimate for calls and puts. In other words, the estimate of a call plus that of a put with same input parameters always equals $1$.

Call

$$\Phi(d_2)$$

from blackscholes import BlackScholesCall
call = BlackScholesCall(S=55, K=50, T=1, r=0.0025, sigma=0.15)
call.in_the_money()  ## 0.71805

Naive Probability that call option will be in the money at maturity.

Source code in blackscholes/call.py
84
85
86
def in_the_money(self) -> float:
    """Naive Probability that call option will be in the money at maturity."""
    return self._cdf(self._d2)

Put

$$1 - \Phi(d_2)$$

from blackscholes import BlackScholesPut
put = BlackScholesPut(S=55, K=50, T=1, r=0.0025, sigma=0.15)
put.in_the_money()  ## 0.28194

Naive Probability that put option will be in the money at maturity.

Source code in blackscholes/put.py
85
86
87
def in_the_money(self) -> float:
    """Naive Probability that put option will be in the money at maturity."""
    return 1.0 - self._cdf(self._d2)

2. Dual Delta

Dual delta is an option Greek that also happens to provide a good estimate of the probability that an option will expire in-the-money.

There is a parity between the dual delta for calls and puts. In other words, the dual delta of call plus dual delta of put with same input parameters always equals $1$.

Call

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

from blackscholes import BlackScholesCall
call = BlackScholesCall(S=55, K=50, T=1, r=0.0025, sigma=0.15)
call.dual_delta()  ## 0.71626

1st derivative in option price with respect to strike price.

Source code in blackscholes/call.py
46
47
48
49
50
def dual_delta(self) -> float:
    """1st derivative in option price
    with respect to strike price.
    """
    return exp(-self.r * self.T) * self._cdf(self._d2)

Put

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

from blackscholes import BlackScholesPut
put = BlackScholesPut(S=55, K=50, T=1, r=0.0025, sigma=0.15)
put.dual_delta()  ## 0.28124

1st derivative in option price with respect to strike price.

Source code in blackscholes/put.py
46
47
48
49
50
def dual_delta(self) -> float:
    """1st derivative in option price
    with respect to strike price.
    """
    return exp(-self.r * self.T) * self._cdf(-self._d2)