2
$\begingroup$

With a calendar spread (buying back, selling front), max loss is defined as some variant of "maximum potential loss is the cost of opening the trade (Premium Paid − Premium Received = Total Debit)"

What is the intuition/rationale behind this being the max loss? (edit: assuming that the position is closed when the short expiry occurs)

$\endgroup$
5
  • $\begingroup$ Is this a quote from somewhere? If so can you provide the reference? $\endgroup$
    – phdstudent
    Mar 7 at 21:31
  • 1
    $\begingroup$ The quote is from this site: learn.bybit.com/options/what-is-a-calendar-spread $\endgroup$ Mar 8 at 7:47
  • $\begingroup$ The statement does not appear to be correct: imagine the underlying rises sharply until the first date, causing a loss on the call that you are short, but then comes back down by the second date making the call that you are long worthless. Then your loss could be bigger than the cash flow from opening the trade. $\endgroup$
    – nbbo2
    Mar 8 at 12:51
  • $\begingroup$ There are similar definitions elsewhere 1 2 3 $\endgroup$ Mar 8 at 18:21
  • 1
    $\begingroup$ @nbbo2 for purposes of this discussion, assume that the trade is closed when the front month (short options) expires. $\endgroup$ Mar 8 at 18:24

2 Answers 2

7
$\begingroup$

This is not necessarily true. Take a high dividend paying stock (10%) for example. If deep ITM, you would have a loss higher than the initial cost for european options, or face an early exercise for amercian options.

I will follow an example from Fidelity.

A long calendar spread with calls is created by buying one “longer-term” call and selling one “shorter-term” call with the same strike price. In the example a two-month (56 days to expiration) 100 Call is purchased and a one-month (28 days to expiration) 100 Call is sold. This strategy is established for a net debit (net cost)...

Fidelity also shows the following figure:

enter image description here

Let's define Black Scholes in Julia:

using Distributions, DataFrames
N(x) = cdf(Normal(0,1),x)

function BSM(S,K,t,r,d,σ, cp) # (cp = 1 for call, -1 for put)
  d1 = ( log(S/K) + (r - d + 1/2*σ^2)*t ) / (σ*sqrt(t))
  d2 = d1 - σ*sqrt(t)
  opt  = cp*exp(-d*t)S*N(cp*d1) - cp*exp(-r*t)*K*N(cp*d2)
  return opt
end

Fidelity states the following further below:

*Profit or loss of the long call is based on its estimated value on the expiration date of the short call. This value was calculated using a standard Black-Scholes options pricing formula with the following assumptions: 28 days to expiration, volatility of 30%, interest rate of 1% and no dividend.

So assume S=K=100, r = 0.01, d=0 and σ = 0.3, which in Julia gives us the following, which is essentially identical to Fidelity's numbers (note that I use negative values as cash outflows; usually one would show the cost/premium of the option as a positive value):

enter image description here

Fidelity shows a profit and loss table below:

enter image description here

Let's focus on s = 105. The near dated that we sold expiries in the money, which results in a loss of 5 (105-100), which is net -1.65 because we received 3.35 from selling the option. The long dated option still has 28 days left now. Black Scholes states it is worth ~6.52. Therefore, we have a total of ~1.76 (-4.75 + 6.51). This gives a profit of ~0.11.

Let's look at Julia again and make it interactive:

