If you construct a portfolio from 2 stocks and one is $100 and the other is $10, buying a share of each means the first will dominate your portfolio’s risk, assuming they have the same volatility.
If you have $100,000 to invest, you can balance the risk by equal-weighting the holdings: $50k into each stock. You buy 500 shares of A and 5,000 shares of B.
But what if they aren’t the same volatility?
Equal-weighting means the most volatile stocks determine performance. If your $100,000 is split equally between the 2 stocks and A moves 10% per day while B moves 1% per day, you aren’t diversified. Stock A will mostly determine your returns.
We can achieve more balance via equal-risk-weighting, which adjusts how many dollars go into each stock based on its volatility.
Weight each stock by 1/vol:
Stock A gets 1/10
Stock B gets 1/1.
Divide by the total (1/10 + 1 = 1.1) and you get about 9% in A and 91% in B. Stock A is 10x as risky, so it gets about 1/10th the dollars.
On $100,000 that’s roughly $9k of A and $91k of B, corresponding to
91 shares of A
9,100 shares of B
Compared to the equal-dollar portfolio, the equal-risk portfolio requires you’d sell about 409 shares of A and buy about 4,100 shares of B, moving roughly 41% of your total portfolio value from the jumpy stock to the calm one.
No masochism for the kids but in case you’re interested…
Equal risk weighting is the starting point for so-called risk parity weighting. The difference is that instead of only considering the volatility a holding adds to the portfolio, the correlation is considered. A stock highly correlated with the rest of your portfolio contributes a lot of risk, while an anti-correlated one does a better job diversifying and reducing total portfolio risk. The effect can be so strong that even a highly volatile but anti-correlated stock can reduce total risk.
Computing a correlation-aware risk contribution requires a full covariance matrix and an optimizer — i.e., a guess-and-test calculator — to find the portfolio weights, since there’s no closed-form solution. If the kids can grok equal vol-weighting I feel like I’ve done my job, and they can discover risk parity on their own if they’re so inclined.)
Your own Portfolio HQ Spreadsheet
This workbook is designed to organize and monitor your first portfolio.
We recently added multi-leg support to our Attribution Visualizer, our tool for allowing you to track an option contract’s p/l assuming you hedged the delta daily. The tool breaks out the p/l according to gamma + theta (which sum to realized p/l) and to implied vol (vega p/l).
With multi-leg support, you can now entertain yourself with countless questions. Like “how would a masochistic skew trade work out if I trade a risk reversal and hedge daily?”
I ran a few risk reversals through the attribution tool.
Initial hedge: Short 73 shares per risk reversal (the RR had .73 delta)
The war had already flipped the skew hard toward upside strikes. The $140 call traded 94% vol against the $100 put’s 83% IV. It cost $5.83 in option premium.
At expiration, the stock expired at $114.87
So how did it work out to buy the premium IV?
moontower.ai
moontower.ai
Not good. The cumulative delta-hedged p/l was a loss of over $4.50 as you lost to both realized vol and vega. At the initiation of the trade, paying the premium vol meant you were flattish gamma but paying theta.
You were also long vega because, despite the options being equidistant, at a generally elevated vol level the lognormality of the underlying distribution and its associated positive skew pumps up the delta of calls. In fact, the 140 call was ~.47 while the 100 put, which is closer in dollar space, was only .27d. The higher call delta says the 140 strike is much “closer in vol space”. That’s why the equidistant risk reversal cost so much premium to buy the call. You are buying at OTM that has a delta that we usually associate with near ATM options!
Let’s adjust the strikes so that our call and put are both ~.25d
To equalize deltas against the $100 put you have to buy…drum roll please…
The $190 call! 58% OTM for 101% IV. Now you collect a $2.17 credit to own the call and short the 100 put. Your initial Greeks mostly vanish.
The trade still loses, but it fares much better as the loss is only $1.29.
It’s tempting to conclude paying a premium vol doesn’t work. But if you bought the much cheaper call and shorted the put on a hedged riskie in SPY before the war started, then you got smoked if you chose April 30th expiry (SPY bottomed the last day of Q1), recovered once the market started rallying, only to lose again as the market…continued rallying! SPY riskie:
moonotwer.ai
I’ve said it repeatedly over the years in different ways, but riskies are the whips and leather of the option world. If you bought the call on the SPY Feb 720/650 risk reversal on the first trading day of the year and hedged daily until expiration, you actually would have lost $.25 despite the following:
the trade collected about $2.75 in premium at the outset
the stock’s closing prices stayed inside the range of $675-$700
the call you bought was 10.2% IV and the put you sold was 16.8% IV
moontower.ai
In Financial Hacking, Philip Maymin invents an optimistic junior trading assistant who sits down his bosses at the bank to explain that he has found an infinite money machine. Selling the high IVs in SPY puts and buying the cheap IV in SPY calls. Maymin asks the reader to figure out why this logic doesn’t work.
Our tool provides the day-by-day audit which feeds the charts. Armed with that, Claude does an admirable job of not only answering Maymin’s prompt to the reader but also pinpointing exactly which days carry the biggest weight in the answer.
If you buy options implying a daily vol of 2% per day and it moves 4% per day, your expectancy is positive regardless of whether you hedge or not. That doesn’t mean you will win any more than it means you will win if you flip a fair coin and receive 2-1 odds. You have made Sklansky bucks, not necessarily real bucks.
Hedging reduces the p/l variation around the expectancy.
In Financial Hacking, Philip Maymin explains
The inability to hedge perfectly continuously impacts your trading by introducing random risk. This risk decreases if you hedge more frequently, but only as fast as the square root. Therefore, if you want to halve your risk, you have to hedge four times as often.
He makes this tangible and practical when he says:
Noise from hedging a one-year option on a daily basis instead of continuously is about the same as one volatility point. If you make one volatility point in expected profit and the standard deviation of your profit is one volatility point, then your Sharpe ratio is about one.
His final point echoes my argument that a requirement to hedge to isolate vol is a misconception:
The risk from not hedging continuously can be diversified away.
I built a simulator so you can see this scaling law in action.
An oblique insight can be witnessed if you set up the simulation with negative expectancy, ie pay 24% vol for a stock that realizes 20%. The more you hedge the more certain you lock in negative expectancy.
Doug Costa actually showed that happen in the toy example above. The investor who bought the 110 calls based on the real-world probability but then hedged by shorting the mispriced security actually assured themselves of a loss.
If you have no edge, variance is your friend. Not financial advice.
In a random walk where trials are independent, variance scales linearly with time. Since standard deviation is the square root of variance, volatility scales with sqrt(T).
This sublinear power law scaling gets smuggled into option math that answers practical questions. For example, assuming implied vol is constant, a 12-month ATF straddle is twice the price of a 3-month ATF straddle because sqrt (12/3) = 2.
This scaling is commonly used to convert raw vega into weighted vega. Raw vega is an extremely low-resolution number. If you own 50k 12-month vega vs being short 40k 3-month vega then it appears like you are long vol. But 12-month IV doesn’t whip around as much as 3-month IV, so this position will not act like it’s long vol on a large move higher in vol as the term structure will not “parallel shift” higher. The 3-month will increase faster as the term structure steepens into a downward sloping shape. A shape referred to as “inverted” or “backwardated”.
A simple way to modify raw vega is to scale all your monthly vegas by 1/sqrt(T) by normalizing them to a fixed DTE, for example 3 months. In that case, using the same math we did above, a 12-month vega is cut in half relative to the 3-month.
So your re-weighted vega is now short 15k vega instead of being long 10k vega!
12-month vega x scaling factor relative to 3m vega = +50k * 1/sqrt(12/3) = +25k
3-month vega x scaling factor relative to 3m vega = -40k * 1/sqrt(3/3) = -40k
Net: -15k
That volatility changes should move in proportion to 1/sqrt(T) is not a commandment brought down from Moses. It’s a convenient scaling factor that corresponds better, even if imperfectly, to empirical vol surface behavior. It also has a handy interpretation. If IV’s change in proportion to 1/sqrt(T) then ATM time spreads are unchanged (net of theta). In other words, the 3m/12month straddle spread is unchanged in such a regime.
Again, this scaling doesn’t need to hold. Sometimes we have parallel shifts in term structure and sometimes term structures steepen faster or slower than sqrt(T) scaling would predict. But the scaling is still a better prediction than the raw vega measure, which would have you believe IVs from all months are directly comparable without adjusting for how slow long-dated IVs change or how fast a weekly IV can move.
Random walks and the derivative pricing theory built upon them assume returns are independent. In hindsight, random walks still exhibit stretches that can be labeled “trend” (like a run of heads) or “mean reversion” (period of frequent alternating). But it’s one thing to label these stretches and hindsight vs predict them.
It should be self-evident that being able to predict trends or reversion would be marvelously profitable for a directional trader. But, direction aside, it would be a gift to volatility traders as well. It would influence not only how they priced vertical spreads and time spreads but the deltas in their models and their delta-hedging strategies. In other words, it would change everything if you had an edge on the probability of the next move being up or down, even if you did not have an edge on the fair value of the stock (this would occur if you had an edge on probability but not on the magnitude of up move vs down move). Option structures allow fine-grained bets that can isolate probability from magnitude.
If an asset trends over weeks or months, you will underestimate its volatility by scaling its daily volatility by sqrt(T). That makes sense. If it trended, that’s similar to saying the moves were auto-correlated and therefore dependent. Again, this is descriptive, not predictive, but relating measures of volatility to this interdependence lets us see how sensitive option pricing is to the random walk assumption. A few articles I’ve written in this vein:
These articles have a unifying concern. If prices are random, then sure, the power function that specifies how volatility scales is the familiar:
But if prices trend or mean-revert, the exponent is no longer 1/2.
Over any historical sample, H can be observed to be something other than 1/2. For it to be 1/2 would mean that annualized volatility over 2 different sampling windows was identical. In hindsight, that will rarely occur. But it’s also true for any exponent you pick. It’s hard to make the persistent case for a value other than 1/2, especially when it carries the financial totem of randomness.
In Retail Options Trading, Euan Sinclair says markets aren’t random, but they’re close to random. The question of whether there’s enough life growing in the gap between “random” and “almost random” for a skilled hunter to eat is existential professional investors’ careers.
We need to examine randomness.
Returning to the context of volatility scaling and its relationship to randomness, Euan reaches for a popular quant tool. The Hurst exponent. That’s why I picked H for the exponent in the general version of the volatility power law.
Euan’s definitions:
H = 0.5 is a random walk. No memory.
H < 0.5 is mean-reverting. Up tends to be followed by down.
H > 0.5 is trending, or “persistent.” Up tends to be followed by more up.
It’s time to do some learning moontower-style and start with the basics.
What The Hurst Exponent Actually Measures
Our Favorite Starting Point: Coin Flips
Flip a fair coin 100 times. Score +1 for heads, −1 for tails, and keep a running sum.
After 100 flips, how far from zero is that running sum?
Three stylized regimes to compare:
Perfectly correlated flips (every flip copies the last one): the running sum after 100 flips is ±100. It grows linearly with N.
Perfectly anti-correlated flips (+1, −1, +1, −1, …): the running sum never escapes ±1. It doesn’t grow with N at all.
Independent flips: the running sum lands around ±√N or in this case ±10.
Think of these as regimes that correspond to three scaling exponents:
Correlated (trending) N^1
Anti-correlated (mean-reverting): N^0
Independent (random walk) N^0.5
The exponent is the answer to “what power of N does the cumulative range scale with?”
Strip out the step size to isolate the regime
The ±1 coin gave a running sum with range around √N. If the coin paid ±10 instead, the range would be 10·√N. Bigger steps, bigger range. We want to strip out that distortion. If we measured price range on raw market data, a jumpy stock would always look more “trending” than a calm one, just because its steps are bigger. We’d be measuring volatility tangled up with regime, when we want regime alone.
The fix is to divide the range by the standard deviation of the steps: R/S
For the ±1 coin, R ≈ √N and S = 1, so R/S ≈ √N.
For the ±10 coin, R ≈ 10·√N and S = 10, so R/S ≈ √N. Same answer. The step size cancels out.
That’s the rescaled range. R/S only cares about the regime of the series, not its scale.
From coins to assets
Now we can adapt this to asset returns.
So we have two measurements over a window of T days of log returns:
S = the standard deviation of the returns (the step size in the coin example)
R = the range (max − min) of the cumulative sum of the de-meaned returns. How far the running total wandered between its high and its low.
We de-mean before computing R, so we strip out drift. We don’t care that the thing went up over the window, we care how it wandered around that trend. We divide by S to strip out the volatility scale.
The √T Benchmark
If returns are independent, R/S also grows like √T for the same underlying reason:
The variances of independent things add, so the spread grows by √T.
Now generalize it. Instead of forcing the exponent to be 0.5, let the data tell you:
R/S ~ T^H
H = 0.5: matches √T. Independent.
H > 0.5: R/S grows faster than √T. Trending. Moves reinforce each other.
H < 0.5: R/S grows slower than √T. Mean-reverting. Moves fight each other.
Reading H Off A Plot
The scaled range takes the functional form of a power law. If we take logs of both sides, the power law becomes a straight line, and the exponent H becomes the slope of the line.
log₂(R/S) = H · log₂(T)
Compute R/S at a few different T’s, plot them log-log, and the slope is H. It doesn’t matter which type of log we use. We could choose log₁₀ or ln, but using log₂ gives a clean way to narrate it: every time you double T, R/S multiplies by 2^H.
H = 0.5: each doubling multiplies R/S by √2 ≈ 1.41
H = 1.0: each doubling doubles R/S
H = 0.0: each doubling leaves R/S untouched
The Implementation Recipe
Pick several T’s (say 5, 10, 20, 40).
At each T, chop the sample into non-overlapping chunks. (see appendix)
For each chunk: de-mean, cumulative sum, R = max − min, S = std dev, then R/S.
Average R/S across the chunks at that T.
Fit a line through the (log₂T, log₂(R/S)) points. The slope is H.
Worked Examples
Computing one R/S by hand
Take a single 5-day chunk of returns, in %: +1, +3, −2, +4, −1.
Mean: (1 + 3 − 2 + 4 − 1) / 5 = +1%
De-mean (subtract the mean from each): 0, +2, −3, +3, −2
Cumulative sum (running total of the de-meaned series): 0, +2, −1, +2, 0
R is the range of that running total: max − min = (+2) − (−1) = 3
S is the standard deviation of the original five returns ≈ 2.28 (population stdev, STDEV.P)
R/S = 3 / 2.28 ≈ 1.32
That 1.32 is one chunk’s R/S.
Notice that since √5 ≈ 2.24, this little stretch wandered less than a random walk would, so it reads mean-reverting
We just repeat this for several windows.
Say you’ve got 80 days of returns.
Compute R/S at T = 5, 10, 20, 40:
The Hurst exponent, H ≈ 0.43, is extracted as the slope from the log-log plot, which is is linear transformation of a power function.
H<.50 corresponds to mean-reversion. Every doubling of T multiplies R/S by 2^0.43 ≈ 1.35, a hair under the 1.41 you’d get from a pure random walk. The wandering is growing slower than random diffusion would predict.
Applications of H
If H isn’t 0.5, then √T annualization is wrong for that asset. H > 0.5 means your long-horizon vol is higher than √252 × daily vol claims. H < 0.5 means it’s lower.
The articles I linked to in the intro wrestle with this same idea but in a simpler point-to-point manner in the form of a trend ratio (ie vol sampled weekly ÷ vol sampled daily).
If you assume the asset is “self-similar,” then the exponent H governs the scaling at every horizon then besides looking for trend or mean reversion strategies you can now research a world of option relationships that are potentially mispriced if the assumption of independence is strongly embedded in volatility scaling models.
To be reductionist, my trend ratio calcs were a two-point estimate of H. Autocorrelation patches function as a lagged estimate of the same thing. Hurst is the version that uses the whole curve instead of two points or one lag.
The assumption that markets are self-similar is wrong. The more wrong it is, the less you have to gain from Hurst vs point-to-point extrapolations, but all of this is dominated by the biggest elephant in the room. Can past data help you predict trend or mean-reversion at all? Which just circles back to Euan. If you are going to bother trading, you must believe, at worst, they are merely “almost random”.
A Sense Of Proportion
H looks like a number between 0 and 1, so a move from 0.50 to 0.55 feels insignificant. The vol-annualization lens is the cleanest way to debunk that.
Consider a stock with 1% daily vol.
At H = 0.50: 1% × 252^0.5 = 15.9% annual
At H = 0.55: 1% × 252^0.55 = 19.4% annual
A 0.05 bump in H means a 22% increase in annualized vol. This obviously affects your opinion of option prices but it’s also meaningful for position sizing and risk or VaR.
Most equity-index Hurst estimates sit in a narrow-looking 0.45 to 0.55 band, but that “small” band obscures significant differences.
The Catch: The Naive Number Lies
Now go back to Sinclair’s warning, because this is where it earns its keep.
Classic R/S — the recipe above, the one in his book, the one everybody reaches for first — is biased. Run it on a series you know is a memoryless random walk, at a 252-day window, and it does not hand you back 0.5. It hands you back something noticeably higher. The estimator manufactures a little fake memory all on its own, before the data even gets a vote.
So when SPY’s rolling H sits below 0.5, you have to ask how much of that is the market and how much is the ruler. This isn’t a fringe complaint. Lo built a modified R/S statistic back in 1991 precisely because the classic version confuses genuine long memory with garden-variety short-range stuff like volatility clustering, and equity returns are drowning in volatility clustering.
The fix is not exotic. Simulate a big pile of random walks the same length as your estimation window, run the exact same R/S recipe on them, and see what H the estimator coughs up on data you built to have none. Whatever offset it shows is the lie. Subtract it. Now a true random walk reads 0.5, and a reading that survives the correction is one you can actually look at.
This is the same humility you already preach about your own VRP work. A single rolling-window H is one draw. Treating it as gospel is exactly the “sample size of 1” trap. Calibrate it or don’t believe it.
Sandbox
I’ve heard of many traders, including option traders using Hurst in their research. It feels like it’s accelerated in the past 5 years. I didn’t take a harder look at it until Euan gave a brief intro to it in Retail Options Trading and LLM’s made it easier to tutor yourself on a quant method. It’s a technique that’s well-known, but anecdotally I’ve heard a wide range of mileage from it (I’m guessing every pro option trader in a seat today has at least heard of it in trading contexts).
If autocorrelation adnrealized vol ratios at different frequencies are worth looking at then Hurst is worth at least “spaghetti on the wall”. I built a Jupyter notebook to tinker using yfinance data. You can use it, fork it, whatever:
If I were to bring this “in the lab” to see how it can become a metric or even signal I’d start with tinkering to see how it its output jives with my intuition of how a certain asset behaved over a particular period.
Once I had a feel for it, I’d throw the metric up on a scatterplot against other metrics to develop a sense of what is normal. Are there any correlations between H and IV skews or IV term structures? How do changes in Hurst coincide with changes in realized vol (rv is an input to R/S therefore and ultimately H so maybe we are hunting for a residual variable to track?)
If you have organized data, in the world of LLMs all of this work is more fun and faster. For now, I hope this primer on Hurst was a digestible first step for explaining the theory behind it and why it can be relevant.
You can find additional notes below.
Appendix: What “chop into non-overlapping chunks” really means
T is a window length, just how many days of wandering you measure at once. You pick several because H isn’t a property of any single window. It’s the rate at which R/S grows as the window lengthens. A handful of T’s gives you points to fit a slope through.
You have 251 daily returns. You want one number, H. That’s the entire goal.
Pick a few window sizes: 5, 10, 20, 40.
For each window size you do the exact same thing:
T = 5: chop the 251 days into back-to-back groups of 5. You get 50 groups. Compute R/S for each group, then average all 50. That’s your R/S at 5.
T = 10: chop into groups of 10. You get 25 groups. R/S for each, average them. R/S at 10.
T = 20: groups of 20, so 12 groups. Average. R/S at 20.
T = 40: groups of 40, so 6 groups. Average. R/S at 40.
Now you have four points: (5, R/S@5), (10, R/S@10), (20, R/S@20), (40, R/S@40). Plot them log-log, draw the best-fit line, and the slope is H.
You want enough windows to fit a line, but longer windows are comprised of fewer blocks (like the T=40 window) so they’re shakier sample from which you are computing an average R/S.
Appendix: Bias
The body said classic R/S reads high on a random walk.
The finite-sample problem
Even on a true coin-flip walk, R/S over a short window doesn’t average to exactly √T. It sits a little above. Hurst, Anis, and Lloyd worked out the expected R/S of a random walk in closed form back in the 70s, so one fix is to divide your measured R/S by that expected value at each T before you fit. It’s conceptually similar to the familiar Bessel n−1 adjustment done to sample variance since we don’t know the true population variance.
Claude suggested 2 ways to apply a correction:
Use the closed-form expected R/S directly
Simulate a pile of random walks and measure what your exact regression spits out.
They differ because the log of an average isn’t the average of a log (Jensen’s inequality). The closed-form route leaves a residual bias of a few hundredths. The simulation route, because it runs the identical regression you use in practice, lands a true random walk back at 0.5.
After much back-and-forth, I took Claude’s rec and had the notebook use the simulation route.
The nice thing about LLMs is they know a lot of the academic history of a measure. Like I said this is a starting point for your own exploration.
Better estimators exist.
Classic R/S is the cleanest to teach and the weakest to trade. Lo’s modified R/S (1991) is built to ignore short-range dependence like volatility clustering, which plain R/S happily mislabels as memory. Detrended Fluctuation Analysis (Peng et al., 1994) is the workhorse in the econophysics literature. If you ever size a position off an H, cross-check it with one of those rather than lean on R/S alone.
US bond yields are rising as inflation re-enters the conversation. The 10-year yield is up to 4.65% and 30-year bonds have just crossed 5%, a nearly 20-year high.
This isn’t surprising. 6 weeks ago, in Trading As A Sudoku Puzzle With Prices As The Given Numbers, I talked about how 1-year gasoline futures were trading at a 1/3 discount to prompt pricing, but if gasoline prices remain high, this will roll up. If spot prices stay high for a year, those back-month futures will converge to current prices. Even though energy is only about 5% of CPI, the size of such a sustained move would easily transmit 1.5% to inflation indices and that is just due to direct energy effects and ignoring indirect effects on food, construction, and transport.
We’ll switch the conversation to crude oil just because it’s more widely tracked and the specifics of the contracts aren’t critical to where we’re going. Prompt oil is roughly in the same place vs 7 weeks ago, but the contract that was 12-months out and is now 11-months out has rolled up >6%. Meanwhile, another month of sustained high oil prices has pushed the 10-year yield up 30 bps from 4.3% to 4.6% with IEF price returning about -1.6% a bit better than what’s expected by its duration.*
*There’s some leeway since I’m using an index for the yield which may have a different set of weighted maturities than IEF holds. Also, IEF total return is closer to -1.1% because you earn interest for 7 weeks.
So far, so good. The reaction function in bonds makes sense. But my Sudoku post claimed that an inflation-induced yield bump would transmit to real equity risk premiums. In other words, I would expect equities to sell off with bonds, or heck, at least not have such a sharp rally.
This is not quite the puzzle it appears to be. The equity exuberance is actually quite limited if you look under the hood of the index.
The internals are doing something the people who watch this for a living have never seen. The S&P is up 4.2% month-to-date with 209 stocks up and 295 down. The NASDAQ is up 8% month-to-date on a near-even split (51 up, 50 down). The index is 9% above its 50-day moving average while only roughly half the components are above their own 50-day; at that distance you’d normally expect 80% breadth. Four days running, more S&P stocks hit new 52-week lows than 52-week highs, with the index at all-time highs and up 30% year over year. Yesterday 9% of the index hit new lows. None of this happens together in a healthy tape.
I’ve noticed many market people interpret these “internals” as bearish. I’m not sure this is bearish for the index. It just is. A few companies are eating everything else. We get it. At this point, the low cross-correlation of the components is common knowledge (isn’t this what managers call a “stock pickers market”?).
Rather than use the term “bearish” which has a predictive slant I can’t justify, we can just accept that the sustained oil price, inflation jitters, and rise in yields are being reflected in prices broadly. SMH (semis ETF) is near 1-year highs while XHB (homebuilders) are near one-year lows.
The AI story is in a parallel vacuum, indifferent to relics like discount rates or identities such as spending = income, but stocks overall are not being indiscriminantly bid. SPY has returned nearly 2x RSP, the equal-weighted SP500 index, over the past year. So the loving arms of our cap-weighted benchmarks hold us tight, shielding our eyes from the turmoil within. Trepidation over supply-side inflation is confirmed by bond and non-AI stocks alike.
Concerned with inflation, I dust off some old posts, like What I Learned About TIPswhich I wrote when I bought when breakevens shrunk to about 2.2% (green box).
(When breakevens are skinny, TIPs are relatively cheap compared to nominal bonds, and when they are fat, they are relatively expensive. The way to think of that is if you buy TIPs at say 2% breakevens, then you are better off with the TIPs if CPI realizes more than 2% and vice versa.)
Breakevens are currently matching 3-year highs so TIPs don’t look attractive on a relative basis, but that’s only one lens. The real driver of my decision to buy TIPs in Oct 2023 was the absolute real rate which was ~2.45% which still stands as the peak for most investors under age 40’s working life.
Remember that’s 245 bps of return above inflation for no risk and if you hold them in an IRA, no tax drag. Historically speaking, equity real returns have been in the range of 3-6%, but recent years have been quite a run of heads. Whether the coin is biased now is a question for someone smarter than I. But I digress.
The point is I’ve started once again to consider inflation-aware trades. 10-year TIPs don’t stand out as a bargain relative to nominal bonds. I’m wary on gold and silver because of how well they’ve performed recently, but also historically, they have not been great to own when real rates increase and we can see from the absolute TIPs rate that, despite breakevens not breaking out, real rates are crawling higher, approaching an 18-month high.
So I dust off yet another post, this one from 2 years ago: Inflation Replicator. I show how a portfolio of oil futures plus nominal bonds mimics the behavior of inflation-indexed bonds like TIPs. I constructed it in Composer using USL, which holds a strip of oil futures maturing within the next 12-months, plus TLH, a bond ETF holding bonds with 10-20 year maturities. The portfolio is inverse-vol weighted, rebalanced quarterly.
This is the out-of-sample performance since I published the post (green line).
That portfolio is a set-and-forget inflation hedge if you don’t like TIPs.
[Speaking of “tips”, here’s a general one. If you have a portfolio that rebalances, it is often selling winners to re-invest in losers. This keeps you diversified and avoids the volatility tax that comes from concentration, but it’s not tax-friendly unless you do it in a sheltered account. To do it in a regular account, you can consider a tax-loss overlay where instead of buying more of the losing position, you actually sell the losing position and another ETF that has a highly correlated exposure. So, for example, if TLH is the losing side and you need to add more on the rebalance, you actually tax-loss harvest the TLH and replace it with TLT length. It’s a similar exposure, but you can now use the TLH capital loss to offset the gain on the USL win you trimmed.]
The specific inflation replicator I composed was TLH + USL. But if we abstract it to “bonds + oil”, it invites us to think about risk premia that exist in both asset classes in the current market.
In the remainder of this post, I’ll narrate layering a couple of edges onto a core portfolio idea. By following along, you’ll get concrete ideas for measuring and managing risk and open your mind to the different Legos available to build the portfolio and ultimately express the trade while targeting the carry embedded in the asset’s pricing complex.
Inflation Replicator with positive carry
Let’s talk about our baseline exposures: oil + bonds
Instead of building the inflation replicator portfolio with the USL ETF, we want to isolate a carry-rich version of “oil”.
The oil leg
As I write on 5/20/26, the prompt WTI future, CLM6 (expires in May), is $98.
CLZ6, expiring in November, is $81.75.
If the spot oil market is unchanged over the next 6 months, CLZ6 will “roll up” nearly 17% (~34% annualized).
The bond leg
Long TLT shares. You collect the ~5% annual yield as carry. That’s the simplest expression and what we’ll size against.
Reiterating the core idea of the inflation-protected bond we are creating
We are pairing oil and bonds together because high oil prices are a major driver of inflation and the accompanying weakness in bonds. In other words, the bonds and the oil hedge each other if we own both.
They are coupled antagonistically. Look at the correlation of TLT (longer-dated bond ETF) and USO, which holds prompt WTI futures.
moontower.ai
Before the war, the rolling 21-day correlation of returns between TLT and USO ranged from about zero to -.50, spending the bulk of the time between 0 and -.25.
Since the war, the correlation range abruptly shifted lower, recovered a bit and has now collapsed to -.75.
💡Does it matter that we are comparing TLT with prompt WTI via USO when we want to express crude length with the deferred Z26 contract? The vol of the two contracts is very different, which matters for sizing reasons and would show up in the beta, which is vol ratio * correlation. But correlation alone is still tight across the futures strip with M1 to M6 easily above 0.90. It’s safe enough to infer the correlation of TLT to Z6 futures from its relationship with USO.
You will see how the inflation replicator portfolio benefits from the negative correlation when we get to sizing. Understanding the correlation range will also be key, as it’s a critical input to risk management.
Sizing the core portfolio
We begin with a risk target expressed as a fraction of a portfolio. We’ll choose $100k of annualized volatility allocated to this trade. Feel free to pick your own number, the method is what matters.
A $100k annual vol target is easier to reason about if I convert it to a daily number, because daily P&L swings are what I actually watch on the screen. Annual vol scales with the square root of time, so:
$6,300 of daily swings is for the portfolio of oil futures + TLT. We need to size the individual legs of the trade.
Step 1: convert each leg’s vol to a daily number
Again, we are converting annual vols to daily by dividing by √252
CLZ6 has 43% implied vol → daily vol ≈ 2.71%
TLT has 11.5% implied vol → daily vol ≈ 0.72%
Oil is about 3.7x as volatile as TLT on a same-dollar basis.
Step 2: inverse-vol weight the two legs
Inverse-vol weighting means I want each leg to contribute the same daily dollar volatility to the portfolio. Not the same notional, the same risk. The high-vol leg (oil) gets less notional, the low-vol leg (bonds) gets more, until they pull equal weight in risk terms.
Mechanically:
The daily dollar vol due to either asset should be equal. We’ll set that dollar vol equal to S.
Step 3: solve for the portfolio vol as a function of S and correlation
This is the two-asset portfolio variance formula:
The w’s are dollar weights, the vols are in daily percent, ρ is correlation.
Inverse-vol weighting forces w₁σ₁ = w₂σ₂ = S, therefore every term becomes a multiple of S²:
That’s the engine. Portfolio daily $ vol is just the per-leg $ vol scaled by √(2(1+ρ)).
Note how correlation has such a large impact on the portfolio vol. At today’s ρ = −0.75, the multiplier √(2(1−0.75)) = √0.5 ≈ 0.71. The portfolio is less volatile than a single leg.
Step 4: invert to find the leg size
I want σ_p = $6,300. Solving the formula above for S gives S = $6,300 ÷ √0.5 ≈ $8,900. So each leg should carry about $8,900 of daily dollar vol.
Convert that back to notional: oil notional = S ÷ daily oil vol = $8,900 ÷ 2.71% ≈ $328,000.
CLZ6 is $81.75 and each contract is 1,000 barrels, so one contract is ~$81,750 of notional. $328,000 ÷ $81,750 ≈ 4 contracts.
TLT is .72% daily vol, so we need $8,858/.72% or ~ $1.22mm of notional or about 14,500 shares because TLT is $84
[$8,858 instead of the $8,900 we solved for comes the fact that we need 4 contracts that are not divisible any further. Note how the bond notional is ~3.7x the oil notional, exactly the inverse of the vol ratio.]
And the resulting portfolio daily vol at ρ = −0.75 is σ_p = $8,858 × √0.5 ≈ $6,263. Right on our $6,300 daily risk target, which corresponds to $100k of annual vol.
The beauty and danger of correlation
Let’s appreciate what’s happening here by considering monthly risk and reward.
Let’s start with risk.
Scale daily risk to monthly:
$6,300 *√(252/12) = $28,870
Now for the expected reward.
Oil: 2.5% roll up * $327,000 notional = $8,175
TLT: 5% yield * $1.22mm / 12 months = $5,083
Total expected return = $13,258
Monthly sharpe ratio = $13,258/$28,870 = .46
Annualize the SR:
.46 * √12 = 1.59
This is possible because we get to be long quite a bit of assets in notional terms, but the volatility of the portfolio is small.
The reason it’s so small is that the correlation is very negative.
But ρ = −0.75 because the war pushing oil up is adding a risk premium to bonds (ie pushing their price lower).
To understand the risk, we must stress-test correlation. We fix S and vary ρ.
[Risk should really be treated like a matrix since changes in the correlation will coincide with the vol of the legs moving, thus changing the vol ratio between them. For example, if the war relaxes and the correlation heads back towards 0, oil prices likely fall, bonds likely rally. That’s ambiguous for the p/l, but since oil’s vol is the one that’s more stretched from “normal” you are underweight the falling asset which is good. However, the increased correlation means total portfolio risk is more than you intended]
Your portfolio risk doubles if corr goes back to 0.
Juicing the bond leg with options
So far the bond leg is plain-vanilla long TLT shares earning the ~5% yield. But given the sell-off and inflation fears, the bond option market is also offering risk premia as vols have increased and put skew has steepened.
Let’s talk about the vol first.
VRP
As I write on 5/20/26, the ATM 1-month put is around $1.20, corresponding to 11.5% IV. TLT’s realized vol has been running below its implied. 1m realized vol is ~8%, 1-week rv is closer to 9% and median 1-month rv for the past year is about 10.5%.
Call it a 15% vol risk premia:
Put premium: $1.20/share
Fair value: $1.20 ÷ 1.15 ≈ $1.043/share
VRP edge: $1.20 − $1.043 ≈ $0.157/share, or 15.7 cents per share
The practitioner’s way to carry that number in your head is per contract. Each contract is 100 shares, so the VRP per contract is $0.1565 × 100 = $15.65 per contract per month.
The bond leg’s delta target was the equivalent of +14,556 shares of TLT. An ATM put has a delta of about −0.50, so selling one put gives you +0.50 deltas per share, or +50 deltas per contract (100 shares × 0.50). To replicate the share position’s delta: contracts = 14,556 deltas ÷ 50 deltas/contract ≈ 291 contracts.
291 × $15.65 ≈ $4,555 per month, or ≈ $54,700 annualized.
If you sell ATM puts to express the same long-delta exposure. You collect the put premium, and the portion of that premium above fair value is vol risk premia stacked on top of the yield carry.
💡It’s never that simple when it comes to options. The yield carry is the yield * notional but as TLT moves around, you are short gamma so as the stock falls you are longer TLT and as it goes up, you become less long TLT, so the yield due to bond income is a moving target.
Be careful. 291 contracts on an $84 stock is $2.44mm of gross notional, even if it’s still $1.22mm share-equivalent notional. The local delta exposure is identical, but by swapping the expression to pick up VRP we added non-linear risk to the position.
Skew
TLT’s 1-month risk reversal is at the 94th percentile of the trailing year. The put skew is rich, call skew is depressed.
montower.ai skew percentiles (puts on x-axis, calls on y-axis)
moontower.ai
You can express the delta by selling OTM puts, which will make the risk non-linearities even more concave. You can also sell put/buy call on risk reversals to take advantage of the stretched skew in both directions. All of this is changing the shape of the p/l and risks dramatically. The best way to get your arms around it is to construct a matrix of scenarios.
Oil options
The bond leg harvests rich skew by selling puts but the oil leg can do the same thing in the opposite direction.
Oil call skew has a war premium. That makes a call spread an attractive way to express the long oil leg: buy a closer-to-the-money call and sell a further-OTM call at a stretched IV against it, financing part of your long with the fat skew you’re selling.
For example, instead of buying 4 Z26 futures, you could buy the Z26 88/98 call spread. With the underlying at $81.75 this OTM structure costs ~ $2.35. It has a .12 delta, so to get 4 contracts worth, you’d need to buy ~33 call spreads (4/.12).
You’re long the rollup-and-supply-scare upside, but you’ve capped your gain to $7.65 (about 3.2-1 odds on your premium), but your downside is limited to the debit if Hormuz de-escalates and oil pukes.
Trade management
It’s well understood that when it comes to options your risk is changing as assets move around, as time passes, and as implied vol fluctuates.
A more subtle risk is how your exposure changes on the oil leg even without options. The oil future becomes more volatile it approaches maturity ages. The 6-month oil future currently has a 43% implied vol but the near-dated future can be twice the vol in times of stress. So even if nothing moves, the oil leg’s daily dollar vol creeps up over the life of the trade. This might be partially mitigated by the roll-up amount becoming steeper as you approach the front of the curve.
The 1-month rollup from M2 to M1 is twice as steep as the 1-month rollup from M6 to M5.
CL futures via TradingView
The good news: the same risk framework that sized the trade also manages it. Re-run σ_p = S·√(2(1+ρ)) with fresh inputs whenever the market moves:
Oil vol rose? Each leg’s S is no longer balanced. Trim oil contracts (or tighten the option overlay) and add bonds to re-equalize the legs and pull portfolio vol back to the $6,300 daily target.
Correlation drifting toward zero? The shock table prescribes how to proportionally hold both legs to maintain the vol target.
If you use options and your total risk or relative leg risks get out of tolerance bands, you can reassess to see if you should roll, add, or even close.
Because the trade is a living position, you may want to treat the target risk as an upper bound, and initiate the trade at smaller sizing giving you wiggle room to rebalance less often.
A summary of stacked edges
The bond leg is long carry because the position has a net long delta (yield) and short rich puts (VRP).
The oil leg is long carry (rollup) and short rich calls (skew).
You’ve taken a simple “buy oil, buy bonds” inflation replicator and layered distinct edges onto it, each one sourced from a risk premium in the pricing complex:
Oil rollup carry (term structure)
Bond yield carry
Bond VRP + put skew
Oil call skew
On the carry side, you are monitoring VRPs, term structure, and coupons, while on the risk side you are monitoring the volatility of the legs as well as the correlation which has a major impact on the portfolio risk.
How big a portfolio does this need?
I sized everything to $100k of annual vol, but I never said what size account sits behind this trade. Vol targets don’t specify a portfolio on their own — they specify a portfolio once you decide what fraction of your risk budget the trade gets. If you want this to be a 10% vol sleeve, you’re implicitly running it against a $1mm book. A 5% sleeve implies $2mm.
You’ll immediately notice a problem if you consider the 10% / $1mm case. The bond leg alone is $1.22mm of TLT shares, which exceeds the entire account. You can’t fund it with cash, you need leverage. Futures are inherently levered as you only need to post initial and possibly variation margin. For the equity portion, portfolio margin can allow you to post even less than a 50% haircut.
But leverage introduces path risk. Your position is changing with market conditions, especially if you use options. But this portfolio sizing is resting on a large position in a low-vol asset as well as a negative correlation. The simplest way to appreciate the risk is to notice that a mere $100k of annual vol rests on ~$1.5mm gross exposure. If you run this portfolio at $100k annual vol with only a $1mm account, you are managing both risk and margin closely.
Recall the portfolio expected Sharpe was 1.59. So for $100k annual vol, we expect $159k in profits or 15.9% on a $1mm account. The expected return halves to ~8% if you run it in a $2mm account.
The best but most complicated choice is to run a strategy like this in a diversified account where the other moving parts interact with the portfolio margining computations such that the required haircut is small and therefore efficient.
A well-supported and common belief in the options world is that there is a premium of implied volatility to realized volatility. The implication is that options, on average, are overpriced, so the structural edge in the options market comes from selling them to “harvest the VRP”.
If you put a gun to my head to confess where I stand, I’ll coldly chant “I have no quarrel with that belief” in the cadence of His name is Robert Paulson.
There’s enough evidence to not disagree with the belief. But as a trader who spent 2 decades being long gamma and vega more often than short and not being especially rare among professional option traders in that regard, it’s hard to bang on the VRP desk with fervor.
Aside
It is entirely possible that my trading profits made up for a persistent negative edge in my positioning. That’s plausible because I traded thousands of contracts a day for 20 years in a market-neutral way, but there are facts that cast doubt on the long vol bias being detrimental. My largest p/ls were in years that were most volatile like the late 2000s, 2018, and 2020, and driven by vega. Now vega is a funny thing because people will argue that it’s not real, it’s marks, etc. They are still on their option blue belt and failing to appreciate
a) that vega can be ported through time through calendars, but it’s almost impossible to do this efficiently unless you are organized to trade flow
b) vega is illiquid. You can manufacture a near-dated option through replication so even if the option is illiquid as long as you can trade an underlying against it there is an out. Deferred options can turn into Hotel California quickly, and when they do it’s good to have the keys to the rooms.
In fact, the market for vega (ie longer-dated options) and gamma (near-dated options) is different. Different players, motivations, and execution methods. For the pros reading, have you ever seen a market where one trader deals in the “fronts” and another trader is in charge of the “backs”. This is the most salient demonstration of this bifurcation, but it exists in subtler ways in many markets and there’s money in bridging the liquidity.
We can peel back assumptions about VRP all day. For example, what do you mean by “realized volatility”? But a highly tiresome unpacking would leave us in a predictably unsatisfying duality:
Options are generally overpriced
This is hard to translate into risk-adjusted, opportunity-cost-aware amounts of food on the table
Anyway, I’ve needled you enough. I’m not sorry about that. Part of my self-anointed duty is to test your armor before you march into your Robinhood options tab.
Let’s turn to the “V” in VRP.
I’ve seen it refer to “volatility” or “variance”. In the non-technical context that it’s used, this is fine. In our app, it refers to “volatility”.
But the distinction is absolutely critical when evaluating and sizing trades.
We can examine this by starting with a market observation that points to expensive options. When we pull it apart, there’s so much more than meets the eye. This lesson brings together fundamentally important themes we cover in this letter like:
The importance of proper measurement
how you want to approach the same idea from multiple angles, because it’s rare that a single measure sees all the facets
The math of option risk and p/l
Markets being smarter than they seem at first glance
Let’s start with this chart of 30d constant maturity implied vol vs trailing 30d realized vol in HYG.
We can see that absent the Liberation Day period last year and the current Iran stress, IV maintains a steady premium to RV. Also note that realized vol is typically below 5% annualized. This is a low-vol ETF.
Another way to look at this is to turn that relationship into a ratio representing the percent premium of IV to RV and call that the volatility risk premium (VRP). We do that below as a scatterplot with the 30-day RV percentiled over the past year.
It shows the premium is often around 40 to 100%, and it’s fattest when the realized vol is very low. This is indicative of IV’s habit of pricing in mean reversion. When realized vol gets very low, the IV doesn’t chase it all the way down. It’s stickier as the market doesn’t extrapolate the low vol periods to persist. Same when the market gets very volatile. The premium narrows as the market doesn’t bid the IV up “too high” as it expects the elevated realized vol to subside.
How you measure the VRP is a choice. We chose to measure it as a ratio because it makes cross-sectional comparison easier. If a name realizes 5% vol but trades for 6% vol, that is put on par with a 50% vol name trading for 60% IV.
We could have also chosen to measure the premium as a “spread” instead of a ratio. In that case, HYG could be said to have a VRP of 1 (ie 6% IV – 5% RV) and the higher vol name would have a spread of 10 (60% IV – 50% RV).
If HYG was 15% IV and 5% RV, that would also be a 10-point spread, so the spread approach just feels more wrong when you compare assets of different vols. The ratio offers a better comparison.
But remember:
how you want to approach the same idea from multiple angles, because it’s rare that a single measure sees all the facets
The plot is going to thicken considerably because putting on risk and screening are 2 different activities that are related via decision-making but divorced in execution.
Back to HYG. Whether you use a ratio or spread, implied vol is sitting well above trailing realized vol. The ratio is more flattering than the spread, but either way it appears like a structural risk premium. Sell the options, collect the premium, repeat. Right?
As you zoom in, the details start to hint at why this ratio or spread is just sitting there for the taking.
The Gamma-Theta Tug of War
If you are selling options to capture VRP, your intent or thesis is not about IV falling, just that your theta p/l, the option decay you collect as time passes, will outweigh the losses you incur from being short gamma as the stock moves around. We make allowances for path dependence, but on average, if the stock moves around less than what is implied by the option prices, you win.
The net P&L of the position due to realized vol makes the battle of gamma and theta visible. This is from the long option holder’s point of view. For them, if the RV is greater than the IV, this term is positive:
Although this comes back to that letter “V”.
σ² refers to variance not volatility. If you are short options, you make money when realized variance is below implied variance. The distinction between volatility and variance is critical. But we’ll get to that.
We also want to quickly review approximations for ATM options (technically ATF or “at-the-forward”).
This is the straddle and its gamma, respectively:
Focus on the following relationships that fall out of these approximations.
First, the straddle price is proportional to σ. Which means daily theta decay is proportional to σ, since you can think of theta as the diff of the straddle formula on T vs the straddle formula on T-1. A 50-vol name bleeds twice as fast as a 25-vol name.
Γ is inversely proportional to σ. A 50-vol name has half the gamma per dollar of notional as a 25-vol name.
You should notice…
A lower vol name has less theta AND more gamma
Theta-weighting position size
Say you want to sell the same dollar amount of daily theta across two names, a 50-vol name and a 10-vol name. Since theta scales proportionally with vol, you need 5x more contracts in the 10-vol name to collect the same daily premium. That’s the theta-neutral scalar: σ_high / σ_low.
We start with a question:
If both names trade at the same ratio premium, say IV is 20% above RV for each ,does theta-neutral sizing give you the same variance edge?
Holding that ratio premium fixed at 20%, look at what the variance edge (IV² − RV²) does as we down the vol spectrum from our baseline 50% RV name:
[example of variance edge per contract for baseline is 60² − 50² = 1,100 units]
The variance edge per contract collapses as vol falls. When you scaled notional by 5x in the 10-vol name to match theta, you are capturing much less variance edge for the same risk.
To fully equalize variance edge at theta-neutral sizing, you’d need to scale by (σ_high / σ_low)² or the square of the theta-neutral ratio.
Theta-neutral means 5×. Variance-edge-neutral means 25×. If we use theta as a proxy for risk, which is a common and sensible barometer (but again, like all measures, incomplete) for understanding position size, we would need to take far more risk in the low vol name to capture the same amount of edge.
How Rich Does The Low-Vol Name Need To Be?
So a 50-vol name trades at 60 vol for a 20% ratio premium. Variance edge per contract: 60² − 50² = 3600 − 2500 = 1,100 variance units.
You want to find the IV for a 10-vol name such that theta-neutral sizing (5× contracts) delivers the same 1,100 variance units.
Working through the algebra (see appendix), the answer is:
So the 10-vol name needs to trade at 17.9 vol or a 79% ratio premium to RV to deliver the same theta-neutral variance edge as the 50-vol name at a 20% premium.
A 10-vol name trading at 12 vol (20% premium) looks identical to the 50-vol name on a ratio chart. In variance-edge terms, it’s delivering less than a tenth of the expected profit, even after upsizing to theta-neutral scaling.
Spread Gets You Closer
Screening by vol ratio might offer sensible comparisons but fails to compare opportunity in a risk-aware way. At the end of the day, a 40% vol premium on a 5-vol name is still just 2 points. You can get a feels for this when you look at selling options on fixed income ETFs. That IEF vol looks high, and then when you look at the premium it just feels like the juice isn’t worth the squeeze.
So what about vol-point spread?
It works quite well for comparing edge, at least until you get to much lower vol names.
The table shows the spread needed for variance-edge equivalence across the vol spectrum. It’s pretty constant from 25 to 100 vol names.
The ratio needed to equate the variance edge went from 20% to 79% to 132%. It makes low-vol names look rich when they’re structurally disadvantaged in variance-edge terms.
Back To HYG
The ratio VRP in HYG looks persistently fat, often 50% or more above realized vol. But even the spread measure doesn’t quite put it on par with the variance edge in higher vol names. A stock priced at 60 vol that moves at a 50 vol has a 10 point spread, which is equivalent variance edge to HYG moving 5 vol but being priced at 11.6. But that kind of differential is extreme. HYG’s median spread in recent data is around 2-3 vol points, not 6 or more, equivalent to say a name that moves 50 vol trading 55 vol.
HYG options really are persistently rich relative to realized vol. But the ratio charts can make hide the fact that on a relative basis, HYG vols at a 2-3 point premium are actually cheap compared to a 50 vol name priced at 60% IV!
Additional consideration on low vol names
The cost of harvesting that variance edge premium in low vol names can be more expensive since theta-equivalence means trading far more contracts of the lower vol name (assuming stock prices are the same).
And of course, for a given level of theta, the lower vol name has far more gamma, which means more trading costs because you will be trading more shares.
If you are selling options to capture VRP, be aware that the V that matters is variance and that the scaling properties of risk and edge make ranking opportunities a bit unintuitive when looking at ratios. Spreads are a more solid footing, but selling a 20 vol name at 30 vol is still better than selling a 120 vol name at 130 vol, even if ratios can be misleading.
Appendix: Deriving the “Required IV” Formula
You provide 3 inputs:
RV_low
RV_high
IV_high
It returns the minimum IV the low-vol name needs to trade at for the trade to be economically equivalent on a theta-neutral variance-edge basis. Anything below that number is a relatively worse trade than the baseline you are comparing against.
I was only able to do the algebra myself until step 6. It was fun to do, like a little puzzle. But then it was depressing to be old and stuck and not even remember quadratic form.
📺Option Pricing Explained: No Arbitrage + Financial Mathematics from a Quant | 52 min watch
Doug Costa (SIG quant, former math professor, and the teacher I learned Black-Scholes from 25 years ago) builds no-arbitrage derivatives pricing from scratch using a binomial tree. No calculus, pure replication.
The thing I want to point you to is the profound role of the no-arbitrage axiom. It is the basis of derivatives replication and, by my assertion, represents the “bridge of asses” in investing education.
As a reminder, since nobody clicks links, Wikipedia says the pons asinorum or “bridge of asses” is:
used metaphorically for a problem or challenge which acts as a test of critical thinking, referring to the “ass’ bridge’s” ability to separate capable and incapable reasoners
The notion of replication is the pons asinorum of investing education because it is:
the conceptual rails of looking at a web of branching future payoffs, seeing how they could be replicated, and measuring the cost of that replicating portfolio today. It is the formalization of finance’s deepest truth — you cannot eradicate risk, but only change its shape.
You could make an even stronger claim that it lies at the core of decision-making itself, as it formalizes opportunity cost.
And I say this without being able to appreciate its deeper impact. Doug pauses for a moment in the video to marvel: when you add no-arbitrage condition to the standard axioms of mathematics, he says, the entire field of financial engineering “blossoms” out.
His colleague frames the no-arbitrage axiom joyfully:
Either we get a formula [so we win mathematically]. Or it’s violated and we make free money. Either way, we win.
Towards the end of the video, Doug discusses reflexive pushbacks he’s encountered after teaching this.
“One piece of pushback is typically, well, maybe it’s just that with stock prices, you don’t really know the probabilities. So it’s just a matter of knowing the right probabilities— if you could really discover somehow what the true probabilities were, then it would be better to use them [than the risk neutral probabilities].”
Doug’s rebuttal shows how you would still be arbed.
“I’m going to give you an example to debunk that idea. And I call this example the coin flip contract. So I’m going to postulate that there’s a company, a corporation, that finances itself, not by selling stock, but by selling what they call coin flip contracts. And the corporation has gone to great trouble and expense to manufacture a perfect coin, meaning a coin that is exactly 50% to be heads and 50% to be tails every time it’s flipped. So the probabilities are always 1 half and 1 half guaranteed…
You can watch the video, but I paraphrased it here as well. Here’s how it works.
A company issues coin-flip contracts based on a provably fair coin. The contract pays $150 on heads, $75 on tails. These trade in a secondary market at $100. Interest rate is 0%.
So we know everything. The probabilities aren’t hidden or estimated. They’re printed on the coin: p = ½.
Now: what’s the no-arbitrage price of a 110-strike call on this contract?
p̂ = (100 − 75) / (150 − 75) = ⅓
Call value = ⅓ × $40 + ⅔ × $0 = $13.33
Delta = (40 − 0) / (150 − 75) = 8/15 of a contract
Now suppose you say: I know better. The real probabilities are ½ and ½, and I’m not going to ignore them. Expected payoff is ½ × $40 = $20. So you buy the call from me at $20.
Here’s what I do next. I’m short the call. I immediately buy 8/15 of a contract to hedge.
Heads: My 8/15 position gains 8/15 × $50 = $26.67. Plus your $20 premium, I have $46.67. I owe you $40 (I have to buy the contract at $150 and sell it to you at $110). Net: +$6.67.
Tails: My 8/15 position loses 8/15 × $25 = $13.33. But I have your $20 premium. Net: +$6.67.
Every time. Both states. Guaranteed $6.67. I haven’t predicted anything. I don’t care what the coin does.
What did you get? Heads: gain $40 on the option, paid $20, net +$20. Tails: lose your $20 premium, net −$20. You’ve turned a coin flip into a coin flip — a $20 bet where you win or lose based on what the coin does.
If you try to hedge back? Doesn’t matter how you move delta. Win more on heads, lose more on tails. Move it down: vice versa. The best you can do is lock in a guaranteed $6.67 loss.
You had perfect information about the true probability….and you still got arbed buying the calls (you should have bought the contract!).
The market-maker doesn’t need a view on the coin, just the ability to trade the underlying and the derivative simultaneously. And acquiring the knowledge to cross the “bridge of asses.”
A random personal thought:
I suspect is kind of triggering for some people. It offends one’s sensibilities to think
that understanding derivative pricing ends up trumping knowledge about the true odds of things.
It’s like you spend all this time researching and learning and at the end of the day some market-maker knows just enough to not trade at the wrong price with you anyway. I’m overstating that reality, getting picked-off is real and market-makers are rightfully paranoid. But I guess that’s why I’m drawn to replication as a way of thinking. A trader is just looking for some free money when your bid or offer presents a contradiction. And that hunt makes all prices a little smarter, which, is a public good (but also a frustrating result for traders themselves, which is why the job is always uphill. A byproduct of your success is a smaller TAM).
Just to be thorough, this replication thing applies mostly to derivatives. The arb needs to be able to trade the derivative and the underlying and all advantage comes from the relationship between the two. The arb is useless without relative value.
Related learning:
🔗 Understanding Risk-Neutral Probability | Moontower
🖥️Moontower Presentation on Black Scholes “As a Trading Strategy”| Slides
If you buy options implying a daily vol of 2% per day and it moves 4% per day, your expectancy is positive regardless of whether you hedge or not. That doesn’t mean you will win any more than it means you will win if you flip a fair coin and receive 2-1 odds. You have made Sklansky bucks, not necessarily real bucks.
Hedging reduces the p/l variation around the expectancy.
In Financial Hacking, Philip Maymin explains
The inability to hedge perfectly continuously impacts your trading by introducing random risk. This risk decreases if you hedge more frequently, but only as fast as the square root. Therefore, if you want to halve your risk, you have to hedge four times as often.
He makes this tangible and practical when he says:
Noise from hedging a one-year option on a daily basis instead of continuously is about the same as one volatility point. If you make one volatility point in expected profit and the standard deviation of your profit is one volatility point, then your Sharpe ratio is about one.
His final point echoes my argument that a requirement to hedge to isolate vol is a misconception:
The risk from not hedging continuously can be diversified away.
I built a simulator so you can see this scaling law in action.
An oblique insight can be witnessed if you set up the simulation with negative expectancy, ie pay 24% vol for a stock that realizes 20%. The more you hedge the more certain you lock in negative expectancy.
Doug Costa actually showed that happen in the toy example above. The investor who bought the 110 calls based on the real-world probability but then hedged by shorting the mispriced security actually assured themselves of a loss.
If you have no edge, variance is your friend. Not financial advice.
With LLMs lowering the effort on info-gathering I figured why not include citations to literature on this topic for those who think purely in math.
I had Claude devise a Research Collector Skill.
Its purpose:
When building an interactive tool or educational artifact that demonstrates a quantitative concept, this skill gathers the academic and practitioner literature behind the concept and produces a research lineage panel — not a flat bibliography, but a structured narrative showing how ideas built on each other.
This is what it produced and what you can find in the dropdown at the end of the tool:
Bertsimas, Kogan & Lo — Journal of Financial Economics, 2000
The foundational paper. Characterizes the asymptotic distribution of replication errors from delta-hedging in discrete time. Introduces “temporal granularity” — a measure of how well discrete hedging tracks a derivative’s payoff. Proves that for European options under GBM, the hedging error standard deviation scales as 1/√n where n is the number of rebalancing intervals. Derives closed-form expressions for calls and puts.
Generalizes Bertsimas et al. (2000) from one-dimensional diffusions to continuous Itô processes driven by multidimensional Brownian motion — covering stochastic volatility models, non-Markovian settings, and data-driven hedging strategies where the true model is unknown. Shows the hedging error converges to a time-changed Brownian motion.
Discrete Time Hedging Errors for Options with Irregular Payoffs
Gobet & Temam — Finance and Stochastics, 2001
Shows the convergence rate depends on payoff smoothness. For standard European calls/puts (smooth payoff), the L² error converges at rate 1/√n. But for digital options (discontinuous payoff), the rate drops to n^(1/4). This matters practically — hedging binary options is fundamentally harder than hedging vanillas, and more frequent hedging buys you less improvement.
Shows that adding gamma hedging (hedging with a second option) can improve the convergence rate from 1/√n to 1/n for smooth payoffs. The tracking error is driven by the third derivative of the price function rather than the second (gamma). Gives conditions on trading dates to achieve optimal convergence.
The practitioner bridge. Derives closed-form expected profit and variance of profit for delta-hedging mispriced options. Key insight: hedging with implied vol gives path-dependent but always-positive daily P&L when on the right side (RV > IV for longs). Hedging with realized vol gives path-independent total P&L but wild daily swings. Also covers optimal portfolio construction across multiple mispriced options.
Comprehensive practitioner reference. Page 95 states the normalization coefficient for the hedging error formula is √π, giving the full result: σ(P&L) ∝ ½ S² σ² T Γ × √(1/N). Covers the full landscape of volatility trading — skew, term structure, and practical hedging mechanics. The standard desk reference for vol traders.
Clear, modern walkthrough of the hedging error framework. Connects the discrete hedging variance to the diffusion scaling intuition (price variance ∝ √time, so hedging error ∝ √(1/frequency)). Also covers the impact of return autocorrelation on optimal hedge frequency — negative correlation (mean-reversion) reduces the benefit of frequent hedging, while positive correlation increases it. References Ahmad & Wilmott and Bennett.
Production-grade C++ implementation of the discrete hedging Monte Carlo in the QuantLib open source library. Simulates replication error across random scenarios, directly implementing the Bertsimas-Kogan-Lo framework. Useful reference for verifying simulation logic against an independent codebase.
Why not just compute volatility from the daily returns within each calendar month instead of using a trailing 20-day window?
Um, well, eh. I don’t know. I guess just had a blind spot. I think of rolling realized vol instinctively. But for a seasonality study, it has a problem I already flagged in the post: a big earnings move in August gets recounted ~20 times as the window slides over it, smearing that vol into September.
It’s just unnecessary. So I added a section to the notebook that computes calendar-month realized vol directly: take each month’s daily log returns, compute √(mean(r²)) × √252, and you get one clean RV number per month per year without overlap.
Did the calendar month realized vol (CMRV) method change the story?
The earnings effects and their seasonal patterns does look sharper.
May, June, August, and November are now the clear relative-vol peaks. Feb earnings are not important as the May and Aug earnings are capturing the bulk of the year’s revenue recognition.
September, which looked like a peak in the rolling version, drops to a trough. It was borrowing August’s earnings move through the sliding window. Once you measure September’s own returns, it’s quiet.
The late-year volatility surge now concentrates in November, an earnings month, where the rolling method showed strong effects in December.
August is now the single largest effect size, the only month exceeding the “medium” threshold. June is close.
September flips to a quiet month once you stop smearing.
The scatter plot confirms it’s not one wild year: August dots are consistently elevated across the sample. All 3 of these charts are controlling for IWM.
Last month H&R Block (NYSE: HRB) sold off hard on AI fears.
Implied volatility soared to a new 1-year high.
I wouldn’t have noticed if I wasn’t prepping materials for the kids’ Investment Beginnings Class. In the class, we learn how growth expectations as embodied by P/E multiples combined with what earnings materialize to generate a return that is some mix of reality and how those expectations are revised as investors “see the flop”.
HRB is a low P/E, high earnings yield company whose growth days are a distant memory. It doesn’t have a lot of upside but if it can maintain its current earnings and multiple its earnings yield of 16% (P/E ~ 6) looks like a super, super distressed bond. I know bonds and stocks have different hockey stick diagrams, but stay with me.
Selling a cash-secured put has similar risk characteristics as buying a bond. You collect some yield, your upside is capped at the yield, and you risk the notional amount of the strike if the stock zeroes. With the implied vol jacked, my thinking is all that vol belongs to the left of the distribution. I’m not bullish on the company. I’m not really anything as I’m not studying the company in any fundamental depth but my sling-from-the-hip trading attitude is:
This company has survived every existential threat thrown at it — the transition from brick-and-mortar to internet filing, the rise of TurboTax, and a significant increase in the standard deduction. Looks like a cockroach.
And they don’t fancy themselves more than that. Between buybacks and dividends, their shareholder yield is similar to their earnings yield. They are distributing all the cash back to shareholders so those earnings aren’t trapped inside a melting ice cube.
With implied vol jacked, I decided instead of buying the stock outright I’d skim the yield by “selling my own version of a bond”. I sold some 40 delta puts and sized it such that if I were assigned on them, it would not amount to more than 1% of my portfolio.
That’s all storytime background. I’ve written about seasonality in the context of commodities and futures spreads but HRB is a dramatic example of seasonality in an equity.
Today:
We’ll explore how to even observe the pattern and consider how it influences option pricing.
The post will include 2 Jupyter notebooks you can fork and let Codex or Claude Code run the same analysis on any tickers you like. They will automatically pull yfinance. One notebook is focused on stocks and another is focused on commodity ETFs.
A seasonal business
For as long as I can remember, I’ve heard that there are many retailers that make most of their earnings during the holidays. I’ve never verified the numbers but it makes sense. This suggests to me that much of a retailer’s annual volatility should be concentrated around Q4 results.
I never thought about how a company like HRB would also have extremely lumpy earnings. HRB’s fiscal year ends June 30. FQ3 (Jan–Mar) and FQ4 (Apr–Jun) together account for roughly 90% of annual revenue. FQ3 alone, peak tax season, is about 60% while FQ1 (Jul–Sep) is a rounding error.
Revenue has been stable around $3.4B since recovering from a 2022 restructuring. Net income sits around $554M. EPS has grown from $3.08 to $3.51 over the last few years despite flat earnings (shrinking share count).
The natural question: does the stock’s realized volatility reflect this extreme business seasonality?
Vol Has A Tax Season Too
I computed 20-day realized volatility (annualized) for HRB from 2016–2025 and broke it out by calendar month. I used SPY and IWM as control groups.
The green-shaded bands are tax season. I only show that chart for larger context but I find it hard to see clearly in that view.
Instead, I will show charts with more granular groupings with the observations that pertain to each.
Not suprising, but HRB’s median RV20 runs about 10 to 20 points above IWM in every month. This stock is always noisier than the market.
The most excess vols occur in May/Jun, Sep, Nov/Dec. This makes sense. Earnings are reported in Feb, May, Aug, Nov and the subsequent realized vol is much higher than non-earnings months.
What about March? This one is curious. Perhaps there are possibly real-time tea leaves that fundamental PMs might look at during the heart of tax prep that can lead them to trade. Or maybe this is when analysts write about tax season. For now it’s a puzzling observation.
The IQR band widens in June, Sep, and Dec meaning not only is the ratio higher, but the variance of the ratio is higher. More uncertainty about the uncertainty. Dec isn’t explained by earnings, so that’s another strange observation to note.
We can observe higher volatility related to earnings. But I would expect this for any stock. I’m suprised the earnings/post-earnings period in May-Jun doesn’t stand out as far more volatile since that report contains the bulk of the year’s earnings information.
I asked Claude for some statistical treatment even though I don’t really think “doing stats” on this little data beyond casual inspection provides marginal informational warrants raising your confidence. Turns out just asking the question did lead to some education but not how I intended.
I asked Claude to hypothesis test and generate z-scores for each month vs the mean mean log ratio of HRB to IWM vol for the entire sample. It went off and performed a t-test that generated 5 sigma z-scores in the most volatile months.
From what we’ve seen so far, that just sounds ridiculous. When I pushed back on Claude it explained that the standard error denominator in the z-scores as shrunk by √n.
Do you see the problem?
For 10 years of data, if you compute 20d trailing RV for each day in the month you will have about 200 observations per month which shrinks the denominator by a factor of √200 ~ 14. But 19/20 days overlap in the data from one day to the next. You really only have about 10 samples. Basically, one month per year when your window is 20 days.
Instead of totally putting the breaks on a statistical output, I was curious how Claude would deal with this.
It computed a stat called Cohen’s d which treats N as 10 for each month.
June (d = 0.50) is the only month approaching a “medium” effect size. December (d = 0.42) is close.
The percentile chart: a typical June sits at the 69th percentile of all month-medians. September at the 67th.
The scatter plot is a sanity check. Each dot is one year. June and September have consistently elevated dots, not one crazy year pulling the mean.
Finally, we use a heatmap to look under the surface. We can visually inspect trends or outliers, and can even be a launch point for specific inquiries like “Gee, what happened in Spring of 2020?”
The first chart, which doesn’t control for IWM, shows the impact of Covid. The second chart invites you to say, “Let’s toss 2016 and 2017, and see how the seasonality would reveal itself”. Small sample size, but May through Sep, Nov and Dec do seem more volatile.
That said, I’m not sold on May earnings being even more significant than later earnings, which is to say seasonality embedded in HRB’s revenue calendar does NOT seem to bleed into one of its earnings being that much more special than the others.
As December goes, I sparred a bit with ChatGPT on possible causes for elevated HRB volatility, even controlling for benchmarks and it gave 5 reasons that me groan. This was the best one and it feels meh:
Tax names can be unusually sensitive in December because investors are thinking about rule changes, credits, deductions, IRS readiness, and filing complexity for the coming season. Even when nothing dramatic happens, the possibility of change can raise uncertainty around demand for assisted prep versus DIY.
Wrapping up with stock seasonality
As promised, here’s the notebook to replicate the study or apply to another ticker of your choice
It pulls data from yfinance, computes 20-day realized vol, and generates all the charts you’ve seen here.
It also partitions return analysis by month. Example charts:
I didn’t go into that here since my bias is that seasonal features of volatility are more reliable than return seasonality, but you’re free fork it and play around.
Extensions
I measured realized vol, not implied vol. None of this pretends the option market isn’t aware of the seasonality. I didn’t study IV at all so the questions are green space.
The title of this post is “does revenue seasonality translate to vol seasonality?” I looked at one relatively small company in the grand scheme of things. Lots of cross-sectional green space to examine. Hopefully, there’s some inspiration in this post that you can extrapolate to broader studies.
Commodity ETF seasonal volatility
I forked and modified the notebook into one more tuned for ETFs (for example, it doesn’t control for equity benchmark volatility).
The US Natural Gas Fund (UNG) regales us with its wildly seasonal behavior:
Go run it on WEAT.
It makes sense. Commodities make sense. I don’t know what to make of stocks. Maybe that makes me crazy for being short those HRB puts.
They were originally May puts, but I rolled them forward to April. Don’t want the earnings risk and because giant sell-off was recent the April’s still had a fat bid.
It’s too expensive to buy puts to trade directionally once an asset has already made a giant move higher.
When you are 100+ vol, it’s not surprising the market puts your odds of getting cut in half at 1 in 3 proposition.
It’s hard to make money in a reasonable risk-adjusted away once an asset is already high vol since it’s hard to size it without risking your neck.
It is well within the meat of the distribution for SNDK to get cut in half this year. That’s just a good baseball player’s chance of getting a hit or a typical NBA player hitting a 3 in a game (or missing a 3 in practice).
How high vol works for you
The high vol is a gift to the natural holders. Millennial employees can lock in their unborn grandkids’ inheritance.
A non-technical way to appreciate how high vol creates this opportunity in upside call vs downside put differentials:
Imagine a stock starts at $100. It gets to $125. From $125 to $150 is only 20%
But if the stock fell to $75 the distance from $75 to $50 is 33%
Both $50 and $150 are 50% from the initial price, but in a compounding sense 150 is much “closer” to the starting value than $50. The higher the vol the less “distance” a fixed dollar move represents. As implied vol increases OTM calls grow faster in value than OTM puts. This is the source of the attractive pricing you see in the risk reversal (ie option collar).
That tweet comes from Dean Curnutt of The Alpha Exchange Podcast. He’s a partner in an option brokerage firm I’ve known for a long time. I told him he needs to buy an SF realty company, since risk reversal-financed $10mm SF Victorian pipeline is unmanned!
Speaking of, if you wanted to bet on AI without access to private shares, real estate on leverage would have worked. See Redfin economist Daryl Fairweather’s Is the Bay Area in an AI Housing Bubble?. I hear from locals who own a bunch of SF RE that the bid is mostly in single-family and multi-family rental units are not getting the hockey stick treatment. The rents have been exploding higher, however. And to think coming out of COVID, you couldn’t give away an SF condo. Super high vol asset. They need options!