2 Options
Options are among the most actively traded financial instruments in the world, with billions of contracts changing hands annually across global exchanges. These versatile contracts provide investors with tools for speculation, hedging, and income generation that are impossible to replicate with stocks and bonds alone.
This chapter provides an introduction to the mechanics and motives for trading options. Recall from Chapter 1 that a call option is the right to buy an underlying asset at a fixed price called the strike or strike price. Symmetrically, a put option is the right to sell an underlying asset at the strike price. The underlying asset can be a stock, index, exchange-traded fund (ETF), commodity, or other financial instrument. The buyer of an option pays the seller upfront for the right to exercise the option later, at the buyer’s discretion.
2.1 Option Basics
Options have a finite lifetime, with the contract specifying an expiration date. Most exchange-traded options can be exercised at any time prior to expiration (American options), while others can only be exercised at the expiration date (European options). Despite their names, both types trade on exchanges worldwide.
- Premium: The price paid to buy an option (like an insurance premium)
- Strike Price: The fixed price at which the option can be exercised
- Expiration Date: When the option contract ends
- Exercise: Using the right granted by the option
- Underlying Asset: The financial instrument (stock, index, etc.) that the option is based on
- Contract Size: Most equity options represent 100 shares of the underlying stock
Moneyness and Time Value
Options are often described according to their relationship to the current price of the underlying asset:
- In-the-money (ITM): Options with intrinsic value (calls with strike < current price, puts with strike > current price)
- Example: call with strike = 50 when underlying asset is trading at 60. Intrinsic value is 60 - 50 = 10.
- Example: put with strike = 80 when underlying asset is trading at 60. Intrinsic value is 80 - 60 = 20.
- At-the-money (ATM): Options with strike price equal or very close to the current underlying price
- Out-of-the-money (OTM): Options with no intrinsic value (calls with strike > current price, puts with strike < current price)
- Example: call with strike of 50 when underlying is trading at 40. Intrinsic value is zero.
- Example: put with strike of 30 when underlying is trading at 40. Intrinsic value is zero.
The time value of an option is defined to be the excess of the option premium above its intrinsic value. As time passes and expiration approaches, options lose time value, called time decay.
Rights, Obligations, and Motivations
Option buyers pay the premium upfront. Subsequently they have rights - they can choose whether to exercise the option - but no obligations. The maximum loss of an option buyer is the option premium. On the other hand, option sellers receive the premium upfront but subsequently they have obligations: they must fulfill the contract if the option is exercised. They face potentially unlimited losses (especially for calls). The motivation for buying an option can be to speculate on the underlying asset price or it can be to hedge an existing risk. The motivation for selling an option is always to receive the option premium.
In summary, the motivations for trading options are:
- Speculation and Leverage: One motive for buying options is to speculate on price movements with higher leverage than direct stock ownership. A small price change in the underlying can produce large percentage changes in option value, amplifying both potential gains and losses.
- Hedging and Insurance: Options serve as insurance contracts for existing positions. For example, owning a protective put on your stock holdings limits downside risk, much like buying car insurance protects against accident costs. The option premium represents the “insurance cost” for this protection.
- Income Generation: Option sellers collect premiums upfront, similar to insurance companies collecting policy premiums. However, this income comes with obligations and potential risks if the market moves against the seller’s position.
2.2 Trading Options on Exchanges
Options are actively traded on organized exchanges and also arranged as private contracts (called over-the-counter or OTC). Exchange-traded options offer standardized contracts with transparent pricing, while OTC options can be customized but involve counterparty risk.
Most option positions on exchanges are closed before expiration through offsetting trades rather than exercise. This allows traders to capture profits, limit losses, or adjust strategies as market conditions change.
Strikes and Maturities
Exchanges determine which strike prices and expiration dates are available for trading. As time passes and options expire, new expiration cycles are introduced. New strike prices are added when the underlying price moves, ensuring strikes bracket the current market price. The number of available strikes and expirations depends on trading interest and exchange policies.
Order Types and Execution
Traders can submit either market orders or limit orders. Market orders execute immediately “at market.” Limit buy orders specify a maximum price the trader is willing to pay and limit sell orders specify a minimum price the trader is willing to accept. A limit order can execute immediately if someone else is willing to take the other side. Otherwise, it joins the queue of limit orders and will eventually execute against an incoming market order when and if the limit price becomes the best available price for the counterparty (the highest price among limit buy orders or the lowest price among limit sell orders) and when it achieves time priority among other limit orders at the same price (i.e., it was the first to arrive).
For an option sell order, trading “at market” means trading at the highest limit buy price in the market. This is the best price, from the seller’s point of view, that other traders are bidding for the option, and it is called the bid price. For an option buy order, trading at market means trading at the lowest limit sell price in the market. This is the best price that other traders are asking for the option, and it is called the ask price. In summary,
- Market Orders execute immediately at the best available price:
- Market buy order → executes at the ask price
- Market sell order → executes at the bid price
- Guaranteed execution but uncertain price
- Limit Orders specify a maximum buy price or minimum sell price:
- Limit buy at $2.40 when ask is $2.60 → order waits in queue
- May get better execution price but risks non-execution
- Provides price control but no execution guarantee
- Example: If you want to buy a call option with bid $2.50 / ask $2.60:
- Market order: Pay $2.60 immediately
- Limit order at $2.55: Wait for seller willing to accept $2.55 (may never happen)
- Limit order at $2.40: Less likely to execute than a limit order at $2.55
- Market order: Pay $2.60 immediately
Open Interest and Contract Creation
Unlike stocks, options have no pre-existing supply. When a new option series (specific strike/expiration combination) is introduced, open interest starts at zero. Options are created through trading activity:
- First trade: 1 buyer + 1 seller → Open interest = 1
- New position created: New buyer + New seller → Open interest increases
- Position closed: Existing holder sells to new buyer → Open interest unchanged
- Both parties close: Existing buyer and seller offset → Open interest decreases
At any time, the number of long positions exactly equals the number of short positions, and this total is called open interest.
The Role of the Clearinghouse
Exchange clearinghouses serve as the counterparty to every options trade, providing several crucial functions:
- Counterparty Guarantee:
- Long call holders have the right to buy from the clearinghouse (not from the original seller)
- Short call writers have an obligation to deliver to the clearinghouse (if assigned)
- This eliminates counterparty risk for traders
- Exercise and Assignment Process:
- Option holder notifies broker of exercise decision
- Broker notifies clearinghouse
- Clearinghouse randomly selects a short position for assignment
- Underlying shares and strike payment flow through clearinghouse
- Margin: Option sellers must post collateral (margin) to ensure they can meet their obligations. This protects the clearinghouse and, ultimately, option buyers from default risk.
- Benefits of the Clearinghouse System:
- Anonymous trading without knowing your counterparty
- Ability to close positions with different traders than your original counterparty
- Standardized contract terms and settlement procedures
- Reduced counterparty risk for all market participants
2.3 Patterns in Option Prices
Figure 2.1 allows us to browse current market data for exchange-traded options. The columns of the table are:
- Strike: the price at which the owner of a call (put) has the right to buy (sell) the underlying asset.
- Bid price: the price that a market sell order will pay (it is the best price that limit orders are bidding for the option)
- Ask price: the price that a price buy order will pay (it is the best price that limit orders are asking for the option)
- Last price: the last price at which the option traded.
- Time of last trade: the day and time at which the option last traded.
- Volume: the number of contracts traded during the day. Each contract is for 100 shares of the underlying asset.
- Open interest: The number of contracts for which there are currently outstanding positions.
Experimenting with Figure 2.1 reveals consistent patterns in how options are priced relative to each other. Understanding these patterns helps build intuition about option values. We should see the following.
Strike Price Effects
- Call Options: Prices decrease as strike prices increase
- A call with strike $50 is worth more than a call with strike $100, so it trades at a higher premium
- Example: If AAPL trades at $150, a $140 call is more valuable than a $160 call
- Put Options: Prices increase as strike prices increase
- A put with strike $100 is worth more than a put with strike $50, so it trades at a higher price
- Example: If AAPL trades at $150, a $160 put is more valuable than a $140 put
Time to Expiration Effects
Longer-dated options cost more because they provide:
- More time for favorable price movements
- Greater flexibility (American options can be exercised over a longer period)
Arbitrage Bounds
American option prices must respect certain minimum values to prevent arbitrage:
- Call Option Lower Bound: \(C \geq \max(S - K, 0)\)
- A call must be worth at least its immediate exercise value
- Example: If AAPL = $150 and call strike = $140, then call price ≥ $10
- Put Option Lower Bound: \(P \geq \max(K - S, 0)\)
- A put must be worth at least its immediate exercise value
- Example: If AAPL = $140 and put strike = $150, then put price ≥ $10
- Why These Bounds Hold: If violated, an arbitrageur could:
- Buy the underpriced option
- Immediately exercise it
- Trade the underlying asset in the opposite direction
- Lock in risk-free profit
These arbitrage bounds mean that option prices equal their intrinsic value with additional time value on top.
2.4 Payoff Diagrams
Understanding option payoffs is fundamental to options trading. A payoff diagram shows the profit or loss from an option position at expiration as a function of the underlying asset price. These diagrams help visualize the risk-reward profile of different option strategies.
At expiration, an option’s value equals its intrinsic value - the amount by which it is “in the money.” For a call option with strike price \(K\), the payoff is \(\max(S_T - K, 0)\) where \(S_T\) is the underlying asset price at expiration. For a put option, the payoff is \(\max(K - S_T, 0)\).
The profit from an option position also accounts for the premium paid (for long positions) or received (for short positions). Let’s examine the four basic option positions:
Long Call
Code
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
# Parameters
= 100 # Strike price
K = 5 # Option premium
premium = np.concatenate([np.linspace(0, K, 50), np.linspace(K, 140, 50)])[:-1] # Include 0 and strike price
S
# Long call payoff and profit
= np.maximum(S - K, 0)
call_payoff = call_payoff - premium
call_profit
= go.Figure()
fig
# Add payoff line
fig.add_trace(go.Scatter(=S, y=call_payoff,
x='lines',
mode='Payoff at Expiration',
name=dict(color='blue', width=2)
line
))
# Add profit line
fig.add_trace(go.Scatter(=S, y=call_profit,
x='lines',
mode='Profit/Loss',
name=dict(color='red', width=2, dash='dash')
line
))
# Add breakeven line
=0, line_dash="dot", line_color="gray",
fig.add_hline(y="Breakeven")
annotation_text
# Add strike price line
=K, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Strike = ${K}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
# Formatting
fig.update_layout(="Long Call Option",
title="Stock Price at Expiration ($)",
xaxis_title="Payoff/Profit ($)",
yaxis_title="plotly_white",
template=600,
width=400,
height=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
A long call position benefits from rising stock prices. The maximum loss is limited to the premium paid ($5), while the potential profit is unlimited. The breakeven point is at the strike price plus the premium ($105).
Long Put
Code
# Long put payoff and profit
= np.maximum(K - S, 0)
put_payoff = put_payoff - premium
put_profit
= go.Figure()
fig
# Add payoff line
fig.add_trace(go.Scatter(=S, y=put_payoff,
x='lines',
mode='Payoff at Expiration',
name=dict(color='blue', width=2)
line
))
# Add profit line
fig.add_trace(go.Scatter(=S, y=put_profit,
x='lines',
mode='Profit/Loss',
name=dict(color='red', width=2, dash='dash')
line
))
# Add breakeven line
=0, line_dash="dot", line_color="gray",
fig.add_hline(y="Breakeven")
annotation_text
# Add strike price line
=K, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Strike = ${K}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Long Put Option",
title="Stock Price at Expiration ($)",
xaxis_title="Payoff/Profit ($)",
yaxis_title="plotly_white",
template=600,
width=400,
height=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
A long put position benefits from falling stock prices. Like the long call, the maximum loss is the premium paid, but the maximum profit is limited (the stock price cannot fall below zero). The breakeven point is at the strike price minus the premium ($95).
Short Call
Code
# Short call payoff and profit (opposite of long call)
= -call_payoff
short_call_payoff = premium - call_payoff
short_call_profit
= go.Figure()
fig
# Add payoff line
fig.add_trace(go.Scatter(=S, y=short_call_payoff,
x='lines',
mode='Payoff at Expiration',
name=dict(color='blue', width=2)
line
))
# Add profit line
fig.add_trace(go.Scatter(=S, y=short_call_profit,
x='lines',
mode='Profit/Loss',
name=dict(color='red', width=2, dash='dash')
line
))
# Add breakeven line
=0, line_dash="dot", line_color="gray",
fig.add_hline(y="Breakeven")
annotation_text
# Add strike price line
=K, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Strike = ${K}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Short Call Option",
title="Stock Price at Expiration ($)",
xaxis_title="Payoff/Profit ($)",
yaxis_title="plotly_white",
template=600,
width=400,
height=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
A short call position (writing a call) benefits from falling or stable stock prices. The maximum profit is the premium received ($5), while the potential loss is unlimited if the stock price rises significantly.
Short Put
Code
# Short put payoff and profit (opposite of long put)
= -put_payoff
short_put_payoff = premium - put_payoff
short_put_profit
= go.Figure()
fig
# Add payoff line
fig.add_trace(go.Scatter(=S, y=short_put_payoff,
x='lines',
mode='Payoff at Expiration',
name=dict(color='blue', width=2)
line
))
# Add profit line
fig.add_trace(go.Scatter(=S, y=short_put_profit,
x='lines',
mode='Profit/Loss',
name=dict(color='red', width=2, dash='dash')
line
))
# Add breakeven line
=0, line_dash="dot", line_color="gray",
fig.add_hline(y="Breakeven")
annotation_text
# Add strike price line
=K, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Strike = ${K}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Short Put Option",
title="Stock Price at Expiration ($)",
xaxis_title="Payoff/Profit ($)",
yaxis_title="plotly_white",
template=600,
width=400,
height=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
A short put position (writing a put) benefits from rising or stable stock prices. The maximum profit is the premium received, while the maximum loss occurs if the stock price falls to zero (loss = strike price - premium).
Summary of Basic Option Positions
The four basic option positions can be summarized as follows:
Position | Market View | Max Profit | Max Loss | Breakeven |
---|---|---|---|---|
Long Call | Bullish | Unlimited | Premium paid | Strike + Premium |
Long Put | Bearish | Strike - Premium | Premium paid | Strike - Premium |
Short Call | Bearish/Neutral | Premium received | Unlimited | Strike + Premium |
Short Put | Bullish/Neutral | Premium received | Strike - Premium | Strike - Premium |
These basic positions form the building blocks for more complex option strategies such as spreads, straddles, and collars.
2.5 Option Portfolios
Individual options can be combined with each other and with the underlying asset to create portfolios with specific risk-reward profiles. These strategies allow investors to implement sophisticated views about market direction, volatility, and risk management. We examine several common option portfolios below.
Protective Put
A protective put combines a long position in the underlying asset with a long put option. This strategy provides downside protection while maintaining upside potential.
Code
# Parameters for all strategies
= 100 # Current stock price
S0 = 95 # Put strike
K_put = 105 # Call strike (for other strategies)
K_call = 3
put_premium = 2
call_premium = np.concatenate([
S 0, 90, 30),
np.linspace(90, 95, 15),
np.linspace(95, 100, 15),
np.linspace(100, 105, 15),
np.linspace(105, 110, 15),
np.linspace(110, 140, 30)
np.linspace(-1] # Include 0 and all strike prices (90, 95, 100, 105, 110)
])[:
# Protective put: Long stock + Long put
= S # Stock value at maturity
stock_payoff = np.maximum(K_put - S, 0) # Put payoff at maturity
put_payoff = stock_payoff + put_payoff
protective_put_payoff
= go.Figure()
fig
# Individual components
=S, y=stock_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Long Stock', line=dict(color='blue', dash='dot')))
name=S, y=put_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Long Put', line=dict(color='green', dash='dot')))
name
# Combined strategy
=S, y=protective_put_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Protective Put', line=dict(color='red', width=3)))
name
=0, line_dash="dot", line_color="gray")
fig.add_hline(y=K_put, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Put Strike = ${K_put}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Protective Put Strategy",
title="Stock Price at Expiration ($)",
xaxis_title="Portfolio Value ($)",
yaxis_title="plotly_white", width=600, height=400,
template=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
The protective put acts like insurance for a stock position. The value at maturity is always at least the put strike price, providing downside protection, while maintaining unlimited upside potential with the stock.
Collar
A collar combines a protective put with a covered call (selling a call option against the stock position). This strategy provides downside protection while capping upside potential in exchange for reducing the net premium cost.
Code
# Collar: Long stock + Long put + Short call
= -np.maximum(S - K_call, 0) # Short call payoff at maturity
call_payoff = stock_payoff + put_payoff + call_payoff
collar_payoff
= go.Figure()
fig
# Individual components
=S, y=stock_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Long Stock', line=dict(color='blue', dash='dot')))
name=S, y=put_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Long Put', line=dict(color='green', dash='dot')))
name=S, y=call_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Short Call', line=dict(color='orange', dash='dot')))
name
# Combined strategy
=S, y=collar_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Collar', line=dict(color='red', width=3)))
name
=0, line_dash="dot", line_color="gray")
fig.add_hline(y=K_put, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Put Strike = ${K_put}")
annotation_text=K_call, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Call Strike = ${K_call}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Collar Strategy",
title="Stock Price at Expiration ($)",
xaxis_title="Portfolio Value ($)",
yaxis_title="plotly_white", width=600, height=400,
template=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
The collar provides a bounded range of values at maturity. The portfolio value is limited to a minimum of the put strike and a maximum of the call strike, regardless of how far the stock price moves.
Bull Call Spread
A bull call spread involves buying a call option and selling another call option with a higher strike price. This strategy profits from moderate upward price movement.
Code
# Bull call spread parameters
= 95 # Lower strike (long call)
K_low = 105 # Higher strike (short call)
K_high = 7
low_call_premium = 3
high_call_premium
# Bull call spread: Long low-strike call + Short high-strike call
= np.maximum(S - K_low, 0) # Long call payoff at maturity
long_call_payoff = -np.maximum(S - K_high, 0) # Short call payoff at maturity
short_call_payoff = long_call_payoff + short_call_payoff
bull_spread_payoff
= go.Figure()
fig
# Individual components
=S, y=long_call_payoff, mode='lines',
fig.add_trace(go.Scatter(x=f'Long {K_low} Call', line=dict(color='blue', dash='dot')))
name=S, y=short_call_payoff, mode='lines',
fig.add_trace(go.Scatter(x=f'Short {K_high} Call', line=dict(color='green', dash='dot')))
name
# Combined strategy
=S, y=bull_spread_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Bull Call Spread', line=dict(color='red', width=3)))
name
=0, line_dash="dot", line_color="gray")
fig.add_hline(y=K_low, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Low Strike = ${K_low}")
annotation_text=K_high, line_dash="dot", line_color="gray",
fig.add_vline(x=f"High Strike = ${K_high}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Bull Call Spread",
title="Stock Price at Expiration ($)",
xaxis_title="Portfolio Value ($)",
yaxis_title="plotly_white", width=600, height=400,
template=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
The bull call spread has a maximum value of (high strike - low strike) when the stock price is at or above the higher strike, and a minimum value of zero when the stock price is at or below the lower strike.
Bear Put Spread
A bear put spread involves buying a put option and selling another put option with a lower strike price. This strategy profits from moderate downward price movement.
Code
# Bear put spread: Long high-strike put + Short low-strike put
= 8
high_put_premium = 4
low_put_premium
= np.maximum(K_high - S, 0) # Long put payoff at maturity
long_put_payoff = -np.maximum(K_low - S, 0) # Short put payoff at maturity
short_put_payoff = long_put_payoff + short_put_payoff
bear_spread_payoff
= go.Figure()
fig
# Individual components
=S, y=long_put_payoff, mode='lines',
fig.add_trace(go.Scatter(x=f'Long {K_high} Put', line=dict(color='blue', dash='dot')))
name=S, y=short_put_payoff, mode='lines',
fig.add_trace(go.Scatter(x=f'Short {K_low} Put', line=dict(color='green', dash='dot')))
name
# Combined strategy
=S, y=bear_spread_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Bear Put Spread', line=dict(color='red', width=3)))
name
=0, line_dash="dot", line_color="gray")
fig.add_hline(y=K_low, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Low Strike = ${K_low}")
annotation_text=K_high, line_dash="dot", line_color="gray",
fig.add_vline(x=f"High Strike = ${K_high}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Bear Put Spread",
title="Stock Price at Expiration ($)",
xaxis_title="Portfolio Value ($)",
yaxis_title="plotly_white", width=600, height=400,
template=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
The bear put spread has a maximum value of (high strike - low strike) when the stock price is at or below the lower strike, and a minimum value of zero when the stock price is at or above the higher strike.
Straddle
A straddle involves buying both a call and a put option with the same strike price. This strategy profits from large price movements in either direction (high volatility).
Code
# Straddle: Long call + Long put (same strike)
= 100
K_straddle = 5
straddle_call_premium = 5
straddle_put_premium
= np.maximum(S - K_straddle, 0) # Call payoff at maturity
straddle_call_payoff = np.maximum(K_straddle - S, 0) # Put payoff at maturity
straddle_put_payoff = straddle_call_payoff + straddle_put_payoff
straddle_payoff
= go.Figure()
fig
# Individual components
=S, y=straddle_call_payoff, mode='lines',
fig.add_trace(go.Scatter(x=f'Long {K_straddle} Call', line=dict(color='blue', dash='dot')))
name=S, y=straddle_put_payoff, mode='lines',
fig.add_trace(go.Scatter(x=f'Long {K_straddle} Put', line=dict(color='green', dash='dot')))
name
# Combined strategy
=S, y=straddle_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Long Straddle', line=dict(color='red', width=3)))
name
=0, line_dash="dot", line_color="gray")
fig.add_hline(y=K_straddle, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Strike = ${K_straddle}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
# Note: Breakeven lines removed since we're showing value at maturity, not profit/loss
fig.update_layout(="Long Straddle",
title="Stock Price at Expiration ($)",
xaxis_title="Portfolio Value ($)",
yaxis_title="plotly_white", width=600, height=400,
template=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
A straddle has its minimum value of zero when the stock price equals the strike price at maturity. The value increases as the stock price moves away from the strike in either direction, with no upper limit on potential value.
Butterfly Spread
A butterfly spread involves buying options at two different strike prices and selling two options at a middle strike price. This strategy profits when the stock price stays near the middle strike (low volatility).
Code
# Butterfly spread parameters
= 90
K_low_bf = 100
K_mid_bf = 110
K_high_bf = 12
low_call_bf_premium = 6
mid_call_bf_premium = 2
high_call_bf_premium
# Butterfly: Long low call + Short 2 middle calls + Long high call
= np.maximum(S - K_low_bf, 0) # Long low call payoff at maturity
bf_low_call = -2 * np.maximum(S - K_mid_bf, 0) # Short 2 middle calls payoff at maturity
bf_mid_call = np.maximum(S - K_high_bf, 0) # Long high call payoff at maturity
bf_high_call = bf_low_call + bf_mid_call + bf_high_call
butterfly_payoff
= go.Figure()
fig
# Individual components
=S, y=bf_low_call, mode='lines',
fig.add_trace(go.Scatter(x=f'Long {K_low_bf} Call', line=dict(color='blue', dash='dot')))
name=S, y=bf_mid_call, mode='lines',
fig.add_trace(go.Scatter(x=f'Short 2x {K_mid_bf} Calls', line=dict(color='green', dash='dot')))
name=S, y=bf_high_call, mode='lines',
fig.add_trace(go.Scatter(x=f'Long {K_high_bf} Call', line=dict(color='orange', dash='dot')))
name
# Combined strategy
=S, y=butterfly_payoff, mode='lines',
fig.add_trace(go.Scatter(x='Butterfly Spread', line=dict(color='red', width=3)))
name
=0, line_dash="dot", line_color="gray")
fig.add_hline(y=K_low_bf, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Low = ${K_low_bf}")
annotation_text=K_mid_bf, line_dash="dot", line_color="gray",
fig.add_vline(x=f"Mid = ${K_mid_bf}")
annotation_text=K_high_bf, line_dash="dot", line_color="gray",
fig.add_vline(x=f"High = ${K_high_bf}")
annotation_text
# Add vertical line at x=0 (y-axis)
=0, line_dash="solid", line_color="black", line_width=1)
fig.add_vline(x
fig.update_layout(="Butterfly Spread",
title="Stock Price at Expiration ($)",
xaxis_title="Portfolio Value ($)",
yaxis_title="plotly_white", width=600, height=400,
template=dict(x=0.02, y=0.98, xanchor='left', yanchor='top'),
legend=True,
xaxis_zeroline='black',
xaxis_zerolinecolor=True,
yaxis_zeroline='black'
yaxis_zerolinecolor
)
fig.show()
The butterfly spread achieves its maximum value when the stock price equals the middle strike at expiration. The value decreases as the stock price moves away from the middle strike, reaching zero when the stock price is at or beyond either outer strike.
Interactive Portfolio Builder
The strategies shown above represent just a few of the many possible option combinations. The interactive figure below allows you to experiment with different option portfolios by entering quantities for various option positions and the underlying asset.
Interactive portfolio builder.
This interactive tool enables you to:
- Build complex option strategies by combining multiple positions
- Visualize the payoff profile of any portfolio combination
- Experiment with different strike prices and position sizes
- Understand how adding or removing positions affects the overall risk-reward profile
Try recreating the strategies we’ve discussed above, or experiment with your own combinations to develop intuition about how option portfolios behave.
2.6 Volume and Open Interest Patterns
Understanding trading volume and open interest patterns provides insight into market behavior and liquidity in options markets. These patterns reflect how traders use options and where market activity concentrates.
The Life Cycle of Open Interest
When an exchange first introduces a new option series (a specific combination of underlying asset, strike price, and expiration date), open interest starts at zero. Open interest represents the total number of outstanding option contracts that have not been closed or exercised.
Initial Growth Phase: As traders begin to notice and trade the new option, open interest grows. Each time a new buyer purchases an option from a new seller (rather than from someone closing an existing position), open interest increases by one contract. For example:
- Day 1: Trader A buys 10 call contracts from Trader B → Open interest = 10
- Day 2: Trader C buys 5 call contracts from Trader D → Open interest = 15
- Day 3: Trader E buys 3 call contracts from Trader A (closing A’s position) → Open interest = 15 (unchanged)
Peak Activity: Open interest typically reaches its peak when the option has several weeks or months remaining until expiration and the strike price is reasonably close to the current stock price. During this phase, the option attracts both speculators and hedgers.
Decline Phase: As expiration approaches, open interest generally declines for several reasons: - Traders close positions by making offsetting trades rather than holding to expiration - Some positions are exercised early (for American options) - Risk managers prefer not to hold options too close to expiration due to increased time decay and volatility
Final Settlement: At expiration, remaining open interest is settled through automatic exercise (for in-the-money options) or expires worthless (for out-of-the-money options).
Why Out-of-the-Money Options Are Popular
Examining Figure 2.1 reveals that trading activity and open interest are often concentrated in out-of-the-money options rather than in-the-money ones. Several factors explain this pattern:
1. Leverage and Cost Efficiency Out-of-the-money options cost significantly less than in-the-money or at-the-money options. This lower cost provides higher leverage, allowing traders to control more shares with the same dollar investment. A trader with $1,000 might be able to buy: - 2 in-the-money calls at $500 each, or
- 20 out-of-the-money calls at $50 each
2. Speculative Appeal Out-of-the-money options offer the potential for large percentage returns if the underlying stock moves favorably. While the probability of profit may be lower, the potential rewards are proportionally higher, attracting speculative traders.
3. Hedging Applications Portfolio managers often use out-of-the-money puts as portfolio insurance. These “tail risk” hedges provide protection against large market declines while minimizing the cost of insurance premiums.
4. Time Value Focus Out-of-the-money options consist entirely of time value (no intrinsic value). Traders who want to bet on volatility or time decay often prefer these options because their value is most sensitive to these factors.
Observable Patterns in Market Data
When examining options market data, several consistent patterns emerge:
Strike Price Distribution: - Volume and open interest concentrate in strikes within roughly 10-20% of the current stock price - Call activity tends to be higher in strikes above the current price - Put activity tends to be higher in strikes below the current price
Maturity Effects: - Near-term expirations (1-8 weeks) typically show the highest volume due to active trading - Longer-term options (3+ months) may show high open interest but lower daily volume - Options expiring in less than a week often see volume spikes as traders close positions
Time Decay Impact: - Options with strikes far from the current price show less frequent trading - Last trade dates for these “far out-of-the-money” options may be days or weeks old - Bid-ask spreads widen significantly for strikes with little trading interest
Asymmetric Patterns: - Put options often show higher implied volatility than calls (volatility skew) - Open interest in puts may spike during market uncertainty - Call open interest may concentrate in strikes just above current resistance levels
These patterns reflect the diverse motivations of options traders: speculation, hedging, income generation, and portfolio management. Understanding these patterns helps explain why certain options trade actively while others remain dormant, and why pricing and liquidity can vary dramatically across different strikes and expirations.
2.7 Put-Call Parity
Put-call parity is one of the most important relationships in options pricing. It establishes a precise connection between the prices of European calls, puts, the underlying asset, and risk-free bonds. This relationship must hold to prevent arbitrage opportunities - riskless profit possibilities that would be quickly eliminated by trader activity.
The Put-Call Parity Relationship
For European options on non-dividend-paying stocks, put-call parity states that:
\[\text{Cash} + \text{Call} = \text{Put} + \text{Underlying}\]
More precisely, if we denote: - \(C\) = price of a European call option - \(P\) = price of a European put option
- \(S\) = current price of the underlying stock - \(K\) = strike price (same for both call and put) - \(r\) = risk-free interest rate - \(T\) = time to expiration
Then put-call parity requires: \[Ke^{-rT} + C = P + S\]
The term \(Ke^{-rT}\) represents the present value of the strike price - the amount of cash that, when invested at the risk-free rate, will grow to exactly \(K\) at expiration.
Understanding the Economic Logic
The put-call parity relationship reflects the fact that two different portfolios have identical payoffs at expiration:
Portfolio A (Left Side): Cash + Call - Hold cash worth \(Ke^{-rT}\) (which grows to \(K\) by expiration) - Own a call option with strike \(K\)
Portfolio B (Right Side): Put + Underlying
- Own a put option with strike \(K\) - Own one share of the underlying stock
Let’s examine what happens at expiration for any stock price \(S_T\):
Case 1: Stock price at expiration \(S_T > K\) - Portfolio A: Cash grows to \(K\), call is worth \((S_T - K)\), total value = \(K + (S_T - K) = S_T\) - Portfolio B: Put expires worthless, stock is worth \(S_T\), total value = \(0 + S_T = S_T\)
Case 2: Stock price at expiration \(S_T \leq K\)
- Portfolio A: Cash grows to \(K\), call expires worthless, total value = \(K + 0 = K\) - Portfolio B: Put is worth \((K - S_T)\), stock is worth \(S_T\), total value = \((K - S_T) + S_T = K\)
Since both portfolios have identical payoffs in all possible scenarios, they must have the same current value to prevent arbitrage opportunities.
Arbitrage Example
Suppose put-call parity is violated. For example, assume: - Stock price: \(S = \$100\) - Strike price: \(K = \$100\)
- Time to expiration: \(T = 0.25\) years (3 months) - Risk-free rate: \(r = 5\%\) - Call price: \(C = \$6\) - Put price: \(P = \$4\)
Present value of strike: \(Ke^{-rT} = 100e^{-0.05 \times 0.25} = \$98.76\)
Put-call parity requires: \(98.76 + 6 = 4 + 100\), or \(104.76 = 104\)
Since \(104.76 > 104\), the left side is overpriced relative to the right side. An arbitrageur would:
- Sell the expensive side: Sell the call and lend $98.76 at the risk-free rate
- Buy the cheap side: Buy the put and buy the stock
- Initial cash flow: \(+6 + 98.76 - 4 - 100 = +\$0.76\) (immediate profit!)
At expiration, regardless of the stock price, the arbitrageur can close all positions with zero net cash flow, keeping the initial $0.76 as riskless profit.
Practical Implications
Put-call parity has several important applications:
1. Options Pricing: If we know the prices of a call, the underlying stock, and the risk-free rate, we can determine what the put price should be (and vice versa).
2. Synthetic Instruments: We can create synthetic positions: - Synthetic call: \(C = P + S - Ke^{-rT}\)
- Synthetic put: \(P = C - S + Ke^{-rT}\) - Synthetic stock: \(S = C - P + Ke^{-rT}\)
3. Conversion and Reversal Strategies: Professional traders use these synthetic relationships to identify mispriced options and construct arbitrage trades.
Important Limitations
Put-call parity as stated above applies specifically to: - European options (cannot be exercised before expiration) - Non-dividend-paying stocks (dividends complicate the relationship) - Same strike price and expiration for both call and put
For American options, the relationship becomes an inequality because early exercise rights have value. For dividend-paying stocks, the present value of expected dividends must be subtracted from the stock price in the parity relationship.
Despite these limitations, put-call parity remains one of the most reliable and useful relationships in options theory, providing a foundation for understanding options pricing and identifying trading opportunities.
2.8 Early Exercise of American Options
Most exchange-traded options are American-style, meaning they can be exercised at any time before expiration. However, early exercise is not always optimal and should be considered carefully. Understanding when early exercise might be beneficial requires analyzing the trade-off between immediate payoff and the option’s remaining time value.
The General Principle: Time Value vs. Intrinsic Value
An option’s market price consists of two components: - Intrinsic value: The immediate payoff if exercised now - Time value: The additional value from the possibility of more favorable price movements before expiration
When you exercise an option early, you capture the intrinsic value but forfeit all remaining time value. Therefore, early exercise is generally only optimal when the time value has become negligible or when other factors make immediate exercise advantageous.
American Calls on Non-Dividend-Paying Stocks
For American call options on stocks that pay no dividends, early exercise is never optimal. This important result follows from the fact that:
- The call’s market value always exceeds its intrinsic value when time remains
- You can always sell the call in the market for more than you would receive from exercising
- There’s no benefit (like dividend capture) that would offset the loss of time value
Example: Suppose you own a call option with strike $100 on a stock currently trading at $110. The intrinsic value is $10, but the option trades for $12 due to remaining time value. Exercising gives you $10, while selling gives you $12 - clearly, selling is superior.
American Puts: When Early Exercise May Be Optimal
American put options, unlike calls, may sometimes benefit from early exercise. This typically occurs when:
1. Deep In-the-Money Puts When a put is very deep in-the-money, its time value becomes small relative to intrinsic value. If the stock price has fallen dramatically, the put may trade close to its intrinsic value, making early exercise reasonable.
2. High Interest Rates Early exercise of a put provides immediate cash that can be invested at the risk-free rate. When interest rates are high, this immediate investment opportunity may outweigh the option’s remaining time value.
3. Extreme Scenarios If the underlying stock becomes worthless (bankruptcy), a put with any strike greater than zero should be exercised immediately since the maximum payoff has been achieved.
Calls on Dividend-Paying Stocks
American calls on dividend-paying stocks present a more complex situation. Early exercise might be optimal:
Just Before Ex-Dividend Date: When a stock pays a large dividend, the stock price typically drops by approximately the dividend amount on the ex-dividend date. Call holders do not receive the dividend, so they may prefer to: 1. Exercise the call just before the ex-dividend date to capture the dividend 2. Accept the loss of time value in exchange for the dividend payment
The decision depends on comparing the dividend amount to the call’s remaining time value.
Practical Considerations
In practice, individual investors rarely find early exercise optimal because:
1. Time Value Loss: The mathematical conditions favoring early exercise are uncommon 2. Transaction Costs: Exercise triggers stock purchase/sale with associated costs
3. Tax Implications: Early exercise may accelerate tax liabilities 4. Liquidity: Selling the option is usually more efficient than exercising
Professional Arbitrageurs are more likely to exercise early when: - They can immediately hedge the resulting stock position - They have identified precise arbitrage opportunities - Transaction costs are minimal due to their trading infrastructure
Looking Ahead
The precise mathematical conditions for optimal early exercise involve sophisticated option pricing models that account for factors like: - Interest rate differentials - Dividend timing and amounts
- Volatility dynamics - The option’s moneyness and time to expiration
These topics are explored in detail in later chapters on American option pricing and numerical methods. For now, the key insight is that while American options provide early exercise flexibility, this right is valuable primarily in specific circumstances rather than as a general trading strategy.
The early exercise feature does make American options more valuable than otherwise identical European options, but this premium is often small except in the special cases outlined above.