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:
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:
-
Buy one call option with a strike price
$K_1$
. -
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:
-
Buy one put option with a strike price
$K_1$
. -
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:
-
Buy one call option with a time to maturity
$T_1$
and strike price$K_1$
. -
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:
-
Buy one put option with a time to maturity
$T_1$
and strike price$K_1$
. -
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