using Plots, PlotThemes
theme(:juno)
gui = @manipulate for k = 80:1:120, σ_init = 0.01:0.01:0.75, days_short = 1:1:100, days_long = 1:1:200,
    s = 80:1:120, r = -0.2:0.01:0.2, d = -0.2:0.01:0.2, σ_end = 0.01:0.01:0.75;
    t1 = days_short/365
    t2 = days_long/365
    spot = ["At Initiation", 150, 125,120,115,110,105,100,95,90,85,80,75, 50]
    short_28_day = append!([-BSM.(s,k,t1,r,d,σ_init,1)[1]],-max.(spot[2:end] .-k,0).+BSM.(s,k,t1,r,d,σ_init,1)[1])
    long = append!([BSM.(s,k,t2,r,d,σ_init,1)[1]] ,-BSM.(s,k,t2,r,d,σ_init,1)[1] .+ [x[1] for x in BSM.(spot[2:end],k,t2-t1,r,d,σ_end,1)])
    net = short_28_day .+ long
    df = DataFrame(Spot = spot, short = short_28_day, long = long, net = net )
    #plot(df.Spot[2:end], df.net[2:end], label = "Long Calendar Spread with Calls at expiration of Short Call")
    #hline!([-df.net[1]], label = "Max Loss", ylimit = [minimum(df.net)*1.2,maximum(df.net)*1.7])
    #hline!([0], label = false, linewidth = 0.5)
    #vline!([110], label = "Negative time value (see below)")
end

@layout! gui vbox(vbox(vbox(vbox(vbox(hbox(s, k),hbox( σ_init, σ_end)),hbox(r,d),hbox(days_short,days_long)))), observe(_)) 

enter image description here

This is again very similar to Fidelities example (the first line with (1.05) net loss is computed wrongly by Fidelity).

Looks good and the intuition is explained nicely at Fidelity's page:

  • If the stock price falls sharply, then the price of both calls approach zero (you simply end up with your initial cost).
  • If the stock price rallies sharply so that both calls are deep in the money, then the prices of both calls approach parity (time value will be zero).

Fidelity also shows a chart, which can be replicated with the Julia code from above by uncommenting (get rid of #) the plot section in the code. The result looks like this:

enter image description here

One of the provided links also states that

Calendar spreads are long vega (volatility), meaning they perform best when volatility moves higher.

This is easy to show in the chart. I added a second $\sigma$ to allow for a different IV at expiry of the short dated.

enter image description here

Now the interesting part

High dividends (or negative interest rates), will look like this.

enter image description here

The point where the strategy loses more money than the upfront cost is where time value of a european option turns negative. See for example this answer. If you plot this for the exact option at hand, you will see the following figure. Once time value turns negative, you will end up with a loss that exceeds the initial expense.

spot = 80:1:130
plot(spot,[x[1] for x in BSM.(spot,100,28/365,0.0,0.1,0.3,1)].- BSM.(100,100,28/365,0.0,0.1,0.3,1)[1], label = "Option Premium", ylabel = "Option Value", xlabel = "Spot")
plot!(spot, max.(spot.-100,0).- BSM.(100,100,28/365,0.0,0.1,0.3,1)[1], label = "Intrinsic Value", legend = :topleft)
hline!([0],linewidth= 0.3, label = false)

enter image description here

$\endgroup$
3
  • 2
    $\begingroup$ Thank you for the answer, would you also be willing to share the Julia code for the graph? $\endgroup$ Mar 9 at 13:36
  • 2
    $\begingroup$ @Hans-Peter Schrei. No problem. I am on vacation without a laptop at the moment. Will post an update once I am back. $\endgroup$
    – AKdemy
    Mar 11 at 19:03
  • 1
    $\begingroup$ @Hans-Peter Schrei, I added the code for the graph. $\endgroup$
    – AKdemy
    Mar 17 at 21:02
3
$\begingroup$

Based on the clarification in the comments, I would give the following reasoning:

  • If the stock price moves far away from the strike in either direction, then the maturity of the call option matters less and less and the difference in price of the call options of the two maturities approaches zero. In both cases the initial investment is lost.
  • If the stock price falls, then the price of both call options approaches zero for a price difference of zero.
  • If the stock price rises, then the price of both call options approaches the same limit, for a price difference of zero.
  • Outside of these limiting cases, if the stock price is above the strike price at expiry of the short call option, both options have the same intrinsic value, but while the time value of the short call option is zero, the time value of the long call option is positive, resulting in a payoff that reduces the possible loss from the initial investment or that exceeds it to make a profit.
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.