Skip to content

6. Option Structures

Several options can be compounded in what we call "Option Structures". This allows us to hedge out directional bets and bet purely on volatility.

The structures that we discuss here:

  1. Straddle
  2. Strangle
  3. Butterfly
  4. Iron Condor
  5. Spreads
  6. Iron Butterfly

All structures have a long and short version. price, get_core_greeks, get_all_greeks and all greeks can individually be retrieved from the compound structures. To see what greeks can be computed check section 3.The Greeks (Black Scholes).

Parameters

Reference of all symbols that are used in the formulas:

$C$ = Call option

$P$ = Put option

$S$ = Asset price

$K$ = Strike price

$T$ = Time to maturity (in years)

$r$ = Risk-free rate

$sigma$ = Volatility

1. Straddle

Straddles are built a call and put option with the same strike price $K$ and the same expiration date. If applied correctly this allows one to profit from volatility regardless of the direction of the underlying asset.

Long straddle (BlackScholesStraddleLong):

$$P(K) + C(K)$$

from blackscholes import BlackScholesStraddleLong

straddle = BlackScholesStraddleLong(S=55, K=50, T=1.0,
                                    r=0.0025, sigma=0.15)
straddle.price()  ## 7.5539
straddle.delta()  ## 0.5328

Short straddle (BlackScholesStraddleShort):

$$-P(K) - C(K)$$

from blackscholes import BlackScholesStraddleShort

straddle = BlackScholesStraddleShort(S=55, K=50, T=1.0,
                                     r=0.0025, sigma=0.15)
straddle.price()  ## -7.5539
straddle.delta()  ## -0.5328

2. Strangle

Strangles are similar to straddles, but now the call and put option have different strike prices. This structure can be profitable if the underlying asset will have a large movement, regardless of which direction the movement is.

$K_1$ = Strike price for the put.

$K_2$ = Strike price for the call.

It must hold that $K_1 < K_2$.

Long strangle (BlackScholesStrangleLong):

$$P(K_1) + C(K_2)$$

from blackscholes import BlackScholesStrangleLong

strangle = BlackScholesStrangleLong(S=55, K1=40, K2=50, T=1.0,
                                    r=0.0025, sigma=0.15)
strangle.price()  ## 6.3800
strangle.delta()  ## 0.7530

Short strangle (BlackScholesStrangleShort):

$$-P(K_1) - C(K_2)$$

from blackscholes import BlackScholesStrangleShort

strangle = BlackScholesStrangleShort(S=55, K1=40, K2=50, T=1.0,
                                     r=0.0025, sigma=0.15)
strangle.price()  ## -6.3800
strangle.delta()  ## -0.7530

3. Butterfly

The butterfly is a combination of three options. One implements this when one believes the future volatility of the underlying asset is going to be lower or higher than the implied volatility when long or short, respectively.

Choose three strike prices $K_1$, $K_2$ and $K_3$.

Two conditions must hold when choosing strike prices:

  • $K_1<K_2<K_3$

  • $K_2-K_1=K_3-K_2$ (i.e. option position should be symmetric)

Long (call) butterfly (BlackScholesButterflyLong):

$$C(K_1) - 2C(K_2) + C(K_3)$$

from blackscholes import BlackScholesButterflyLong

butterfly = BlackScholesButterflyLong(S=55, K1=40, K2=50, K3=60, 
                                      T=1.0, r=0.0025, sigma=0.15)
butterfly.price()  ## 3.9993
butterfly.delta()  ## -0.2336

Short (put) butterfly (BlackScholesButterflyShort):

$$-P(K_1) + 2P(K_2) - P(K_3)$$

from blackscholes import BlackScholesButterflyShort

butterfly = BlackScholesButterflyShort(S=55, K1=40, K2=50, K3=60, 
                                       T=1.0, r=0.0025, sigma=0.15)
butterfly.price()  ## -3.9993
butterfly.delta()  ## 0.2336

4. Iron Condor

The iron condor makes use of four different strike prices and is a variant of the butterfly. The structure involves 2 call options and 2 put options.

Choose four strike prices $K_1$, $K_2$, $K_3$ and $K_4$.

Two conditions must hold when choosing strike prices:

  • $K_1<K_2<K_3<K_4$

  • $K_4-K_3=K_2-K_1$ (i.e. option position should be symmetric)

Long iron condor (BlackScholesIronCondorLong):

$$-P(K_1) + P(K_2) + C(K_3) - C(K_4)$$

from blackscholes import BlackScholesIronCondorLong

iron_condor = BlackScholesIronCondorLong(S=55, K1=20, K2=25, K3=45, K4=50, 
                                         T=1.0, r=0.0025, sigma=0.15)
iron_condor.price()  ## 4.0742
iron_condor.delta()  ## 0.1572

