Traders in the derivative market often exercise one of the following: Call option or Put Option.
“Call option” is a financial contract between a buyer and seller, whereby the buyer has the right, but not the obligation, to buy an agreed quantity of a financial instrument from the seller of the option at a certain time for a certain price (the strike price). The “Put Option” serves the opposite.
In a “Covered Call”, the seller of the call options owns the corresponding amount of the underlying instrument.
A Covered Call is an income generating option strategy which involves two legs:
- Buying a stock
- Selling an Out of the money (OTM) call option
If the call is sold simultaneously along with the stock purchase, the strategy is referred to as a “buy-write” strategy.
In a Covered Call, the trader holds a neutral to a bullish outlook. Covered Call is a net debit transaction because you pay for the stock and receive a small premium for the call option sold.
The idea of this blog post is to elaborate on the covered call strategy by an example and to plot its payoff using Python. The post also highlights “Calendar Call” as it is a modification of the Covered Call strategy.
Let us take an example straight away to understand the working of a Covered Call, its payoff, and the risk involved in the strategy.
Covered Call Strategy example:
SBI stock is trading at Rs. 189 on April 29th, 2015.
Leg 1: Buy 100 shares of the stock for Rs. 189
Leg 2: Sell the 195 strike May 26th 2015 Call for Rs.6.30, Lot size – 100 shares
The amount paid to take these two positions equals – Stock price paid minus call premium received, i.e. Rs. 18,900 (Stock purchase) – Rs. 630 (Premium received) = Rs. 18,270
If the stock price rises above the call strike of 195, it will be exercised, and the stock will be sold. However, the strategy will make a profit because you are covered by the stock you own.
Say, the stock price at expiration is Rs. 200. The profit made is given by
Profit = Call premium received + ((Call strike - stock price paid) x Shares) Profit = Rs. 630 + ((195 – 189) x 100) = Rs. 1,230
If the stock falls below the initial stock purchase price, your long position is in a loss, but you have some cushion from the call premium received by selling the call.
Say, the stock falls and is at Rs. 180 on expiration. The loss incurred is given by
Loss = Call premium received + ((stock price at expiration - stock price paid) x Shares) Loss = Rs. 630 + ((180 – 189) x 100) = - Rs. 270
One can employ the Covered Call strategy by selling calls on a monthly basis, and thus generating monthly income by way of premiums.
The Risk-Reward Profile for Covered Call is as given below:
1. Maximum Risk – (Stock price paid – call premium received)
2. Maximum Reward – (Call strike – stock price paid) + call premium received
3. Breakeven – (Stock price paid – call premium received)
Python code for Covered Call Payoff chart
Below is the code for Long Stock, Short Call and Covered call payoff chart in Python.
# Covered Call import numpy as np import matplotlib.pyplot as plt s0=189 # Initial stock price k=195;c=6.30; # Strike price and Premium of the option shares = 100 # Shares per lot sT = np.arange(0,2*s0,5) # Stock Price at expiration of the Call # Profit/loss from long stock position y1= (sT-s0) * shares # Payoff from a Short Call Option y2 = np.where(sT > k,((k - sT) + c) * shares, c * shares) # Payoff from a Covered Call y3 = np.where(sT > k,((k - s0) + c) * shares,((sT- s0) + c) * shares ) # Create a plot using matplotlib fig, ax = plt.subplots() ax.spines['top'].set_visible(False) # Top border removed ax.spines['right'].set_visible(False) # Right border removed ax.spines['bottom'].set_position('zero') # Sets the X-axis in the center ax.tick_params(top=False, right=False) # Removes the tick-marks on the RHS plt.plot(sT,y1,lw=1.5,label='Long Stock') plt.plot(sT,y2,lw=1.5,label='Short Call') plt.plot(sT,y3,lw=1.5,label='Covered Call') plt.title('Covered Call') plt.xlabel('Stock Prices') plt.ylabel('Profit/loss') plt.grid(True) plt.axis('tight') plt.legend(loc=0) plt.show()
We use the matplotlib library to plot the charts. We first create an empty figure and add a subplot to it. Then we remove the top & the right border and move the X-axis at the center. Using the plt.plot function we plot payoffs for Long stock, Short Call, and the Covered Call. Finally, we add the title, labels, and the legend in the chart.
Calendar Call Strategy
Calendar Call is a variation of a Covered Call strategy, where the long stock position is substituted with a long-term long call option instead.
The Calendar Call strategy involves two legs:
- Buying a long-term expiration call with a near the money strike price and
- Selling a short-term call option with the same strike price
With a Calendar Call, the outlook of the trader is neutral to bullish. This is a net debit transaction because calls bought will be more expensive than the calls sold, which have less time value. The Calendar Call like the Covered Call can be an income generating strategy by way of selling short-term calls on a monthly basis.
Let us take an example of a Calendar Call to understand its payoff, and the risk involved in the strategy.
XYZ stock is trading at Rs. 187 on May 2nd, 2015, with historical volatility at 40% and a risk-free rate of 8%.
Leg 1: Buy the 190 strike July 28th 2015 Call for Rs.20.70, Lot size – 100 shares
Leg 2: Sell the 190 strike May 26th 2015 Call for Rs.7.50, Lot size – 100 shares
1st Scenario: At May expiration the stock falls to Rs.180
Long call is worth approximately Rs.8.80; loss of Rs.11.90
Short calls expire worthless, and we pocket the profit of Rs.7.50
Total position – loss of Rs.4.40
2nd Scenario: At May expiration the stock rises to Rs.205
In this case, the stock has risen above the strike price. The short call will get exercised. The price of the long call is approximately Rs.23.60; profit of 2.90.
Sell long call for a profit of Rs.2.90
Keep short call premium of Rs.7.50
Short call expires at Rs.15 ITM. Buy stock at Rs.205; Sell stock at Rs.190 – loss of Rs.15
Hence total position – loss of Rs.4.60
The Risk-Reward Profile for Calendar Call is as given below:
- Maximum Risk – Limited to the net debit paid
- Maximum Reward – (Value of the long call at the time of the short call expiration, when the stock price is at the strike price) minus (net debit)
Python code for Calendar Call Payoff chart
Below is the code for Short Call, Long Call Premium, and the Calendar call payoff.
# Calendar Call Strategy import p4f import numpy as np from datetime import datetime import matplotlib.pyplot as plt s0 = 187 # Initial stock price on May 2nd, 2015 k = 190 # Strike price of the May 26th 2015 and July 28th 2015 Call Option cs = 7.50; # Premium of the Short call on May 2nd, 2015 cl = 20.70; # Premium of the Long call on May 2nd, 2015 shares = 100 # Shares per lot sT = np.arange(0,2*s0,5) # Stock Price at expiration of the Call sigma = 0.4 # Historical Volatility r = 0.08 # Risk-free interest rate t = datetime(2015,7,28) - datetime(2015,5,26) ; T = t.days / 365; # Payoff from the May 26th 2015 Short Call Option at Expiration y1 = np.where(sT > k,((k - sT) + cs) * shares, cs * shares) # Value of the July 28th 2015 long Call Option on May 26th 2015 lc_value = p4f.bs_call(sT,k,T,r,sigma) * shares # Payoff from the Calendar Call y2 = y1 + (lc_value - cl) # Create a plot using matplotlib fig, ax = plt.subplots() ax.spines['top'].set_visible(False) # Top border removed ax.spines['right'].set_visible(False) # Right border removed ax.spines['bottom'].set_position('zero') # Sets the X-axis in the center ax.tick_params(top=False, right=False) # Removes the tick-marks on the RHS plt.plot(sT,y1,lw=1.5,label='Short Call') plt.plot(sT,lc_value,lw=1.5,label='Long Call') plt.plot(sT,y2,lw=1.5,label='Calendar Call') plt.title('Calendar Call') plt.xlabel('Stock Prices') plt.ylabel('Profit/loss') plt.grid(True) plt.axis('tight') plt.legend(loc=0) plt.show()
We use the matplotlib library to plot the charts. We first create an empty figure and add a subplot to it. Then we remove the top & the right border and move the X-axis at the center. Using the plt.plot function we plot payoffs for Short Call, Long Call Premium, and the Calendar Call. Finally, we add the Title, labels, and the legend in the chart.
If you liked what you read, please give us feedback in the comments section below. For more such strategies and python codes, go through our blogs section. If you are looking for python codes to build technical indicators like Moving Average or Ease of Movement, you will find it here. In case you are wondering what makes Python most preferred language for Algorithmic Traders, we have a cool infographic about it.
If you are a coder or a tech professional looking to start your own automated trading desk. Learn automated trading from live Interactive lectures by daily-practitioners. Executive Programme in Algorithmic Trading covers training modules like Statistics & Econometrics, Financial Computing & Technology, and Algorithmic & Quantitative Trading.Enroll now!