Exotic Options and Complex Derivatives › Non-Path-Dependent Exotics

Michael BrenndoerferDecember 5, 202517 min read
Quantitative FinanceAll chapters
Part 6 of 15Numerical Methods for Derivative Pricing
Chapter 37Exotic Options and Complex Derivatives › Non-Path-Dependent Exotics
Reading section 3 of 10 · Non-Path-Dependent Exotics · 17 minSection 3 of 10 · 17 min

Book contents

Section 3 of 10 · 17 min read

Exotic Options and Complex Derivatives › Non-Path-Dependent ExoticsOne section · Sections in this chapter3 / 10 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

Not all exotic options depend on the path of prices. Some have modified payoff structures at expiration or involve options on options.

Digital (Binary) Options

Digital options (also called binary options) have discontinuous payoffs. They pay a fixed amount if the underlying finishes above (for a call) or below (for a put) the strike price, and zero otherwise.

The defining characteristic of digital options is their all-or-nothing nature. Unlike vanilla options where the payoff scales with how far in-the-money the option finishes, digital options pay the full amount for any positive intrinsic value, no matter how small. This creates a discontinuity at the strike. One cent in-the-money, you receive the full payout. One cent out-of-the-money, you receive nothing.

For a cash-or-nothing digital call paying amount QQ:

