We all know that option prices are calculated with the Black-Scholes formula, using a volatility, time-to-maturity, strike and forward. Typically you just chuck them all into your computer and let it spit out the number.
Trouble with this is how do you get an intuition for prices, especially when you are looking at options trades like conditional steepeners or calendar spreads?
Recently I set myself the problem of getting some simple way to cross-check the numbers coming out of my PC, and to get some intuition for the way an option’s value decays to its intrinsic value as the forward moves (which is what you definitely need for options trading).
In this post I show you a simple approximation I have found which does a pretty stellar job of accurately telling you the price of an option at any strike, and which you can calculate in your head!
The 2 flavours of Black Scholes: lognormal or normal
Most people are familiar with the flavour of the Black-Scholes formula which is based on a so-called geometric brownian motion, and which needs a so-called lognormal vol as its input.
In concrete terms, lognormal vols are like the numbers you see in the VIX index: 40% is big, 10% is small.
A lognormal vol of 10% is saying that the annual return on an asset can sit in a range about 10% wide.
Makes sense: stocks can return something like 5%, but maybe they’ll return 10% in a good year or make 0% in a bad year.
In the world of interest rates, however, it is more intuitive to express changes in terms of the absolute moves: if the 10y rate was 4% last year and 5% now, then the normal vol might be something like 1% per year (or 100 basis points or 100bps per year).
The less-known Black-Scholes formula that uses these normal vols looks quite like the lognormal version.
If you are interested, click here for a paper which shows the full derivation of the BS normal formula.
All we need to know for this post is that the Black-Scholes normal flavour formula for the price of a call & put is:
In these two equations the d1 term is defined as:
It is just an alternative way of saying how far away you are from the strike of your option, I’ll talk more about it below.
Remark: In the world of swaptions trading (options on interest-rate swaps), the formulas don’t need the exp{-r(T-t)} term at the front, so in the following I basically assume r=0 and never write that part — I just use the terms inside the square brackets.
Pricing an at-the-money option: well-known and easy
For an at-the-money call or put (ie where K=F), the price is the same, let’s call it ATMPrice. The BS formula reduces to a simpler:
ATMPrice = 1/sqrt(2*PI) * vol * sqrt(Maturity)
which is very well approximated by:
ATMPrice = 0.4 * vol * sqrt(Maturity).
Here is an example in action:
if interest rates have a normal vol of 100bps per year, then the ATM 5y5y payer would cost about:
ATM 5y5y payer ~ 0.4 * 0.01 * 2.2 * 4.5 = 3.95%.
Note that the ’4.5′ accounts for the duration of the underlying swap (a 5-year swap has a duration of about 4.5 at the current level of rates).
Nice so far, but it is going to get better
Options which are not ATM: my new discovery
The standard decomposition for an option is:
Option value = Intrinsic value + Time value.
Let’s compare that with the Black-Scholes normal formula from above:
This is where I got my Eureka! moment.
If you have a look at the term (F-K)N(d1) in a spreadsheet, you’ll see that for small levels of volatility and maturity (try, for example, sigma=0.25%, Maturity=1) it is actually quite close to Max(0,F-K) – which is the intrinsic value of the call.
Consequently, the BS normal formula is almost:
Call Price = Intrinsic + ATMPrice*exp(-0.5*d1*d1).
Eureka!
But not so fast.
If you compare this formula to the correct BS formula in a spreadsheet, you’ll see that around the strike it gives too much value to the call: basically the term ATMPrice*exp(-0.5*d1*d1), is too big when d1 is non-zero and small. This is telling us that the difference between (F-K)N(d1) and Max(0,F-K) gets important near the strike. As I say, have a look in a spreadsheet.
Nonetheless, this simple-but-wrong formula for the Call Price has pointed us in the right direction: it shows that the time value of the option should be written in terms of the price of the ATM option.
Starting with the Black-Scholes normal flavour formula, adding and subtracting Max(0,F-K) then rearranging and using the 0.4 trick, gives (with a blatant effort to own this decomposition):
The Hardy Decomposition:
Option Price = Intrinsic + ATMPrice*HardyFactor
where
HardyFactor
= exp(-0.5*d1*d1) + d1/0.4*N(d1) – Max(d1/0.4,0).
Note that this is just a function of d1, which as I said above, is just a measure of how far you are from the strike in terms of the standard deviation to the option expiry date (being vol*sqrt(Maturity) ) of the underlying asset: eg
“I am 2 standard devs from the strike” means d1=2,
The lovely bit about the Hardy Decomposition is that the HardyFactor is well approximated by a simple expression:
Better still, you can just remember a few values:
abs(d1) | HardyFactor |
---|---|
0 | 100% |
0.25 | 70% |
0.5 | 50% |
1 | 25% |
1.5 | 12% |
If you experiment a bit you’ll find better approximations. Here’s one I quite like and which is more accurate:
Let’s now look at some examples.
Example 1: Pricing a 5y5y 200-wide strangle
The time to maturity is 5, and we need sqrt(5) to calculate d1. Sqrt(5) = 2.23, which is pretty-much two and a quarter.
Therefore the standard deviation sigma*sqrt(Maturity) is just 2.25*normal vol.
For example, if normal vol is 100 bps per year, then
- d1=1 when the forward is 225 bps from the strike
- d1=0.5 when the forward is 112 bps from the strike
- so d1 is just a bit less than 0.5 when the strike is 100 bps either side of the forward.
This means that the HardyFactor for each of our payer and receiver is going to be about 60%.
The ATMPrice is just 0.4*standard deviation = 90 bps.
The 200-wide strangle has got no intrinsic value when we first put the trade on, so
Strangle Price = 2 * 90 bps * 60% * Duration.
The Duration is going to be about 4.5-ish at the moment. The option-value bit (2*90*0.6) is equal to 108 bps (being 90% of 120, if you think about it). Multiplying everything together gives a final answer of:
Strangle Price = about 490 bps.
By the way, I calculate 108*4.5 as 1.08*450 which is just under 450+(another 10% of 450).
I said it was nice!
Example 2: Pricing a 10y 2s10s conditional steepener
The standard 2s10s steepener means receiving in 2-year swaps and paying in 10-year swaps (click here to see a post I wrote which tells you that steepening means buying shorter-dated bonds vs selling longer-dated bonds).
In options space, this trade means that we want to be long duration in a 10y2y swaption, and short duration in a 10y10y swaption. Some people would say
“we want a long (delta) position in 2y tails vs a short (delta) position in 10y tails”.
For this example we will get that position by:
- buying a 1y2y receiver,
- buying a 1y10y payer.
Of course, there are others ways to do this: you could for example buy the 1y2y receiver and sell a 1y10y receiver, and achieve a zero-cost trade (that would be leveraging).
First we calculate a few values which will help us identify the sorts of strikes we can afford.
Suppose that vol is 100 bps per year, then
d1 is 1 when the strikes are 100 bps out-of-the-money.
The ATMPrice is
ATMPrice = 0.4 * 100 bps = 40 bps.
Durations are roughly:
2y Duration ~ 1.8,
10y Duration ~ 9.
A conditional steepener trade would be done with duration-weighted notionals so that the delta on both positions is equal, and will generally be out-of-the-money at inception (so intrinsic = 0). Consequently we can write out the prices of the two trades:
1y2y Receiver = 40 bps * HardyFactor1 * 1.8,
1y10y payer = 40 bps * HardyFactor2 * 9 * 1.8/9,
and we can see that if we want to spend about the same amount upfront as we would for a 1y2y ATM call (40 bps * 1.8) then we need to choose our strikes so that
HardyFactor2 = HardyFactor1 = 50%.
According to the table above, this would mean having d1 around 0.5, and our conditional steepener trade is therefore:
- buy a 1y2y receiver with strike 50 bps out of the money,
- buy a 1y2y payer in sinxe 1.8/9 which is also 50 bps out of the money.
You can see how other variations of the conditional steepener can work.
Conclusion
All in all I reckon this is a pretty funky post.
This new & simple Hardy Decomposition representation of an option price gives a huge improvement to one’s intuition of options trades: the value of an option is just its intrinsic value plus a proportion of the ATM Price.
In a follow-up post I will use the Hardy Decomposition to show the intuition for calendar spreads, and another will show how easy the option greeks become when you think of options in this way.
Update
Now go and read my post here which uses this simple decomposition to explain why implied vols have a smile.
