Applied Options

Long Strangle

Definition

Long Strangle is an options trading strategy that involves the simultaneous buying of an out-of-the-money put and an out-of-the-money call of the same underlying stock and expiration date. Similar to Long Straddle, Long Strangle has unlimited profit and limited risk and can be applied if traders think some major news events may cause the stock to make a sharp move either up or down during the life of the options. But it differs from Long Straddle in that the call strike is above the put strike.

price = np.arange(700,1000,1)
# Suppose the undelying price at time 0 is 830
k_call = 870 # The strike price of OTM call
k_put = 795 # The strike price of OTM put
premium_call = 8 # premium of call option
premium_put = 10 # premium of put option
# payoff for the long call
payoff_long_call = [max(-premium_call, i-k_call-premium_call) for i in price]
# payoff for the long put
payoff_long_put = [max(-premium_put, k_put-i-premium_put) for i in price]
payoff = np.sum([payoff_long_call, payoff_long_put], axis=0)
plt.figure(figsize=(20,15))
plt.plot(price, payoff_long_call, label = 'Long Call')
plt.plot(price, payoff_long_put, label = 'long put')
plt.plot(price, payoff, label = 'Long Strangle')
plt.legend(fontsize = 20)
plt.xlabel('Stock Price at Expiry',fontsize = 15)
plt.ylabel('payoff',fontsize = 15)
plt.title('Long Strangle Payoff',fontsize = 20)
plt.grid(True)
long strangle strategy payoff

From the payoff plot, the most that you can lose in a Long Strangle is the total premium you pay for holding the long position of both a put and a call option. The maximum loss occurs when the stock price falls between the strike price of two options. All options are worthless on expiration. The maximum gain of Long Strangle is unlimited for upside move because a stock's price has no maximum threshold.

Implementation

Step 1: Initialize your algorithm including setting the start and end date, setting the cash and filtering the options contracts. Note here in SetFilter, the strike price should range from negative to positive because we need to choose out-of-the-money put and call options from candidate contracts. The strike price of OTM call should be greater than ATM options and the strike price of OTM put should be lower than ATM options.

def Initialize(self):
	self.SetStartDate(2017, 4, 1)
	self.SetEndDate(2017, 5, 30)
	self.SetCash(100000)
	equity = self.AddEquity("GOOG", Resolution.Minute)
	option = self.AddOption("GOOG", Resolution.Minute)
	self.symbol = option.Symbol
	# set our strike/expiry filter for this option chain
	option.SetFilter(-15, 15, timedelta(30), timedelta(60))
	# use the underlying equity GOOG as the benchmark
	self.SetBenchmark(equity.Symbol)

Step 2: Sort the option chain by expiration date and choose an expiration date you want to trade. For demonstration purpose, here we choose options with the furthest expiration date in candidate contracts. Then filter out the call options which expire on that date.

for i in optionchain:
	if i.Key != self.symbol: continue
	chain = i.Value
	# sorted the option chain by expiration date and choose the furthest date
	expiry = sorted(chain,key = lambda x: x.Expiry, reverse=True)[0].Expiry
	# filter the call options from the contracts expires on that date
	call = [i for i in chain if i.Expiry == expiry and i.Right == 0]

Step 3: Sort the call options by their expiration date and choose the deep OTM contract which has the largest strike price.

call_contracts = sorted(call,key = lambda x: x.Strike)
if len(call_contracts) == 0: continue
# choose the deep OTM call option
self.call = call_contracts[-1]

Step 4: Select the put options which have the same expiration date with the call option and sort the put options by strike price. Then choose the deep out-of-the-money put which has the minimum strike price among all the available put options.

put_contracts = sorted([i for i in chain if i.Expiry == expiry and i.Right == 1], key = lambda x: x.Strike)
# choose the deep OTM put option
self.put = put_contracts[0]

Step 5: Buy the call and the put options at the same time and wait until expiration.

self.Buy(self.call.Symbol ,1)
self.Buy(self.put.Symbol ,1)

Summary

In this algorithm, at time 0, we buy OTM call with strike price 870 and OTM put with strike price 795. The share price of GOOG at time 0 is $832.8. At the expiry, the share price of GOOG is $930.16. Therefore we conclude the call option is exercised then we get 100 long stocks position. The put option expires worthless.

You can enter into Long Strangle if you have no clear idea of market direction but forecast there will be a great movement in the underlying asset. As the options you buy are all out of the money, that reduces the cost of this strategy. But because the call and the put options are all out of the money, the stock will need to move even more significantly than long straddle to gain positive profit from this strategy.

Algorithm

Backtest using SetFilter

Backtest using OptionChainProvider

You can also see our Documentation and Videos. You can also get in touch with us via Chat.

Did you find this page Helpful ?