Short iron condor (BlackScholesIronCondorShort):

$$P(K_1) - P(K_2) - C(K_3) + C(K_4)$$

from blackscholes import BlackScholesIronCondorShort

iron_condor = BlackScholesIronCondorShort(S=55, K1=20, K2=25, K3=45, K4=50, 
                                          T=1.0, r=0.0025, sigma=0.15)
iron_condor.price()  ## -4.0742
iron_condor.delta()  ## -0.1572

5. Spreads

A spread consists of buying and selling one option of the same type with often different strike prices. The potential payoff and losses are hereby bounded on both sides.

Choose two strike prices $K_1$ and $K_2$.

Bull spread (BlackScholesBullSpread)

For a bull spread:

  1. Buy one call option with a strike price $K_1$.

  2. Sell one call option with a strike price $K_2$.

It must hold that $K_1 < K_2$.

$$C(K_1) - C(K_2)$$

from blackscholes import BlackScholesBullSpread
bull_spread = BlackScholesBullSpread(S=55, K1=40, K2=50, T=1.0,
                                     r=0.0025, sigma=0.15)
bull_spread.price()  ## 8.8011
bull_spread.delta()  ## 0.2202

Bear spread (BlackScholesBearSpread)

For a bear spread:

  1. Buy one put option with a strike price $K_1$.

  2. Sell one put option with a strike price $K_2$.

It must hold that $K_1 > K_2$.

$$P(K_1) - P(K_2)$$

from blackscholes import BlackScholesBearSpread
bear_spread = BlackScholesBearSpread(S=55, K1=50, K2=40, T=1.0,
                                     r=0.0025, sigma=0.15)
bear_spread.price()  ## 1.1740
bear_spread.delta()  ## -0.2202

Calendar Call Spread (BlackScholesCalendarCallSpread)

For a calendar call spread:

  1. Buy one call option with a time to maturity $T_1$ and strike price $K_1$.

  2. Sell one call option with a time to maturity $T_2$ and strike price $K_2$.

If $K_1 \neq K_2$ we call it a diagonal call spread.

If $K_1 = K_2$ we call it a horizontal call spread.

It must hold that $T_1 > T_2$.

$$C(K_1, T_1) - C(K_2, T_2)$$

from blackscholes import BlackScholesCalendarCallSpread
calendar_call_spread = BlackScholesCalendarCallSpread(S=55, K1=40, K2=50, T1=1.0, T2=0.5,
                                                      r=0.0025, sigma=0.15)

calendar_call_spread.price()  ## 9.5308
calendar_call_spread.delta()  ## 0.1543

Calendar Put Spread (BlackScholesCalendarPutSpread)

For a calendar put spread:

  1. Buy one put option with a time to maturity $T_1$ and strike price $K_1$.

  2. Sell one put option with a time to maturity $T_2$ and strike price $K_2$.

If $K_1 \neq K_2$ we call it a diagonal put spread.

If $K_1 = K_2$ we call it a horizontal put spread.

It must hold that $T_1 > T_2$.

$$P(K_1, T_1) - P(K_2, T_2)$$

from blackscholes import BlackScholesCalendarPutSpread
calendar_call_spread = BlackScholesCalendarPutSpread(S=55, K1=40, K2=50, T1=1.0, T2=0.5,
                                                      r=0.0025, sigma=0.15)

calendar_put_spread.price()  ## -0.5066
calendar_put_spread.delta()  ## 0.1543

6. Iron Butterfly

An iron butterfly combines concepts from the iron condor and butterfly. In principle it is very similar to an iron condor, but all strike prices must be equidistant. Like with the iron condor we combine two put options and two call options. Two options will have the same strike price.

Choose three strike prices $K_1$, $K_2$, $K_3$.

Two conditions must hold when choosing strike prices:

  • $K_1<K_2<K_3$

  • $K_3-K_2=K_2-K_1$ (i.e. equidistant strike prices).

Long iron butterfly

$$-P(K_1) + P(K_2) + C(K_2) - C(K_3)$$

from blackscholes import BlackScholesIronButterflyLong
iron_butterfly = BlackScholesIronButterflyLong(S=55, K1=95, K2=100, K3=105, 
                                               T=1.0, r=0.0025, sigma=0.15)
iron_butterfly.price()  ## 4.9873
iron_butterfly.delta()  ## -0.0001

Short iron butterfly

$$P(K_1) + - P(K_2) - C(K_2) + C(K_3)$$

from blackscholes import BlackScholesIronButterflyShort
iron_butterfly = BlackScholesIronButterflyShort(S=55, K1=95, K2=100, K3=105, 
                                                T=1.0, r=0.0025, sigma=0.15)
iron_butterfly.price()  ## -4.9873
iron_butterfly.delta()  ## 0.0001