The Broken Wing Butterfly Option Spread
Table of Contents
Say we have the following values:
Stock Price | 100 |
Stock Volatility | 0.3 |
Risk-free rate | 0.05 |
Call premium | 1.00 |
time | 1/12 |
For our butterfly and broken-wing butterfly we'll use the following strike prices in the table below. Using the Black-Scholes option pricing model, we can calculate the call option price for each strike.
import numpy as np from scipy.stats import norm def bs(stock, strike, rf, vol, time): d1 = (1 / (vol * np.sqrt(time))) * (np.log(stock / strike) + (rf + (vol * vol) / 2) * time) d2 = d1 - vol * np.sqrt(time) call = norm.cdf(d1) * stock - norm.cdf(d2) * strike * np.exp(-rf * time) return round(call, 2)
Strike Price | Call Premium |
---|---|
90 | 10.78 |
100 | 3.66 |
110 | 0.68 |
120 | 0.07 |
1. Butterfly
import seaborn import numpy import matplotlib.pyplot as plt plt.style.use("dark_background") class Butterfly: def __init__(self, strike_1, strike_2, strike_3, price_1, price_2, price_3): self.strike_1 = strike_1 self.strike_2 = strike_2 self.strike_3 = strike_3 self.price_1 = price_1 self.price_2 = price_2 self.price_3 = price_3 def plot(self): lower_range = self.strike_1 - 10 upper_range = self.strike_3 + 10 underlying_price = list(range(lower_range, upper_range+1)) profit_strike_1 = numpy.array([max(i - self.strike_1, 0) - self.price_1 for i in underlying_price]) profit_strike_2 = -2 * numpy.array([max(i - self.strike_2, 0) - self.price_2 for i in underlying_price]) profit_strike_3 = numpy.array([max(i - self.strike_3, 0) - self.price_3 for i in underlying_price]) spread_profit = profit_strike_1 + profit_strike_2 + profit_strike_3 spread_plot = seaborn.lineplot(x = underlying_price, y = spread_profit) fig = spread_plot.get_figure() fig.savefig("butterfly_profit.png") ## spread_plot ## plt.show() def max_min(self): ## calculate max gain, max loss, and b/e-------