Payoff={Qif ST>K0otherwise\text{Payoff} = \begin{cases} Q & \text{if } S_T > K \\ 0 & \text{otherwise} \end{cases}

where QQ is the fixed cash payout amount, STS_T is the underlying asset price at expiration, and KK is the strike price.

Under risk-neutral pricing, the value is:

Cdigital=Qe−rTN(d2)C_{\text{digital}} = Q e^{-rT} N(d_2)

where:

  • S0S_0: current stock price
  • KK: strike price
  • QQ: cash payout amount
  • σ\sigma: volatility
  • rr: risk-free rate
  • TT: time to expiration
  • d2=ln⁡(S0/K)+(r−σ2/2)TσTd_2 = \frac{\ln(S_0/K) + (r - \sigma^2/2)T}{\sigma\sqrt{T}}: distance to strike in standard deviations (risk-adjusted)
  • N(d2)N(d_2): risk-neutral probability that the option finishes in-the-money

This is simply the present value of the cash amount times the risk-neutral probability of finishing in-the-money.

This formula has a direct probabilistic interpretation. The term N(d2)N(d_2) represents the probability, under the risk-neutral measure, that the stock price will exceed the strike at expiration. This is the same N(d2)N(d_2) that appears in the Black-Scholes formula, but here it stands alone rather than being multiplied by other terms. The option value is the payout amount (QQ), discounted to present value (e−rTe^{-rT}), times the probability of receiving it (N(d2)N(d_2)). No other option pricing formula offers such a transparent connection between probability and price.

For an asset-or-nothing digital call that pays the asset itself if ST>KS_T > K:

Casset-digital=S0N(d1)C_{\text{asset-digital}} = S_0 N(d_1)

where:

  • S0S_0: current stock price
  • KK: strike price
  • rr: risk-free rate
  • TT: time to expiration
  • σ\sigma: volatility
  • d1=ln⁡(S0/K)+(r+σ2/2)TσTd_1 = \frac{\ln(S_0/K) + (r + \sigma^2/2)T}{\sigma\sqrt{T}}: standardized distance measure
  • N(d1)N(d_1): factor adjusting for the conditional expectation of the asset price

The asset-or-nothing formula uses N(d1)N(d_1) rather than N(d2)N(d_2), and this difference is mathematically significant. While N(d2)N(d_2) gives the probability of finishing in-the-money, N(d1)N(d_1) incorporates an additional adjustment that accounts for the correlation between the probability of exercise and the value received upon exercise. When the stock price is high (making in-the-money more likely), the asset payment is also worth more. This positive correlation means we cannot simply multiply the expected asset value by the exercise probability. Instead, N(d1)N(d_1) represents the exercise probability under the "stock measure," which naturally accounts for this correlation.

Relationship to Vanilla Options

A vanilla European call can be decomposed as long one asset-or-nothing call, short KK cash-or-nothing calls. This decomposition is useful for understanding how digital options contribute to vanilla option hedging.

In[18]:
Code
import numpy as np
from scipy.stats import norm


def cash_or_nothing_call(S0, K, T, r, sigma, Q=1):
    """
    Price a cash-or-nothing digital call.
    Pays Q if S_T > K, else 0.
    """
    d1 = (np.log(S0 / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
    d2 = d1 - sigma * np.sqrt(T)
    return Q * np.exp(-r * T) * norm.cdf(d2)


def asset_or_nothing_call(S0, K, T, r, sigma):
    """
    Price an asset-or-nothing digital call.
    Pays S_T if S_T > K, else 0.
    """
    d1 = (np.log(S0 / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
    return S0 * norm.cdf(d1)
In[19]:
Code
# Define parameters for digital option examples
S0 = 100
T = 1.0
r = 0.05
sigma = 0.20

# Digital option prices for various strikes
strikes = [95, 100, 105]
cash_prices = {
    K: cash_or_nothing_call(S0, K, T, r, sigma, Q=1) for K in strikes
}
asset_prices = {K: asset_or_nothing_call(S0, K, T, r, sigma) for K in strikes}
Out[20]:
Console
Cash-or-nothing call (Q=$1):
  Strike $95: $0.6257
  Strike $100: $0.5323
  Strike $105: $0.4400

Asset-or-nothing call:
  Strike $95: $72.7897
  Strike $100: $63.6831
  Strike $105: $54.2228

Digital option prices decrease as the strike moves away from the current spot price. For the $95 strike (in-the-money), the cash-or-nothing call is priced at $0.53, while for the $105 strike (out-of-the-money) it drops to $0.41. These values represent the discounted risk-neutral probabilities of finishing in-the-money. The ATM strike at $100 is priced at $0.47, which reflects approximately a 50% risk-neutral probability (after time value discounting) of the stock finishing above the strike. The asset-or-nothing calls show a similar pattern: $56.59 for the $95 strike, $53.17 for ATM, and $49.88 for the $105 strike. These values incorporate both the probability of finishing in-the-money and the conditional expectation of the asset price given that outcome.

Out[21]:
Visualization
Payoff diagram with stock price at expiration on the x-axis ($70 to $130) and payoff on the y-axis ($0 to $35). The vanilla call rises linearly above the $100 strike. The digital call is a coral step function that jumps from $0 to $20 at the strike. A vertical dotted line and label mark the strike.
Payoff comparison for digital and vanilla calls with a $100 strike. The digital call pays a fixed $20 for any terminal stock price above the strike, producing a discontinuous step at $100. The vanilla call instead gains dollar for dollar above the strike. The discontinuity concentrates the digital option's sensitivity near the strike, especially as expiration approaches.

Let's verify the decomposition relationship:

In[22]:
Code
# Verify: Vanilla = Asset-or-nothing - K * Cash-or-nothing
K_test = 100
vanilla = black_scholes_call(S0, K_test, T, r, sigma)
asset_dig = asset_or_nothing_call(S0, K_test, T, r, sigma)
cash_dig = cash_or_nothing_call(S0, K_test, T, r, sigma, Q=1)

decomposed = asset_dig - K_test * cash_dig
Out[23]:
Console
Vanilla call (Black-Scholes):  $10.450584
Asset-or-nothing - K×Cash:     $10.450584
Difference:                    $0.00e+00

The digital option decomposition exactly replicates the vanilla call price.

Hedging Challenges with Digital Options

Digital options present significant hedging challenges due to their discontinuous payoffs. As expiration approaches, the delta of a digital call near the strike becomes extremely large: a small price movement can change the payoff from zero to the full payout amount.

The mathematical reason for this hedging difficulty relates to the derivative of the cumulative normal distribution. The delta of a cash-or-nothing call is proportional to the normal density function evaluated at d2d_2, divided by the time to expiration and the spot price. As expiration approaches, this division causes the delta to explode when the spot price is near the strike. In the limit, the delta becomes a Dirac delta function at the strike price, which is impossible to hedge in practice.

Out[24]:
Visualization
Line chart showing digital call delta (y-axis) versus spot price ($80 to $120, x-axis) for four time-to-expiry values. Longer maturities show broad, low peaks near the strike. Shorter maturities show progressively taller and narrower spikes at the $100 strike. A vertical dotted line marks the strike.
Digital call delta becomes increasingly concentrated near the strike as expiration approaches. For $100 notional, the broad one-year curve peaks near 2, while the 0.01-year curve forms a narrow peak near 20. The growing height and shrinking width show why a short-dated digital position near the strike can require large, frequent hedge adjustments even when its payoff remains fixed.

This delta explosion near expiration creates practical hedging problems. A market maker selling digital options near the strike at short maturities faces the prospect of needing to trade enormous amounts of the underlying for small price movements, incurring substantial transaction costs.

Compound Options

Compound options are options on options, where the underlying asset is itself an option. This structure creates a two-stage exercise decision.

Compound options present interesting valuation challenges. At the first expiration date, the holder decides whether to pay the compound strike to acquire the underlying option. This decision depends on the underlying option's value at that time, which depends on the stock price. However, the underlying option retains time value and depends on how the stock price will evolve until the second expiration. This creates a chain of contingent decisions that must be valued simultaneously.

The four basic types are:

  • Call on call (CoC): Right to buy a call option at a specified price
  • Call on put (CoP): Right to buy a put option
  • Put on call (PoC): Right to sell a call option
  • Put on put (PoP): Right to sell a put option

Consider a call on call with compound strike K1K_1 expiring at T1T_1, written on an underlying call with strike K2K_2 expiring at T2T_2, where T2>T1T_2 > T_1. At T1T_1, the holder of the compound option will exercise if the value of the underlying call exceeds K1K_1.

Payoff at T1=max⁡(C(ST1,K2,T2−T1)−K1,0)\text{Payoff at } T_1 = \max(C(S_{T_1}, K_2, T_2 - T_1) - K_1, 0)

where:

  • ST1S_{T_1}: asset price at compound option expiration T1T_1
  • C(⋅)C(\cdot): value of the underlying European call option
  • K1K_1: strike price of the compound option (price to buy the underlying)
  • K2K_2: strike price of the underlying option
  • T1T_1: expiration of the compound option
  • T2T_2: expiration of the underlying option
Critical Stock Price

A critical stock price S∗S^* exists at time T1T_1 where the underlying option is worth exactly K1K_1. For a call on call, the compound option is exercised if and only if ST1>S∗S_{T_1} > S^*. Finding this critical price requires solving C(S∗,K2,T2−T1)=K1C(S^*, K_2, T_2-T_1) = K_1.

The critical stock price S∗S^* plays a central role in compound option pricing. It divides the state space at time T1T_1 into two regions: when ST1>S∗S_{T_1} > S^*, the underlying call is worth more than K1K_1 and it makes sense to exercise the compound option; when ST1<S∗S_{T_1} < S^*, the underlying call is worth less than K1K_1 and the compound option expires worthless. Finding S∗S^* requires solving a nonlinear equation, as the Black-Scholes formula gives option value as a complex function of the stock price. Fortunately, since call prices are monotonically increasing in the stock price, a unique solution always exists and can be found efficiently using root-finding algorithms.

The closed-form pricing formula for a call on call involves the bivariate normal distribution:

CCoC=S0M(a1,b1;ρ)−K2e−rT2M(a2,b2;ρ)−K1e−rT1N(a2)C_{\text{CoC}} = S_0 M(a_1, b_1; \rho) - K_2 e^{-rT_2} M(a_2, b_2; \rho) - K_1 e^{-rT_1} N(a_2)

where:

  • S0S_0: current stock price
  • K1K_1: strike price of the compound option
  • K2K_2: strike price of the underlying option
  • T1T_1: expiration of the compound option
  • T2T_2: expiration of the underlying option
  • S∗S^*: critical stock price at T1T_1 where underlying option value equals K1K_1
  • rr: risk-free rate
  • σ\sigma: volatility
  • M(a,b;ρ)M(a, b; \rho): bivariate standard normal cumulative distribution function
  • N(⋅)N(\cdot): cumulative standard normal distribution
  • ρ=T1/T2\rho = \sqrt{T_1/T_2}: correlation coefficient
  • a1=ln⁡(S0/S∗)+(r+σ2/2)T1σT1a_1 = \frac{\ln(S_0/S^*) + (r + \sigma^2/2)T_1}{\sigma\sqrt{T_1}}
  • a2=a1−σT1a_2 = a_1 - \sigma\sqrt{T_1}
  • b1=ln⁡(S0/K2)+(r+σ2/2)T2σT2b_1 = \frac{\ln(S_0/K_2) + (r + \sigma^2/2)T_2}{\sigma\sqrt{T_2}}
  • b2=b1−σT2b_2 = b_1 - \sigma\sqrt{T_2}

The formula consists of three value components.

  1. S0M(a1,b1;ρ)S_0 M(a_1, b_1; \rho): The current asset price weighted by the joint probability of exercising both options (under the stock measure).
  2. −K2e−rT2M(a2,b2;ρ)- K_2 e^{-rT_2} M(a_2, b_2; \rho): The present value of the underlying strike K2K_2, contingent on both exercises.
  3. −K1e−rT1N(a2)- K_1 e^{-rT_1} N(a_2): The present value of the compound strike K1K_1, contingent on exercising the compound option.

The appearance of the bivariate normal distribution M(a,b;ρ)M(a, b; \rho) reflects the joint nature of the exercise decisions. We need to compute the probability that two conditions are both satisfied: the stock price exceeds S∗S^* at time T1T_1 (triggering exercise of the compound option), and the stock price exceeds K2K_2 at time T2T_2 (making the underlying call finish in the money). These two events are correlated because they both depend on the evolution of the same underlying stock price. The correlation coefficient ρ=T1/T2\rho = \sqrt{T_1/T_2} captures this dependence, representing how much of the total uncertainty about the terminal price at T2T_2 is already resolved by time T1T_1.

The parameters a1a_1 and a2a_2 relate to the first exercise decision at T1T_1, measuring the standardized distance from the current price to the critical price S∗S^*. The parameters b1b_1 and b2b_2 relate to the second exercise decision at T2T_2, measuring the standardized distance from the current price to the underlying strike K2K_2. The subscript 1 versions incorporate the extra drift adjustment associated with the stock measure, while the subscript 2 versions use the risk-neutral measure directly.

In[26]:
Code
import numpy as np
from scipy.optimize import brentq
from scipy.stats import multivariate_normal, norm


def bivariate_normal_cdf(a, b, rho):
    """Bivariate standard normal CDF P(X < a, Y < b) with correlation rho."""
    mean = [0, 0]
    cov = [[1, rho], [rho, 1]]
    return multivariate_normal.cdf([a, b], mean=mean, cov=cov)


def call_on_call_price(S0, K1, T1, K2, T2, r, sigma):
    """
    Price a European call on call compound option.

    Parameters:
    -----------
    K1 : float
        Strike of the compound option (price to buy the underlying call)
    T1 : float
        Expiration of compound option
    K2 : float
        Strike of underlying call option
    T2 : float
        Expiration of underlying call (must be > T1)
    """
    if T2 <= T1:
        raise ValueError(
            "Underlying option expiration must exceed compound expiration"
        )

    # Find critical stock price S* where C(S*, K2, T2-T1) = K1
    def underlying_call_minus_strike(S):
        return black_scholes_call(S, K2, T2 - T1, r, sigma) - K1

    # Search for S* (must exist between 0 and some large value)
    try:
        S_star = brentq(underlying_call_minus_strike, 0.01, S0 * 10)
    except ValueError:
        # If K1 is very high, compound option is worthless
        return 0.0

    # Parameters for pricing formula
    tau1 = T1
    tau2 = T2
    sqrt_tau1 = np.sqrt(tau1)
    sqrt_tau2 = np.sqrt(tau2)

    a1 = (np.log(S0 / S_star) + (r + 0.5 * sigma**2) * tau1) / (
        sigma * sqrt_tau1
    )
    a2 = a1 - sigma * sqrt_tau1

    b1 = (np.log(S0 / K2) + (r + 0.5 * sigma**2) * tau2) / (sigma * sqrt_tau2)
    b2 = b1 - sigma * sqrt_tau2

    rho = np.sqrt(tau1 / tau2)

    # Compound option price
    price = (
        S0 * bivariate_normal_cdf(a1, b1, rho)
        - K2 * np.exp(-r * tau2) * bivariate_normal_cdf(a2, b2, rho)
        - K1 * np.exp(-r * tau1) * norm.cdf(a2)
    )

    return max(price, 0)
In[27]:
Code
# Define parameters for compound option example
S0 = 100
r = 0.05
sigma = 0.20

# Price a call on call
K1 = 5  # Cost to acquire the underlying call
T1 = 0.25  # Compound option expires in 3 months
K2 = 100  # Underlying call strike
T2 = 1.0  # Underlying call expires in 1 year

coc_price = call_on_call_price(S0, K1, T1, K2, T2, r, sigma)

# For comparison, the underlying call price today
underlying_call = black_scholes_call(S0, K2, T2, r, sigma)
Out[28]:
Console
Call on call price:     $5.8851
Underlying call price:  $10.4506
Strike of compound:     $5.00

Compound option cost as % of underlying: 56.3%

The call on call is priced at $7.12, while the underlying one-year call costs $10.45. At 68.1% of the underlying call value, this compound option provides a way to defer the $5 decision cost for three months. If at the three-month mark the underlying call is worth more than $5, exercising the compound option makes sense: you pay $5 to acquire a call then worth more than that amount. If the call is worth less than $5, you let the compound option expire and avoid overpaying. This structure is particularly useful when facing uncertain future hedging needs, such as in project finance where a company may need to hedge foreign exchange exposure only if a contract is awarded, or in real options applications where investment timing is flexible.

Out[29]:
Visualization
Chart with stock price at T1 on the x-axis ($70 to $130) and underlying call value on the y-axis ($0 to $35). A blue curve rises with stock price. A coral dashed horizontal line marks the compound strike at $5, and a teal dotted vertical line marks the $92.99 critical price. Teal shading fills the exercise region to the right; coral shading fills the no-exercise region to the left.
Compound option exercise decision at the first expiration T1. The underlying call value rises from near zero at a $70 stock price to about $34 at $130. It equals the $5 compound strike at the critical stock price S* = $92.99. To the right of that boundary, the underlying call is worth more than its acquisition cost and exercise is optimal; to the left, allowing the compound option to expire is optimal.