-
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
-
Options
A call option gives the buyer the option to either buy a stock at a certain price or leave it unexercised. So in the case of a call option with a strike price of $50, if at the end of the time specified the stock were $60, the buyer could exercise the option to get the stock at a price of $50 instead. From there, the buyer might sell the stock for an immediate profit of $10 or could keep the stock. If, on the other hand, the stock had dropped to $40, the buyer would just not exercise the option since they would be able to buy it cheaper in the market at $40 instead of paying the $50 strike price. Because of this, the payoff from an option is at a minimum $0. Due to the fact that you can only make money, the buyer has to pay a premium for the option to compensate. Thus, the formula is:
$$\text{S = Stock Price}$$
$$\text{X = Strike Price of Call Of -$3 instead of -$5).
import pandas as pd
#Example of profit and payoff of
df = pd.DataFrame(list(range(101)), columns = ['Stock Price'])
df['$50 Call Payoff'] = df['Stock Price'].apply(lambda x: max(x-50, 0))
df['$50 Call Profit'] = df['$50 Call Payoff'] - 5
df = df.set_index('Stock Price')
print(df)
import matplotlib.pyplot as plt
#Graph the payoff
ax = df['$50 Call Payoff'].plot(kind='line')
ax.axhline(0, linestyle='--', color='grey')
plt.xlabel('Stock Price')
plt.ylabel('Payoff')
plt.title("$50 Call Option Payoff")
plt.show()
import matplotlib.pyplot as plt
#The cost is just a linear shift downwards
ax = df['$50 Call Profit'].plot(kind='line')
ax.axhline(0, linestyle='--', color='grey')
plt.xlabel('Stock Price')
plt.ylabel('Profit')
plt.title("$50 Call Option Profit")
plt.show()
There are different strike prices on options as well. For example, if you plot a call option with a strike price of $60, you can see that it is a horizontal shift to the right of $10 for the payoff profile.
#Compare with a $60 strike price call
df['$60 Call Payoff'] = [max(x-60, 0) for x in df.index]
ax = df[['$50 Call Payoff', '$60 Call Payoff']].plot(kind='line')
ax.axhline(0, linestyle='--', color='grey')
plt.xlabel('Stock Price')
plt.ylabel('Payoff')
plt.title("Call Option Payoffs")
plt.show()
Put options are the opposite of this. For put options, the buyer is given the option to sell at a given stock price. So, if the stock was only $40 in the market but the put option had a strike price of $50, the buyer could buy a stock for $40 and immediately sell the stock for $50 with the put options realizing a payoff of $10. Quite like call options, you do have to pay for the put option since there is no negative payoff and only positive payoffs anywhere the option doesn’t payoff with 0.
$$\text{S = Stock Price}$$
$$\text{X = Strike Price of Put Option}$$
Do the same analysis for put options.
#A put option works in the opposite way
df['$50 Put Payoff'] = [max(50-x, 0) for x in df.index]
ax = df['$50 Put Payoff'].plot(kind='line')
ax.axhline(0, linestyle='--', color='grey')
plt.xlabel('Stock Price')
plt.ylabel('Payoff')
plt.title("$50 Put Option Payoff")
plt.show()
#Profit still is just a linear shift down
df['$50 Put Profit'] = df['$50 Put Payoff'] - 5
ax = df['$50 Put Profit'].plot(kind='line')
ax.axhline(0, linestyle='--', color='grey')
plt.xlabel('Stock Price')
plt.ylabel('Profit')
plt.title("$50 Put Option Profit")
plt.show()
Compare both of these to the payoff and profit if you were to buy a stock for $50 and later sell it given whatever price it was between $0 and $100.
#Notice the obvious payoff/profit that comes from actually owning a stock if it were at $50 right now
df['Stock Payoff'] = df.index
df['Stock Profit'] = df['Stock Payoff']-50
ax = df[['Stock Payoff', 'Stock Profit']].plot(kind='line')
ax.axhline(0, linestyle='--', color='grey')
plt.xlabel('Stock Price')
plt.ylabel('Profit/Payoff')
plt.title("$50 Stock")
plt.show()
Bonds pay off the same no matter what the stock pays off as. If we were to buy a bond at $100 today, and then receive $105 in a year (a 5% coupon on $100 plus $100 face value), we would get the following payoff graphs:
#Now consider a 1 year 5% coupon bond priced at $100. It's payoff is independent of stock price!
df['Bond Payoff'] = 105
df['Bond Profit'] = df['Bond Payoff'] - 100
ax = df[['Bond Payoff', 'Bond Profit']].plot(kind='line')
ax.axhline(0, linestyle='--', color='grey')
plt.xlabel('Stock Price')
plt.ylabel('Profit/Payoff')
plt.title("Par 1 Year 5% Coupon Bond")
plt.show()
ption}$$
These options can either be american or european. We are mainly going to consider european options but the difference is in when you can exercise the options. European means only at the end of the contract can you trigger the option, where as American means at any time you can trigger the option between buying it and the actual end of the contract. By end of the contract, we mean expiration date, which is the date the option specifies. There are many possible dates, for example you might be able to buy one that expires in a week, or you may instead opt to buy one that expires in a few months.
Now, let’s consider an option contract with a strike price of $50 which we paid $5 to buy. At expiration, our payoff depends on what the stock price is. Our profit is the same except we have already paid $5 so we must subtract that out. The following code plots the payoff and profit for the option. You will notice the profit is just a vertical shift down of $5, because no matter what the stock price is we have already paid $5. This means that to break even, the stock price needs to be at least $55 or greater. However, even at $52, for example, we would exercise the option because we have a payoff of $2 (and a profit o