-
Option Payoffs 4
-
Lecture1.1
-
Lecture1.2
-
Lecture1.3
-
Lecture1.4
-
-
Binomial Model 8
-
Lecture2.1
-
Lecture2.2
-
Lecture2.3
-
Lecture2.4
-
Lecture2.5
-
Lecture2.6
-
Lecture2.7
-
Lecture2.8
-
-
Black-Scholes 6
-
Lecture3.1
-
Lecture3.2
-
Lecture3.3
-
Lecture3.4
-
Lecture3.5
-
Lecture3.6
-
-
Monte Carlo Simulations 3
-
Lecture4.1
-
Lecture4.2
-
Lecture4.3
-
Delta Hedging Puts
Like we did for call options, let’s find what a put option does with a $1 move. In this case we will look at buying 1000 put options at a strike price of $55 and all the same parameters.
df = pd.DataFrame(np.arange(49,51.01,.01), columns = ['Stock Price'])
df['Put Value'] = df['Stock Price'].apply(lambda x: black_scholes_put(x, 55, .08, .03, 1) * 1000 ) - black_scholes_put(50, 55, .08, .03, 1) * 1000
df = df.set_index('Stock Price')
df['Put Value'].plot(kind='line')
plt.ylabel("Put Option Profit")
plt.xlabel("Stock Price")
plt.title("Put Option Profit")
plt.show()
df['Put % Return'] = df['Put Value'] / (black_scholes_put(50, 55, .08, .03, 1) * 1000)
ax = df['Put % Return'].plot(kind='line')
plt.ylabel("Put Option Profit %")
plt.xlabel("Stock Price")
plt.title("Put Option Profit %")
ax.yaxis.set_major_formatter(PercentFormatter(xmax=1))
plt.show()
As you can see, the option value is very sensitive. Again we could look into a delta hedged portfolio. In this case, it will be a long stock position to balance the negative delta from the long put options.
n_puts = 1000
delta = black_scholes_put_delta(50, 55, .08, .03, 1)
print("Put Delta")
print(delta)
print()
long_puts_t0 = black_scholes_put(50, 55, .08, .03, 1)*n_puts
print("Value of Puts")
print(long_puts_t0)
print()
n_stock = delta * n_puts * -1
print("Number of shares of stock to hedge")
print(n_stock)
print()
long_stock_t0 = n_stock * 55
print("Value of shares of stock")
print(long_stock_t0)
Now look at our delta hedged portfolio and its performance.
#If there is an immediate change in price either way we are protected
df = pd.DataFrame(np.arange(49,51.01,.01), columns = ['Stock Price'])
#The call profit is the difference between the starting value and current value
df['Put Value'] = df['Stock Price'].apply(lambda x: black_scholes_put(x, 55, .08, .03, 1) * n_puts ) - long_puts_t0
#The stock profit is the difference times the number of stocks (we are short so the profits are flipped)
df['Stock Value'] = (df['Stock Price'] - 50) * n_stock
#The hedged call value is the two profits added together
df['Hedged Put'] = df['Put Value'] + df['Stock Value']
#Plot the profits
df = df.set_index('Stock Price')
df['Hedged Put'].plot(kind='line')
plt.show()
Expand to the larger range.
#Expand to a larger range
df = pd.DataFrame(np.arange(40,65.1,.1), columns = ['Stock Price'])
#The call profit is the difference between the starting value and current value
df['Put Value'] = df['Stock Price'].apply(lambda x: black_scholes_put(x, 55, .08, .03, 1) * n_puts ) - long_puts_t0
#The stock profit is the difference times the number of stocks (we are short so the profits are flipped)
df['Stock Value'] = (df['Stock Price'] - 50) * n_stock
#The hedged call value is the two profits added together
df['Hedged Put'] = df['Put Value'] + df['Stock Value']
#Plot the profits
df = df.set_index('Stock Price')
df['Hedged Put'].plot(kind='line')
plt.show()
In this case, we once again see in the very short term that the portfolio is protected. But if we look at the expiration it won’t be the case. The interest here is going to be negative because both positions were long.
#At expiration the payoff profile is different though...
df = pd.DataFrame(np.arange(40,65.1,.1), columns = ['Stock Price'])
#The call profit is the intrinsic value at expiration
df['Put Value'] = df['Stock Price'].apply(lambda x: max(55-x, 0) * n_puts ) - long_puts_t0
#The stock profit is the difference times the number of stocks (we are short so the profits are flipped)
df['Stock Value'] = (df['Stock Price'] - 50) * n_stock
#The hedged call value is the two profits added together
df['Hedged Put'] = df['Put Value'] + df['Stock Value']
net_cash = -(long_puts_t0 + long_stock_t0)
print("Net cash:")
print(net_cash)
print()
interest = np.exp(.03) * net_cash - net_cash
print("Interest:")
print(interest)
df['Hedged Put'] = df['Hedged Put'] + interest
#Plot the profits
df = df.set_index('Stock Price')
df['Hedged Put'].plot(kind='line')
plt.show()