Workflows are Moontowerโs screeners organized around what youโre trying to do: sell premium (Income), buy protection (Defensive), finance that protection with your upside (Collars).
We just released a new one to help directional traders scan across the market for the best payoff for a given move: Verticals
About the Verticals Workflow
It starts from a simple need:
How do I compare payoffs across tickers in volatility-adjusted terms?
You donโt want to screen across names for the best bang-for-your-buck on a 10% rally because 10% means something very different in SPY vs MU or TSLA.
Instead we use standard deviations computed from the nameโs own surface. Pick a move, say +1 SD by the November expiry, and ask the same question of every name: whatโs the cheapest vertical that pays in full if the stock gets there?
The Verticals workflow returns the answer in a grid based on the watchlist you care about.
Letโs see how it works (and learn some option math in the process).
Two knobs
You set two things:
An expiry. The picker lists every expiry any name in your list carries, with a count of how many names list it. Every row in the grid is the same maturity, so youโre comparing like with like.
A signed move. ยฑ0.5, ยฑ1 or ยฑ1.5 SD. Positive means call spreads, negative means put spreads.
For each name, the grid shows the tightest vertical that is fully in the money at that move. Tightest means adjacent listed strikes. Fully in the money means if the stock lands exactly on the target at expiry, you collect the whole strike width.
Finding the breakpoint
The target strike for a z-SD move is:
Then pick strikes:
Calls: the short strike is the closest listed strike at or below K_z. The long strike is the next one down.
Puts: the short strike is the closest listed strike at or above K_z. The long strike is the next one up.
Both rules keep the whole spread inside the target, so a stock that gets to the breakpoint maximizes the max spread value (ie it pays the width of the strikes.)
Marking the spread
The obvious price is the spreadโs mid, but itโs far too noisy if each leg is 40 cents wide and the spread is worth 30 cents.
Collecting an accurate mark for a spread is a bit of an art, combining curve fitting and option pricing. In the app, the Price you see for the spread is not mid but a Moontower fair value which lives within the bid-ask.
moontower.ai
Reading the grid
The headline number is Payout:
A 1-point spread priced at $0.20 pays 4 to 1 if the stock gets to the target.
Payout is the first column your eye goes to, but we include several columns to judge how much to trust a mark.
Filtering for confident markets
Spread bid / ask: the spreadโs own market.
Mkt width: the legged market, both legsโ bid/ask widths added together. Itโs what youโd pay to cross both legs.
Mkt / strike width: Mkt width as a share of the strike width. A 20-cent-wide market on a $1 vertical might be hard to execute nearfair value.
Leg width / vol: the wider legโs bid/ask expressed in vol points, as a share of its IV. It puts a 20-cent market on a $400 stock and a 20-cent market on a $30 stock on the same footing.
Mid: Compare with Price. When these two sit close together, the market and the model agree. When theyโre far apart, the Moontower fair value is probably more reliable.
Liq: the nameโs liquidity tier, which we provide in all our filters. Itโsa function of how wide the markets as a percent of vol allowing us to compare across names.
The grid also drops names whose markets are too wide to mark at all. Theyโre counted in the โN names excludedโ line under the grid, so you can see what got left out.
A few screens to start with
Tight markets only. Mkt / strike width under 20%, Liq High, sorted by Payout. This is the honest version of the leaderboard.
Where the market and the model agree. Add the Mid column and keep rows where Price is within a few cents of it.
Everything filters, groups and sorts like the other workflows, and your choices persist between visits.
This tool will let you look at the market and answer where the cheapest put spread or call spread to bet on a .5 or 1 standard deviation move by some expiry date.
You can also just reverse sort if youโre looking for spreads to sell. Knowing how much people love to sell options, I should probably rebrand this as the iron condor destroyer (an iron condor is a package of 2 OTM vertical spreads typically marketed as a less risky way to sell a strangle).
At the Robinhood Summit last week, Mat Cashman and I hosted a โTrading Labโ emphasizing that options are surgical tools. You only want to reach for them when you have a specific view. While their payoff is highly levered to nailing a particular timing, they are unforgiving to vague forecasts like โI generally want to be long this stockโ. If you buy the stock instead, you know your exposure. Your delta is 1.00 and doesnโt change.
If you buy an option, your exposure changes due to time passing alone. So that initial decision thrusts you into a series of future decisions, each one challenging you to tighten your thesis and face yet another bid/ask spread.
To demonstrate an appropriate use of options we stepped through a highly specific example during the lab and even executed the trade live!
Iโm going to walk you through it here today.
Setup
The session was on Wednesday, September 30th. Nike (NKE) reports earnings after the close Thursday, October 1st.
Some context:
โ๏ธNKE is down ~75% since its lifetime peak which occurred 5 years ago. While falling short of the peak, it did stage a large rally from late 2022 into 2023, before resuming its downward March which accelerated this year with the stock down >40% YTD at the time of the session.
โ๏ธNKE typically pays about $1.40/yr in dividends or greater than 4% yield at recent stock prices. However, it can no longer fund the dividend from current cash flows. They could fund it from balance sheet assets (ie dip into their savings) to be able to pay it for several more years. I learned this from Brett Caughranโs tweet:
โ๏ธI used moontower.aiโs MCP (which is now included with individual plans ๐) to ask Claude if the options market was anticipating a cut. It turns out the implied dividend about 1 year out is 50% of what NKE has been paying. NKEโs woes are out in the open, the stock and options markets see them.
With such a backdrop, we expect this to be an important earnings call. After all, if a plane is nosediving, we expect the captain to say something. (We know the content of the words will be reassuring, but weโll listen to the tone of his voice to infer how scared or optimistic we should be.)
Pulling up the option chain
With the above context in mind, we load the October 2nd option chain. This is clean as a market gets around an earnings move since the options expire 24 hours after the earnings call.
During the session, I reason aloud through what Iโm looking at.
The stock is ~$36. The 36 straddle, which can be interpreted as the average expected move size, is ~$3 or 8% of the stock price. Earnings are a big deal.
I gracefully elide the question of whether you should be bullish or bearish. If I was privy to such information, Iโd be a Market Wizard. But many people have views and wanna bet. I can help you reason through your choices given you have a view. So letโs get specific.
What are you paying for?
We arbitrarily side with the bulls, but the analysis that follows works for bears as well if they substitute different contracts.
If the 36 straddle is at-the-money, meaning the stock is also $36, then the 36 call is half the straddle or $1.50.
If the stock experiences the expected move to the upside those calls will double your money as they will be worth $3 of intrinsic value at expiry. In the language of odds, you get paid 1-1 on an 8% up move.
But if this is our specific bet, can we find an expression of the trade with more octane?
We load up the 38.5/39 call spread. Itโs marked for $.12 and if NKE expires $39 or higher, it will be worth $.50.
You risk $.12 to make $.38 so you are getting just over 3-1 odds for the same $39 outcome.
Why does this sound so much better than getting 1-1 if we just buy the 36 call for $1.50?
Because the outright call continues to pay off if the stock climbs more than 8%. You are paying for the extra profit potential if NKE goes up 10, 15, 20 percent. Being vague leads you to pay for more margin of error. But if youโre specific, you can get extra leverage on being right. Of course, this is risky because if youโre wrong most scenarios lead to total loss.
Letโs deal with the risk
The setup of the session was that we have $5,000 of capital.
If we are wrong on the vertical spread and the stock doesnโt clear $39 then we likely lose our entire premium.
We get a 3-to-1 payoff when we are right.
This type of binary outcome is a perfect setup to use Kelly sizing. The nice thingabout Kelly is that it assumes you have a total loss when you are wrong, so the sizing itself is the risk management. Youโve already budgeted for the maximum risk.
Weโll get to the sizing in a second but just for building fluency in thinking probabilistically, letโs acknowledge a few heuristics:
1. We know from the derivation of the straddle approximation, that the straddle is 80% of 1 standard deviation. Therefore, it encompasses ~79% of the distribution assuming normality. Therefore the upper tail, where NKE goes up more than $3, is expected 21% of the time. To get 3-1 odds would require a minimum probability of 25% to be a positive EV bet. But, normality is doing a lot of lifting in that sentence. Earnings are more likely a binary outcome, and while itโs too simplistic to say thereโs a 50/50 chance of the stock going up or down 8% (which would make this vertical spread seem irresistibly cheap), itโs not unreasonable to think the probability of that spread hitting is greater than 25% (or for that matter, for the symmetrical downside put spread for those with a bearish view).
In the name of walking you through sizing GIVEN you already have the bull view, weโll presume you believe thereโs a 40% chance the stock pops higher by the amount of the straddle or $3 to $39.
How much should we bet on the vertical spread if we are getting 3-1?
Kelly:
f* = p โ q/b
where:
p = probability of winning
q = 1โp or probability of losing
b = the odds youโre getting โ what you win divided by what you risk
Plug and chug:
f* = .40 – .60/3 = 20% or $1,000 of the allotted capital
Converting to contracts:
Each option contract is $.12 or $12 once we adjust for the 100 share multipler.
$1,000/$12 ~ 83 contracts
We donโt want to risk overbetting if we overestimate our p (i.e., probability of winning), so letโs size to about half Kelly and only buy 40 contracts.
We actually bought the vertical spreads live during the session.
Postscript
NKE ended up falling after earnings. The equivalent put spread on the downside would have been the 33.50/33 put spread, looking to get paid if NKE fell $3.
NKE closed Friday at $33.90, so the put spread would have expired worthless. At one point, the stock touched $32.09, so the spread would have been deep in-the-money, but because there was still some time value remaining, you wouldnโt have been able to capture its maximum value, although you probably could have flipped out of it and tripled your money, from $.12 to $.36
But it would have been hard to do since, with the stock sitting around $32 you have theta on your side, and youโd probably be thinking, โeven if the stock rallies $1 or 3% intraday, Iโll have turned my $.12 into $.50.โ
Alas, the stock ripped 6% intraday after bottoming, leaving the put spread worthless!
Notice how tricky this is for everyone. If you were short the spreads, you ended up collecting the full $.12 of premium, but the path would have greyed your hair as it looked like youโd face maximum loss or feel forced to cover only to later watch NKE stage a heroic rally.
Closing words
Options are surgical. I think of them like term life insurance. I have a specific thing Iโm trying to mitigate or take advantage. If I buy them and lose, it may or may not have been a good outcome depending on what the counterfactual would have been. The term life analogy is an obvious demonstration of benchmarking to the right outcome.
The more tightly you can wrap an option expression around a terminal value thesis, the easier the risk management is because you can budget for total loss and let sizing do the heavy work.
Thinking probabilistically is a habit of mind. Reasoning between whatโs in a price and your own confidence intervals around scenarios will develop not just discipline but it gives you metrics, even if they are finger-in-the-air estimates, to journal or track, allowing you to get a bit more calibrated with each rep.
Stand at one spot on a curve, measure everything you can there, and use those measurements to guess the height somewhere else.
You’d do this when the curve is hard to compute everywhere but easy to measure at one point, or when you want to see what drives a change. A bond’s price is a familiar case: you know its yield and duration today and want to know what happens if rates move.
The guess is built in layers. Each layer uses one more thing you measured at the anchor. The first layer is a straight line. The second bends it. The third bends the bend. You stop when the layers stop mattering, or when you run out of measurements.
Worked example: guess xยณ at x = 1.2 using only what you know at x = 1
The curve is y = xยณ. You are standing at x = 1. The true answer is 1.2ยณ = 1.728, but pretend you can’t compute it.
What you know at x = 1
Thing
How you get it
Value at x = 1
Height
xยณ
1
Slope
derivative, 3xยฒ
3
How fast the slope changes
derivative of that, 6x
6
How fast that changes
derivative of that
6
Anything further
derivative of a constant
0
The walk. Destination minus start: 1.2 โ 1 = 0.2. Call it h.
Layer 1: pretend the slope stays 3. Guess = height + slope ร walk = 1 + 3 ร 0.2 = 1.6. Off by 0.128.
Layer 2: the slope drifts. It goes up at 6 per unit, so over the walk it rises from 3 to 3 + 6 ร 0.2 = 4.2. Use the average slope, 3.6, instead of 3. Guess = 1 + 3.6 ร 0.2 = 1.72. Off by 0.008.
Written as a separate correction: the new piece is ยฝ ร 6 ร 0.2ยฒ = 0.12, added to the 1.6.
Layer 3: the drift rate drifts. Same move one level deeper. The correction is 6 ร 0.2ยณ รท 6 = 0.008. Guess = 1.728. Off by exactly 0.
Layer 4 and beyond: the measurement is 0, so every further correction is 0.
The guess is now perfect at x = 1.2, and it’s perfect at every other x too. xยณ only has three pieces of information in it. Use all three and you have rebuilt the function.
Try it at x = 3 (walk h = 2): 1 + 3(2) + 3(2)ยฒ + (2)ยณ = 1 + 6 + 12 + 8 = 27 = 3ยณ. Still exact, even two units from the anchor.
Layer 1 is the tangent line. Layer 2 bends it into a parabola that hugs the curve near x = 1 but misses on both sides. Layer 3 (dashed) lies on top of the black xยณ curve at every x, which is the whole point: for a polynomial, enough layers is exactly the function.
Why you divide by 2, then 6, then 24
Each layer’s measurement gets divided before it’s used: layer 1 by 1, layer 2 by 2, layer 3 by 6, layer 4 by 24. Those are 1!, 2!, 3!, 4!. Two ways to see why.
The averaging picture. Layer 2 used the average slope over the walk. The slope was a ramp going from 3 to 4.2, and the average of a ramp is halfway: that’s the รท2. Layer 3 needs the average of something that grows like a parabola, and a parabola from zero spends most of the walk being small, so its average is only a third of its end value: another รท3. Stack them: 2 ร 3 = 6. One more level and the average of a cubic is a quarter: 2 ร 3 ร 4 = 24.
Check the parabola claim with numbers. Sample tยฒ at t = 0.1, 0.2, โฆ, 1.0: you get 0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.49, 0.64, 0.81, 1.00. They add to 3.85, average 0.385, and with finer sampling it settles to โ .
The power-raising picture. Differentiating hโฟ gives n ร hโฟโปยน: lowering a power by one multiplies by that power. So raising a power by one divides by it. To turn a constant measurement into a term in hยณ you raise the power three times, paying รท1, รท2, รท3 along the way. That product is 3! = 6.
Layer
Measurement (xยณ at 1)
Divide by
Term
1
3
1
3h
2
6
2
3hยฒ
3
6
6
hยณ
4
0
24
0
Worked example: ln x, where the corrections stop helping
Same game, anchor at x = 1. Height is ln 1 = 0. Slope is 1/x, so 1 at the anchor.
What you know at x = 1
Layer
Derivative
Value at 1
Divide by
Term
1
1/x
1
1
h
2
โ1/xยฒ
โ1
2
โhยฒ/2
3
2/xยณ
2
6
hยณ/3
4
โ6/xโด
โ6
24
โhโด/4
5
24/xโต
24
120
hโต/5
6
โ120/xโถ
โ120
720
โhโถ/6
The measurements never hit zero. They alternate sign and grow. So there is always another correction, forever. Whether the corrections help depends on how far you walk.
Short walk: x = 1.5, so h = 0.5. True value ln 1.5 = 0.4055.
Layers used
Guess
Gap
1
0.5
0.0945
2
0.375
0.0305
3
0.4167
0.0112
4
0.4010
0.0044
5
0.4073
0.0018
6
0.4047
0.0008
Each layer roughly halves the gap. Keep going and it heads to zero.
Long walk: x = 2.5, so h = 1.5. True value ln 2.5 = 0.9163.
Layers used
Guess
Gap
1
1.5
0.5837
2
0.375
0.5413
3
1.5
0.5837
4
0.2344
0.6819
5
1.7531
0.8368
6
โ0.1453
1.0616
The gap gets worse. Each term is ยฑhแต/k, and with h = 1.5 the hแต grows faster than the k can shrink it: 1.5, 1.125, 1.125, 1.27, 1.52, 1.90, โฆ The guess swings wider and wider around the truth.
Inside the band the colored curves pile onto the black one, each layer tighter than the last. Right of x = 2 they fan out: layer 3 shoots up, layer 4 dives, layer 5 shoots higher, layer 6 dives harder. Every extra layer swings further from ln x instead of closer.
The rule. For ln x about 1, the corrections help when |h| < 1 and hurt when |h| > 1. That distance, 1, is the radius of convergence. It’s set by where the function itself breaks: ln x blows up at x = 0, exactly one unit left of the anchor, and the series can’t reach further right than it can reach left.
xยณ had no such limit because its corrections ran out before they could misbehave. That is the difference between a polynomial and everything else.
the curve you’re guessing; f(x) is its height at x
xยณ
x
“x”
the destination, any point on the horizontal axis
1.2
xโ
“x-nought”
the anchor, where you stood and took measurements
1
x โ xโ
“the walk”
destination minus start, also written h
0.2
P
“the polynomial”
the guess; a polynomial because it’s a sum of powers of the walk
1 + 3h + 3hยฒ + hยณ
n
“n”
how many layers you used; the highest power in the guess
3
Pโ(x)
“P-n of x”
the guess using n layers, evaluated at x
Pโ(1.2) = 1.728
k
“k”
the counter: which layer you’re on, running 0, 1, 2, โฆ up to n
0, 1, 2, 3
ฮฃโโโโฟ
“sum from k = 0 to n”
add up the term for every k from 0 through n
four terms
fโฒ, fโณ, fโด
“f-prime, double-prime, triple-prime”
first, second, third derivative: slope, rate of slope, rate of that
3xยฒ, 6x, 6
fโฝแตโพ
“f-k”
the k-th derivative; fโฝโฐโพ is f itself, fโฝยนโพ is fโฒ, and so on
fโฝยฒโพ = 6x
fโฝแตโพ(xโ)
“f-k at x-nought”
the k-th derivative evaluated at the anchor, a plain number
1, 3, 6, 6
k!
“k factorial”
1 ร 2 ร โฆ ร k, the divide-by column; 0! = 1
1, 1, 2, 6
(x โ xโ)แต
“the walk to the k”
the walk raised to the layer number
1, 0.2, 0.04, 0.008
f(x) โ Pโ(x)
“the gap”
true height minus guess
0
ฮพ
“xi” (Greek letter)
some unknown point between xโ and x; used only in the error formula
somewhere in [1, 1.2]
So the k = 2 term of the sum is: take the second derivative (6x), evaluate at the anchor (6), divide by 2! (3), multiply by the walk squared (0.04). That’s 0.12, the layer-2 correction from the worked example.
How big is the gap? It’s controlled by the next measurement you didn’t use, taken somewhere along the walk:
f(x) โ Pโ(x) = fโฝโฟโบยนโพ(ฮพ) / (n+1)! ยท (x โ xโ)โฟโบยน for some ฮพ between xโ and x
Read it as: the gap is small when the walk is short (the hโฟโบยน is tiny), when the next derivative is tame, or when n is large enough that (n+1)! dominates. The gap is large when the walk is long and the higher derivatives are big, which is exactly what happened to ln x at x = 2.5.
Real-world uses
Four places you’ve met this without the name. Each is worked with numbers.
Bond prices: duration and convexity. A 10-year zero at a 4% yield is priced 100/1.04ยนโฐ = 67.56. The anchor is 4%. The two measurements are duration (layer 1, slope) = 10/1.04 = 9.62 and convexity (layer 2) = 10 ร 11/1.04ยฒ = 101.7.
Yield rises 1%, so the walk is 0.01:
Layers
Guess
True price
Gap
1 (duration only)
67.56 ร (1 โ 9.62 ร 0.01) = 61.06
61.39
0.33
2 (add convexity)
61.06 + 67.56 ร ยฝ ร 101.7 ร 0.01ยฒ = 61.40
61.39
0.01
Yield rises 3%, walk 0.03: duration alone says 48.07, convexity pulls it to 51.16, true is 50.83. The gap is 30 times larger than for the 1% move. That’s the long walk. Traders quote duration and convexity for exactly the reason your tool quotes delta and gamma.
How a calculator computes sin. There’s no sin key inside the chip; it sums the series about 0: x โ xยณ/6 + xโต/120 โ xโท/5040 + โฆ.
sin(0.5): 0.5 โ 0.0208 + 0.0003 = 0.4794. True value 0.4794. Three terms.
sin(3): 3 โ 4.5 + 2.025 โ 0.434 + 0.050 โ 0.004 = 0.137. True value 0.141. Six terms and still off in the third decimal. The series converges everywhere, unlike ln x, but a long walk needs many more layers. Calculators dodge this by folding the input back to a small angle first, which is the “walk less” strategy.
Pendulum clocks. The textbook period T = 2ฯโ(L/g) comes from replacing sin ฮธ with ฮธ, which is layer 1 of the sine series. The next layer says the true period is longer by a factor of about 1 + ฮธโยฒ/16, where ฮธโ is the swing in radians.
Swing
ฮธโ in radians
Correction
Period error if you ignore it
5ยฐ
0.087
1.0005
0.05%
20ยฐ
0.349
1.0076
0.8%
60ยฐ
1.047
1.069
7%
A clock built on layer 1 keeps time at small swings and drifts at big ones. Same story: the anchor is ฮธ = 0 and the walk is the amplitude.
Compound growth. (1 + r)โฟ about r = 0 is 1 + nr + n(nโ1)rยฒ/2 + โฆ. For 5% over 10 years: layer 1 says 1.50, layer 2 says 1.50 + 45 ร 0.0025 = 1.61, true is 1.63. Layer 1 alone is the “simple interest” mental shortcut, and the layer-2 term is exactly how much compounding beats it.
All four break the same way ln x did. Past some size of move the layers you kept stop describing the function, and the fix is either more layers, a shorter walk, or computing the real thing.
Quick reference
Recipe for any function about any anchor
Pick the anchor xโ. Compute the walk h = x โ xโ.
Take derivatives of f until you have as many as you want, and evaluate each at xโ.
Divide the k-th one by k!, multiply by hแต.
Add them up. That’s the guess. The leftover is the gap.
If the derivatives hit zero, the guess becomes exact. If they don’t, check whether the terms are shrinking; if not, you walked too far.
The two examples side by side
xยณ about 1
ln x about 1
Derivatives at anchor
1, 3, 6, 6, 0, 0, โฆ
0, 1, โ1, 2, โ6, 24, โฆ
k-th term
3h, 3hยฒ, hยณ, then 0
(โ1)แตโบยน hแต / k
Exact after
3 layers
never
Works for
every x
0 < x < 2 only
Why
polynomial: information runs out
ln x breaks at 0, one unit from the anchor
Factorials
k
k!
Average of tแต over [0, h]
1
1
h/2
2
2
hยฒ/3
3
6
hยณ/4
4
24
hโด/5
5
120
hโต/6
Common series about 0, for reference
Function
Series
Converges for
eหฃ
1 + x + xยฒ/2 + xยณ/6 + โฆ
all x
sin x
x โ xยณ/6 + xโต/120 โ โฆ
all x
cos x
1 โ xยฒ/2 + xโด/24 โ โฆ
all x
1/(1โx)
1 + x + xยฒ + xยณ + โฆ
|x| < 1
ln(1+x)
x โ xยฒ/2 + xยณ/3 โ โฆ
โ1 < x โค 1
The last two have a radius because the function breaks at x = 1 or x = โ1. The first three never break, so the series works everywhere even though it never terminates.
Key Insights
What
Why it matters
Anchor and walk
Everything is measured at one point; the guess only ever knows about that point
Layers = derivatives
Each derivative at the anchor buys one more correction; that is all the information you have
Divide by k!
Raising a power costs a division each time; averaging a ramp, parabola, cubic costs รท2, รท3, รท4
Polynomials terminate
Derivatives hit zero, so finitely many layers rebuild the function exactly, everywhere
Radius of convergence
For everything else, past the distance to the nearest breakdown the layers make the guess worse
The gap formula
The error is the first term you dropped, evaluated somewhere on the walk
Alex is an options trader you should follow in case he ever tweets a lot. Because he doesnโt, when he posted the question below a year ago, it got few responses. I took the liberty of posting it myself this week.
This was fun because it led to a lot of discussion on the timeline and DMs. I was told it sparked a bunch of quant debate on one traderโs desk.
The most popular answer, which was still less than 1/3 of the responses, was the correct answer.
Why?
The maximum value of a put is the strike. The maximum value of a call is the stock price.
Straddle is C + P so $100+$100 = $200
Notice how this means all call spreads go to zero since the calls are worth the same โ the stock price. All put spreads go to their max valueโ the distance between strikes because the puts themselves are worth the strikes.
Logic for delta:
Delta is the change in option price per change in stock.
But the putโs strike is fixed, so the value of the put doesnโt depend on the stock price. The put has zero delta. Itโs always worth $100. Which means it has no gamma either
The call is $100 because the max value of the call is the stock price. The call value moves 1-to-1 with the stock, so it has a delta of 1 or 100%
The max value of a straddle is therefore the stock price plus the strike price.
If you sell the straddle or either option at max value and hedge on its delta one time (this is known as a static hedge in contrast to dynamic hedging where you would rebalance as your hedge ratio changes), you cannot lose. It is that simple fact of arbitrage that makes it the upper bound.
To address the second most popular response in the poll, those who said the straddle is $100 (wrong) and has a 1.00 delta (correct), we will demonstrate why this is incorrect.
Whatโs your p/l if you sell 1 straddle at $100 and buy 100 shares against, if the stock goes to $300?
The straddle will be worth $400, so you lose $300 but make $200 on your long share.
Hmm, maybe Iโm just underhedged. Fine, what if I hedge on a 200 delta?
In that case, you actually make money; you win $400 on your 2 shares more than offsetting the $300 straddle loss. But what if the stock went to zero?
Your straddle p/l is unchanged, but you lost $200 on the long stock position. Arbitrage max value means you cannot lose if you sell at that price. Since we found a losing scenario, the price is not the maximum arbitrage bound. If you sell the straddle at $200 and buy a single share of stock, thereโs no scenario where you lose. It is the lowest straddle value for which this no-lose scenario is true, thus itโs the arbitrage bound.
Of course, this is but a toy problem where the call and put go to their maximum values because itโs a degenerate case of infinite time or vol. But learning how a function (an option price is just a function) behaves by observing its boundaries is good for intuition. You did this in 9th grade. Khan Academy can jog your memory:
In the real world, you can fleetingly find options that trade beyond their arbitrage values:
Earlier in the week, @DeepDishEnjoyer aka p4 wrote a thread about a dividend mispricing.
It led to some back and forth with passersbys who use options but appear to have large gaps in the fundamentals.
Between the maximum value poll and p4โs dividend lesson, itโs worth saying it:
In a proper option education, you spend a lot of time on arbitrage relationships, cost of carry, and synthetics before you ever hear the word โvolatilityโ.
I didnโt study formal math but I imagine thereโs a lot in common with the process of proofs. Arbitrages rest heavily on assumptions. So to understand the relationships, you are forced into an intimate familiarity with the assumptions. And in the extremes of everything, itโs the failure to examine assumptions that leads to being blindsided. But also, when things get extreme, to go on the attack means asking yourself, โWhoโs on autopilot? Is this price resting on a stale assumption?โ The arbitrage relationships give you the highest conceptual ROI that derivatives offer, you never learn the most useful thing derivatives can teachโฆpassage over the โbridge of assesโ.
If you want to see more examples of why option basics are so key to understanding assumptions and opportunities when things get weird:
Everything below is derived from these definitions. They’re the raw material โ average squared deviation for variance, average product of deviations for covariance. When a derivation feels stuck, come back here and plug in.
Variance โ average squared deviation from the mean
Var(X) = E[(Xโ ฮผ)2] ฮผ = E[X]
Covariance โ average product of deviations
Cov(X, Y) = E[(Xโ ฮผX)(Yโ ฮผY)]
Sum of squared deviations (the un-averaged version)
SS = ฮฃ (xiโ ฮผ)2Var = SSn
Variance is just SS divided by n (or nโ1 for a sample). Same object, before you average.
The move in every derivation: plug into one of these, expand the square or product (pure algebra), apply E using linearity, then recognize the Var/Cov patterns that fall out. The computational forms below (E[X2] โ (E[X])2, E[XY] โE[X]E[Y]) are results of doing this, not starting points.
The identities
Variance from the definition
Var(X) = E[(Xโ ฮผ)2] = E[X2] โ (E[X])2
Average of the squares minus the square of the average. Worth showing where that second form comes from, since every later grind reuses this exact collapse. Start from the deviation definition and expand the square:
1nฮฃ(xiโx)2 = 1nฮฃ(xi2โ 2xix + x2)
Average term by term. The key is that x is a constant (already computed), so it pulls out of the sums:
Last term: (1/n)ฮฃx2 = x2 = (E[X])2 (averaging a constant returns the constant)
Put them together โ and notice the last term carries a coefficient of 1, not 2:
E[X2] โ 2(E[X])2 + (E[X])2 = E[X2] โ (E[X])2
The โ2 and +1 combine to โ1. That collapse โ middle and last terms both becoming (E[X])2 and partially cancelling โ is the same move behind every Var/Cov identity on this sheet.
Here a and b are the amounts held of each asset. They’re portfolio weights when they sum to 1. Var(X+Y) above is just this formula with a = b = 1 โ one unit of each, no weighting lever. The weights are what turn a raw sum into a portfolio.
Worked example. Two assets: ฯX = 20%, ฯY = 10%, ฯ = 0.3. Equal weights a = b = 0.5.
Compare to the naive weighted-average vol, 0.5ยท20% + 0.5ยท10% = 15%. The cross term (with ฯ < 1) is what pulls portfolio vol below the average of the two vols. That gap is the diversification benefit.
Variance of a difference (spread variance / pair-trading formula)
Var(XโY) = Var(X) + Var(Y) โ 2 ยทCov(X, Y)
Same as Var(X+Y) but cross term flips sign. When X and Y are highly correlated, spread variance is small โ the math behind why pair trades work.
Bilinearity of covariance
Cov(X, A + B) = Cov(X, A) + Cov(X, B)
Same in the first slot by symmetry.
Where it’s used. This is the move that lets you compute an asset’s covariance with a whole portfolio without re-deriving anything. Say a portfolio P = 0.5A + 0.5B and you want how asset A co-moves with the portfolio it sits in:
Distribute across the sum, pull the weights out. That number โ an asset’s covariance with its own portfolio โ is its marginal contribution to portfolio risk, and it’s exactly what you FOIL out when you expand Var(w1X1 + โฆ + wnXn) into the full covariance matrix. Bilinearity is the engine under every portfolio-variance calculation.
Variance of a binomial
Var(H) = np(1โp) where H = ฮฃXi
Derived in two steps, both from scratch.
Step 1 โ variance of a single flip. One flip X is 1 with probability p, 0 with probability (1โp). Mean is E[X] = p. Plug into the squared-deviation definition โ deviations are (1โp) for heads and (0โp) = โp for tails, each weighted by its probability:
Var(X) = p(1โp)2 + (1โp)p2
Factor out p(1โp): the bracket is (1โp) + p = 1, so
Var(X) = p(1โp)
(Peaks at p = 0.5, value 0.25 โ the fair coin is the most uncertain, most variance per flip.)
Step 2 โ n flips. Write H as a sum of n independent single flips, H = X1 + โฆ + Xn. Variance of a sum adds the pairwise Cov terms, but independent flips have Cov(Xi, Xj) = 0, so every cross term drops. The n identical variances just add:
Var(H) = ฮฃVar(Xi) = nยทp(1โp)
The np(1โp) isn’t handed to you โ it falls out of one Bernoulli’s p(1โp) times n, because independence kills the covariances.
Standard deviation scaling
StDev(aX) = |a| ยทStDev(X)
Correlation definition
ฯ = Cov(X, Y)ฯXยท ฯY
When ฯ = 1: Cov(X, Y)2 = Var(X) ยท Var(Y).
The derivation recipe
Every identity in this neighborhood comes out of the same five moves. When you see a Var or Cov of something built from linear combinations of random variables, this is the procedure.
Plug into the definition. Use Var(Z) = E[Z2] โ (E[Z])2 or Cov(X, Y) = E[XY] โE[X]E[Y] depending on what you’re computing.
Expand squares and products. Pure algebra on the random variables. FOIL out any binomials. No expectations yet.
Apply E using linearity. Distribute E across sums, pull constants out of expectations. This is the step that does the most work. Always handle linearity first when you have the chance โ squaring is not linear, so you simplify E first and let the square wrap what’s left.
Group matching terms. Line up the things that share factors (a2 terms together, ab terms together, b2 terms together, etc.).
Factor and recognize. Pull out shared factors and spot the patterns: (E[X2] โ (E[X])2) is Var(X), and (E[XY] โE[X]E[Y]) is Cov(X, Y).
The reason this recipe always closes: variances and covariances are quadratic in the underlying random variables, so expanding any square or product of linear combinations only generates more variances and covariances. Step 5 is recognition, not computation. There’s nowhere else for the algebra to land.
Two applications
Interview problem: E[HยทT] for n coin flips
Flip a fair coin n = 100 times. H = heads, T = tails. Find E[HยทT]. Worked slowly, because the one-line answer hides about six moves.
Step 1 โ first reach, and why it fails. The instinct is E[HยทT] = E[H] ยทE[T] = 50 ยท 50 = 2,500. But splitting a product of expectations like that is only legal when the two variables are independent. Check the precondition: H + T = 100, so knowing H pins down T exactly. Not independent. The naive split is off by a correction.
Step 2 โ name the correction. That correction is what covariance is. Rearranging Cov(X, Y) = E[XY] โE[X]E[Y]:
E[HยทT] = E[H] ยทE[T] + Cov(H, T)
Independent โ Cov = 0 โ naive split exact. Locked โ Cov โ 0 โ you need the term.
Step 3 โ get the sign first.H + T = 100, so when H is above its mean, T is forced below. They move opposite, always. So Cov(H, T) is negative, and the true answer lands below 2,500.
Step 4 โ compute Cov(H, T) via substitution. Since T = 100 โH, write Cov(H, T) = Cov(H, 100 โH) and split with bilinearity:
Cov(H, 100 โH) = Cov(H, 100) + Cov(H, โH)
First term is covariance with a constant โ 0. Second term, pull out the โ1 (scaling rule, ab = 1 ยท (โ1) = โ1):
= 0 โCov(H, H) = โVar(H)
So Cov(H, T) = โVar(H). Now it’s earned, not asserted.
Step 5 โ Var(H) is the binomial variance.H is the count of heads in n flips, so Var(H) = np(1โp) = 100 ยท 0.5 ยท 0.5 = 25.
Step 6 โ land it.
E[HยทT] = 2,500 โ 25 = 2,475
Where n(nโ1) comes from. Keep everything in symbols instead of plugging in. E[H] = np and E[T] = n(1โp), so E[H]ยทE[T] = n2p(1โp), and Var(H) = np(1โp). Then:
The n2 is the naive product, the โn is the variance shortfall, and factoring out p(1โp) leaves n(nโ1). Sanity check: 100 ยท 99 ยท 0.25 = 2,475. โ
The through-line: the answer falls short of E[H]ยทE[T] by exactly Var(H), because Cov(H, T) = โVar(H) whenever H and T sum to a constant.
Two-stock equal-weight portfolio with equal variances ฯ2 and correlation ฯ
Impose equal variances Var(X) = Var(Y) = ฯ2, and write the cross term with correlation, Cov(X, Y) = ฯฯ2 (since Cov = ฯ ยท ฯXยท ฯY and both vols are ฯ):
Why this is the instructive form. Weights are fixed (50/50) and both vols are fixed (ฯ). The only thing left moving is ฯ. So the entire diversification effect is carried by the single factor (1 + ฯ)/2 โ a clean dial from 0 to 1 that multiplies the single-name variance. Sweep ฯ and read what correlation actually does:
ฯ
Var(P)
ฯP (vol)
vs. one stock
+1
ฯ2
ฯ
no benefit โ identical names
+0.5
0.75ฯ2
0.87ฯ
13% vol cut
0
0.5ฯ2
0.71ฯ
29% vol cut (the โยฝ case)
โ0.5
0.25ฯ2
0.5ฯ
half the vol
โ1
0
0
risk fully cancels
The variance scales linearly in ฯ, but the thing you feel โ vol, ฯP = ฯโ((1+ฯ)/2) โ scales as the square root, so the first chunk of decorrelation buys more than the last. Going from ฯ = 1 to ฯ = 0.5 already takes 13% off your vol. You do not need negative correlation to diversify; anything below +1 helps. Negative correlation is just the strong form, and ฯ = โ1 is the perfect hedge where the two positions cancel outright.
The whole two-name diversification story lives in that (1 + ฯ)/2 factor. Same vols, same weights, and correlation alone moves you from “no benefit” to “risk gone.”
Two-stock unequal-weight portfolio with equal variances ฯ2 and correlation ฯ
Var(P) = ฯ2 [1 โ 2w(1โw)(1โฯ)]
Diversification benefit is the product of a weight piece (2w(1โw), maxed at w = 0.5) and a correlation piece (1โฯ). Need both to get benefit. With equal variances, equal weighting is optimal โ any tilt from 50/50 sacrifices diversification.
Minimize over w. Var(P) is an upward parabola in w (positive coefficient on w2), so the critical point is the min. Differentiate term by term and set to zero:
2wฯX2โ 2(1โw)ฯY2 + 2(1โ2w)ฯฯXฯY = 0
Divide by 2, expand, collect the w terms on the left and constants on the right, factor w out:
w(ฯX2 + ฯY2โ 2ฯฯXฯY) = ฯY2โ ฯฯXฯY
w* = ฯY2โ ฯฯXฯYฯX2 + ฯY2โ 2ฯฯXฯY
The denominator is Var(XโY) โ the spread variance from earlier. The numerator is ฯY2โ Cov(X, Y).
The payoff โ set ฯ = 0 (independent names):
w* = ฯY2ฯX2 + ฯY2 = 1/ฯX21/ฯX2 + 1/ฯY2
That’s inverse-variance weighting: each asset’s weight is its inverse variance over the sum of inverse variances. The quieter asset gets more money. This is the result behind Kalman filters, weighted least squares, and meta-analysis โ anywhere you optimally combine noisy estimates, you weight by precision (1/variance). It’s also the “optimal” cousin of the inverse-vol risk-parity heuristic, which ignores correlations.
Intuition โ hold ฯX fixed at 20% (ฯX2 = 0.04), turn the ฯY knob:
ฯY
ฯY2
w* on X
0
0
0
10%
0.01
0.20
20%
0.04
0.50
40%
0.16
0.80
โ
โ
โ 1
X’s weight is driven by Y’s variance, not its own. The noisier the alternative, the more you pile into X. Three anchors: ฯY2 = 0 โ w* = 0 (Y is riskless, hold only Y); ฯY2 = ฯX2 โ w* = 0.5 (equal variances recover equal weighting); ฯY2 โ โ โ w* โ 1 (Y is pure noise, flee into X). The cleanest limit: if ฯX2 = 0, then w* = 1 โ a riskless X takes the whole book. Precision is just quietness, and you trust the quiet estimate more.
Three-variable portfolio variance โ why the matrix shows up
Same Form A grind, one more variable. Expand (aX + bY + cZ)2, apply E, subtract the squared-mean term. Every squared term becomes a variance, every cross term a covariance:
n variance terms โ one per asset (the ai2 Var pieces)
nC2 = n(nโ1)/2 covariance pairs โ one per distinct pair
Total = n + nC2. For n = 3: 3 + 3 = 6. For n = 100: 100 variances + 4,950 covariance pairs. The cross terms grow as n2, which is exactly why nobody writes portfolio variance longhand past n = 3 โ you switch to the matrix form.
The double-sum / matrix form. Organize every term into a grid indexed by asset pairs. With weights wi and returns ri:
Var(P) = ฮฃiฮฃjwiwjCov(ri, rj) = wโคฮฃw
Reading the double sum: the outer ฮฃ over i and the inner ฮฃ over j together form every ordered pair (i, j). For each pair you drop in one term, wiwjCov(ri, rj), and add them all up. For n = 3 that’s 3 ร 3 = 9 cells:
X (j=1)
Y (j=2)
Z (j=3)
X (i=1)
a2Var(X)
ab Cov(X,Y)
ac Cov(X,Z)
Y (i=2)
ab Cov(X,Y)
b2Var(Y)
bc Cov(Y,Z)
Z (i=3)
ac Cov(X,Z)
bc Cov(Y,Z)
c2Var(Z)
Sum all nine cells and you get the six-term formula above. Two things to see:
Diagonal (i = j, shaded): Cov(ri, ri) = Var(ri), so the diagonal is the n variance terms.
Off-diagonal (i โ j): each unordered pair appears twice โ cell (X,Y) and cell (Y,X) are identical โ and those two copies are exactly where the factor of 2 on each covariance comes from. You never write the 2 by hand; the grid double-counts it for you.
So ฮฃ is the covariance matrix: variances down the diagonal, covariances off it. wโคฮฃw just says “sweep every cell of the grid, weight it, sum it.” The n + nC2 count is the matrix โ diagonal plus (doubled) upper triangle. You’ve already discovered why the matrix form is inevitable; it’s just bookkeeping for the term explosion.
Figure โ the double sum is the matrix: one sweep, three views
Figure โ three forms of the same variance, and where the 2s go
Notation you’ll see in practice: wโคฮฃw. You’ll run into this constantly in risk models, optimizers, and quant papers. It’s the same portfolio variance, packaged as a matrix operation. Reading it piece by piece:
w โ the weight vector, weights stacked in a column.
wโค โ “w transpose,” the same weights laid flat as a row. Transpose just tips a column over into a row.
ฮฃ โ the covariance matrix (the grid above). Watch out: this capital-sigma is the matrix, not a summation sign. Variances on the diagonal, covariances off it.
So wโคฮฃw is row-of-weights ร matrix ร column-of-weights, which multiplies out to a single number โ the portfolio variance. It’s identical to the double sum, and in a spreadsheet it’s literally =MMULT(MMULT(TRANSPOSE(w), ฮฃ), w).
Why bother, when the double sum already shows everything? Three practical reasons, none of them “it’s more correct.” It doesn’t grow โ three symbols whether n is 2 or 2,000, where the double sum for 500 names is 250,000 terms. It’s how software actually computes portfolio variance (one fast matrix op). And optimization only speaks matrix: the minimum-variance weights come out as ฮฃโ11 normalized, and the inverse ฮฃโ1 has no double-sum spelling. The two-asset inverse-variance weighting derived above is ฮฃโ1 for n = 2 โ the matrix form is how that generalizes. For understanding, the double sum is enough; this is the notation for doing things with it.
The ladder
Each rung is built from the one before it โ the definition first, then the algebra of scaling and adding, then portfolios, then the jump to the matrix. Nothing is assumed that wasn’t derived earlier.
1. Variance as average squared deviation
2. Var(X) = E[X2] โ (E[X])2 โ from the definition
3. Cov(X, Y) = E[XY] โE[X]E[Y] โ from the definition
4. Var(aX) = a2ยทVar(X)
5. Cov(aX, bY) = abยทCov(X, Y)
6. Cov(X + c, Y) = Cov(X, Y) and Cov(X, c) = 0
7. Var(X + Y) = Var(X) + Var(Y) + 2ยทCov(X, Y)
8. Var(aX + bY) โ the full weighted-sum workhorse
9. Two-stock equal-weight portfolio variance โ the (1+ฯ)/2 diversification factor
14. Var(aX + bY + cZ) โ three variables, and the n + nC2 term count
15. General n-asset portfolio variance โ the wโคฮฃw matrix form
Is this one lesson in a math course?
No. This would be roughly half a semester of a first probability course, or a full chapter and a half of a more applied stats book.
Rough mapping to a standard curriculum:
Variance from the definition, E[X2] identity: one lecture, plus a problem set
Covariance and the product identity: one lecture
Scaling rules, bilinearity, variance of a sum: one to two lectures
Portfolio variance, weighted sums, correlation: one lecture in the probability course, or the opening week of a finance/portfolio-theory course
Binomial variance, applications: another lecture or two
So this is the equivalent of maybe four to six lectures of material, plus the problem sets that go with them. The reason it feels like a lot is that this sheet does the whole pipeline โ derivation, intuition, numerical examples, applications โ for each piece, instead of showing a formula and moving on.
The trade-off is real: this is slower but produces durable understanding. A typical math course shows you Var(aX + bY) on day one, leaves the “why it’s that and not something else” fuzzy, and you pattern-match for the rest of the semester. Done this way, when ฯ2ยท (1+ฯ)/2 turns up in a textbook two years later, you see the bilinearity FOIL behind it instead of recognizing a memorized formula.
One of the most important concepts in risk-taking is bet sizing. Which is unfortunate because people are quite bad at it, while the effort to be way above average is quite low.
A jarring and famous demonstration of this is the Haghani-Dewey Coin Flipping study, which showed how even college grads with business, economic, and technical backgrounds incinerated their capital or massively underperformed the expected profits presented to them by a game they knew was rigged in their favor.
For a binary wager (ie win or lose), if you know the payoffs and the probability of winning, both of which were known to the participants, the solution is to use the Kelly Criterion.
The tragedy is that it is incredibly simple to compute and applies to many conventional gambles and decisions (the examples in the quiz will span various life situations!).
If something is both easy and widely relevant, it should be common knowledge. So letโs fix that today. Iโll show you how easy it is to use, and youโll forever be able to do it in your head.
First, a succinct definition:
Kelly is the bet size, as a fraction of bankroll, that maximizes the long-run compounded growth rate of your wealth. Itโs a mathematical solution to bet size that doesnโt seek to maximize expected profit per trial, but the size that optimally balances compounding rate and survival.
If you want to go deep on this, see Moontowerquantโs Kelly Criterion Resources, but todayโs focus is on getting straight to usability.
We will use this formulation of Kelly because itโs general:
f* = p โ q/b
where:
p = probability of winning
q = 1โp or probability of losing
b = the odds youโre getting โ what you win divided by what you risk
The easiest way to learn it is just jump right in with a few worked examples:
Fair coin wager (even odds style bet)
p =50%
q= 50%
b =1 (ie even money, for a $1 bet you either lose a $1 or make a $1 profit)
f* = 50% – 50% / 1 = 0 โ bet nothing, zero edge
Coin biased in your favor (even odds style bet)
p =60%
q= 40%
b =1 (ie even money, for a $1 bet you either lose a $1 or make a $1 profit)
f* = 60% – 40% / 1 = .20 โ bet 20% of your bankroll
Roll a 6 on a die (underdog bet where you get odds)
p =1/6
q= 5/6
b =8 (for a $1 bet, you either lose a $1 or make an $8 profit)
f* = 1/6 – (5/6) / 8
f* =8/48 – 5/48 = 3/48 โ bet 6.25% of your bankroll
If f* is 0 or negative, you have no edge, so not betting is prescribed
Sports moneyline (betting as a favorite where you lay odds)
A โ200 favorite. You risk $2 to win $1, and the line implies 2/3, but you think itโs closer to 3 in 4.
p = 75%
q = 25%
b = 0.5 (getting 50% return on the amount you risk)
f* = 75% โ 25% / 0.5 = 75% โ 50% = 25% โ bet 25% of your bankroll
Wait a minute, these are large bets?!!
If these bet sizes seem surprisingly large for the given advantages, then your senses are well-tuned. For most people, โfullโ Kelly is too big!
Kelly maximizes long-run growth on the assumption your probability is correct. Well, it probably isnโt because the world is messy. We can inject some humility by using a fraction of Kelly:
โHalf Kellyโ gives up about a quarter of the growth rate and roughly halves the drawdowns. If you invert that, you see that the Kelly scaling law means as you bet bigger, you get diminishing returns per unit of risk. Extrapolating that logic, betting more than โfull Kellyโ is incinerating compounded wealth even if the individual bet has positive EV.
โQuarter Kellyโ or less is far more common in practice.
Please donโt let the equation scare you, itโs intuitive and easy to remember
Look at the equation again:
f* = p โ q/b
Itโs just โhow often you winโ minus โhow often you lose.โ Itโs just that the second term incorporates the payoff. The loss term gets divided by b, which represents the return you collect when youโre right.
When b = 1, youโre getting even money. A 100% return. Dividing by 1 leaves q alone, and the equation collapses to pure hit rate: p โ q. Thatโs the coin case where you bet $1 to make $1.
When b > 1, youโre getting long odds. The division shrinks the loss term. This is why the die works. You lose 5 out of 6 rolls. Straight subtraction says youโre down 66 cents on the dollar and should never play, but youโre paid 8-to-1, so that 5/6 becomes 5/48, and suddenly the 1/6 win percentage is the bigger number. Long odds forgive a bad hit rate.
When b < 1, youโre laying odds. Now division stretches the loss term. The moneyline: you only lose a quarter of the time, but at โ200 each loss costs you two units to earn back one, so that 25% loss percentage behaves like 50%. Being right three times out of four barely clears the bar. Lay enough odds and even a very good record is a losing proposition.
The graphic shows how you can think of the odds (the denominator) as shrinking or inflating q, as you collapse your thinking to a comparison of p vs q.
A word on b
b trips people up because โoddsโ is loaded gambler jargon. A wider interpretation of b is that itโs a percent return.
Itโs what you make divided by what you risk. Even money is b = 1: risk a dollar, make a dollar. Thatโs a 100% return on the amount at stake. 3-to-1 is b = 3, a 300% return. Laying โ200 is b = 0.5 because if you risk two to make one, itโs a 50% return.
[Return is a profit, while multiples donโt subtract your initial risk. Itโs the difference between โI 2xโd my moneyโ vs โI made 100%โ or โI 10xโd my moneyโ vs โI made 900%โ. The percent return is the multiple minus one because we subtract our initial risk.]
The reason itโs a return and not just โthe oddsโ is that Kelly assumes a loss wipes out the whole stake. The denominator is always the same number: everything you put up. b is comparable across a coin, a die, and a moneyline because itโs the return on risk, always measured against a total loss.
b = 1 is a natural reference point. At 100% return, a win exactly cancels a loss, so you need to win more than half the time. The breakeven hit rate changes with b.
Set f* = 0 and you get p = 1/(1+b).
Read the table as a menu of the hit rates youโre allowed to have. At b = 24 you can be wrong 24 times out of 25 and still be flat. At b = 0.25 you can be right four out of five and still be flat
Applying to real life: when is Kelly the right tool?
Kelly needs a few inputs: a bankroll, a payoff you know, and a probability estimate.
Which of these is a Kelly problem?
A prediction market contract trading at 30ยข. You think itโs worth 45ยข.
Youโre all-in-or-fold on the river with a read that youโre good 40% of the time, getting 3-to-1 from the pot.
How much of your 401(k) to put in equities.
Writing checks as an angel investor across 30 startups.
Buying a weekly call on a biotech ahead of an FDA decision date.
Whether to take the new job.
Your buddy offers you 5-to-1 that it rains in Oakland tomorrow. The forecast says 30%.
Buying homeowners insurance. The premium is clearly more than the expected loss โ thatโs how the insurer stays in business.
Your neighbor doesn’t carry homeowners coverage. She banks the premium instead.
Your auto policy offers a $500 deductible or a $2,500 deductible, for a $340/yr discount on the premium.
Youโve got vested startup options. Exercising costs $40k out of pocket in strike, and you think thereโs maybe a 15% chance the company gets somewhere that makes them worth $1M.
A merger arb spread. Targetโs at $46, deal price is $50, and it trades back to $38 if the deal breaks. You think it closes 90% of the time.
Your agency spends 20 hours of unbilled time on a speculative pitch. You win about a quarter of them, and a win is worth 80 billable hours.
Solutions to Kelly Problems
Yes. Cleanest case there is. Binary, known payoff, and the price provides b directly. Risk 30ยข to make 70ยข, so b = 2.33. f* = 45% โ 55%/2.33 = 21%.
Yes. This is the canonical one. p = 40%, b = 3, f* = 40% โ 60%/3 = 20% of your stack. The wrinkle is that in poker your stack isnโt really your bankroll. Thereโs a whole literature on pros using Kelly for bankroll management across sessions rather than for a single river decision.
No. Not this version of it. Stock returns arenโt generally binary so thereโs no p, q, or b. Thereโs a continuous analog called Mertonโs Share, which is similarly rooted in reward vs variance. What Gamblers Can Teach the Buy-and-Hold Crowd can get you started.
Sort of. The structure is right: repeated, roughly binary, long odds. The problem is that p is a guess and b is a bigger guess, and Kelly is violently sensitive to overestimating your edge. Garbage in, garbage out.
Approximately. If you treat it as approve/reject itโs binary enough to size with. If the expiry aligns with the date such that you are betting strictly on the terminal intrinsic value, the option piece will inherit the binary modeling you imposed on the stock.
No. The variables are too opaque.
Yes. p = 30%, b = 5, f* = 30% โ 70%/5 = 16%. Note, youโll lose this bet more than twice as often as you win it, so your most likely scenario is losing 16%. You can shrink the Kelly fraction if this makes you uncomfortable.
Wrong side of the equation. Run f* on this and you get a negative number, because youโre buying a negative-EV bet.
Yes. Itโs the same policy, so notice that the bet only exists on the insurerโs side of it! Every year your neighbor doesnโt buy, she collects a premium and writes a tail. Rebuild cost $500k, premium $3,000, call it a 1-in-500 chance of a total loss.
p = 99.8%
q = 0.2%
b = 3,000 / 500,000 = 0.006 (risk $500k to win $3,000)
Positive, as expected since insurers price premiums well above fair value. In this case, her bet size is the $500k house. If the house is most of her net worth, sheโs at 100% on a bet capped at 66%. Rather than overbet, she should buy the policy. If sheโs worth $5M, sheโs betting 10% when sheโs allowed 66%, which puts her near quarter Kelly (~14%), and she could skip the insurance. If sheโs worth $1mm, itโs a 50% bet, which is more than half Kelly. Iโd say take the insurance but Iโm a wimp. There are other considerations (would she have the liquidity to rebuild the home or maybe taking the insurance with a high deductible is a better fit), but just doing this exercise gives you a sense of how risky or conservative your choices are relative to the bet share that maximizes long-term wealth.
Yes. Raising the deductible is like you writing a $2,000 policy and collecting $340 a year for it. Youโre the insurer again, so work out what you need to believe. Take the high deductible and save $340. Have a claim, and youโre out $2,000 more, but you already banked the $340, so the loss is $1,660.
b = 340 / 1,660 = 0.205
f* = p โ q/0.205 = p โ 4.88q
Set that to zero, and you get p = 4.88q, which, with p + q = 1, means q = 17%. Your breakeven is a claim every 5.9 years. Anything less frequent and youโre the one with the edge.
Letโs say real-world collision frequency is more like 6%. So p = 94%:
f* = 94% โ 6%/0.205 = 94% โ 29.3% = 64.7%
Which says risk at most ~65% of your bankroll. The risk here is $1,660. That clears as long as you have about $2,600 in liquid savings, which is to say the sizing check is trivially satisfied for almost everyone so you should generally opt for the higher deductible. For quarter Kelly, weโd need savings of $1,660/(.647 * .25) = $10,262.
Approximately. Itโs not truly binary, but if you frame it in a way where you are comfortable with the no consolation prize of a medium outcome, you can see it as paying $40k for a 15% shot at $1M. b = 24, so f* = 15% โ 85%/24 = 11.5% of your liquid net worth. This is quite sensitive to your estimate of p of course.
Yes, a classic example of binary-type risk in markets. You risk $8 to make $4, so b = 0.5 โ youโre laying odds, same as the moneyline. f* = 90% โ 10%/0.5 = 70%. That number is only as good as the 90%. Revise p to 75% and f* is 25%.
Yes, in a subtle way! Your bankroll is capacity, not cash. b = 80/20 = 4, so f* = 25% โ 75%/4 = 6.25%. Twenty hours has to be 6% of what youโre working with, which means you canโt run this pitch out of a 100-hour month. If youโre the manager, you can put it in dollar terms by converting to wages.
Finally, I strongly recommend William Poundstoneโs book Fortuneโs Formula: The Untold Story of the Scientific Betting System That Beat the Casinos and Wall Street
Description:
In 1956, two Bell Labs scientists discovered the scientific formula for getting rich. One was mathematician Claude Shannon, neurotic father of our digital age, whose genius is ranked with Einstein’s. The other was John L. Kelly Jr., a Texas-born, gun-toting physicist. Together they applied the science of information theoryโthe basis of computers and the Internetโto the problem of making as much money as possible, as fast as possible.
Shannon and MIT mathematician Edward O. Thorp took the “Kelly formula” to Las Vegas. It worked. They realized that there was even more money to be made in the stock market. Thorp used the Kelly system with his phenomenally successful hedge fund, Princeton-Newport Partners. Shannon became a successful investor, too, topping even Warren Buffett’s rate of return. Fortune’s Formula traces how the Kelly formula sparked controversy even as it made fortunes at racetracks, casinos, and trading desks. It reveals the dark side of this alluring scheme, which is founded on exploiting an insider’s edge.
Shannon believed it was possible for a smart investor to beat the marketโand William Poundstone’s Fortune’s Formula will convince you that he was right.
a gripping narrative full of 20th century trivia that ties together the birth of information theory, some of the greatest scientific minds of the 1900s, the rise of quantitative finance, and the role of organized crime. These topics come alive in a fresh, memorable way when discovered through the lens of its colorful characters.
It chronicles the history of the efficient market hypothesis (MIT, U Chicago, Paul Samuelson). You can organize its conclusion around this excerpt:
There is much truth in the efficient market hypothesis. The controversy has always been over just how far the claim can be pressed. Asking whether markets are efficient is like asking whether the world is round. The best way to answer depends on the expectations and sophistication of the questioner. If someone is asking whether the world is round or flat, as fifteenth-century Europeans might have asked, then โroundโ is a better answer. If someone knows that and is asking whether the earth is a geometrically perfect sphere, the answer is no.
Return Stackedโs RSSB gives you a dollar of global equities and a dollar of Treasuries on the same dollar of capital. They just listed options on it this week. It will be a useful option market to watch if it gathers liquidity because its implied vol allows you to back out an implied stock-bond correlation since we know the vol of the legs.
Risk-parity funds and strategies are diversified, which gives them cover to use leverage but also means they are structurally short stock-bond correlation. In theory, they should be natural buyers of RSSB vol. If they actually did that, Iโd expect the implied vol to trade at a healthy risk premium since itโs a one-way risk. Thereโs no real natural seller of that correlation.
I asked the Moontower Agent to work out the details and generate a deck (which is also a heat check on its abilities.) It produced a deck I could download, walking through the variance identity, a IEF-for-GOVT proxy swap, a scenario table for impliedย ฯย across RSSB IV levels, and the noise associated with realized correlation.
This made me look up a time series of the correlation between stocks and bonds using VTI and IEF as respective representatives of the asset classes. The 30-day came back +0.43, the 1-year at +0.28.
The agent volunteered the following statistical insight:
N=22 daily returns is a small sample. The 95% confidence interval on a correlation of +0.43 with N=22 is roughly [+0.02, +0.72] โ wide. You cannot confidently distinguish +0.43 from +0.20 or +0.60 at that sample size. The 1Y number (N=251) is statistically much tighter โ CI roughly [+0.16, +0.39].
Normally, when you compute a confidence interval, you effectively make a market by scaling the standard deviation to your desired confidence (so 1.96 or โ2 sigmaโ for ~95% confidence)
But take notice of the first interval: +0.02 to +0.72 isnโt centered on +0.43. The upper tail runs 0.29 above, the lower tail 0.41 below. Weird. You wouldnโt see lopsided error bars if the math was something like โestimate ยฑ 1.96 ร standard errorโ.
Agent teach me what you did and why.
The problem is that the error barโs width depends on the answer
Correlation lives on [โ1, +1]. Bounded. If the true ฯ is 0.9, your sample estimates canโt overshoot by much (the ceiling is 1.0) but they can undershoot plenty.
That boundedness shows up in the standard error of r itself, which runs about (1 โ rยฒ)/โ(N โ 1). Look at what that does. At r = 0.43 with N = 22 the SE is 0.177. At r = 0.9 with the same 22 observations itโs 0.042, four times tighter. Not because you learned more, but because you got squeezed against the wall.
The agent used something it calledย Fisherโs fixย to move to a coordinate system where the standard error stops depending on r, do the easy symmetric thing there, and come back.
The recipe
1.ย Transform the point estimate: z = arctanh(r) = ยฝ ยท ln[(1 + r) / (1 โ r)]
2.ย Take the standard error in z-space: SE = 1/โ(N โ 3). Note whatโs missing. No r. Sample size is the only input.
3.ย Build the interval symmetrically, the boring way you already know: z ยฑ 1.96 ยท SE
4.ย Recover each endpoint separately: tanh(z_low) and tanh(z_high)
Broadly educational bits to notice
Step 1 does almost nothing to the estimate.
0.4332 becomes 0.4635. The transform is only there to get the r out of the standard error in step 2.
Step 4 is where the lopsidedness comes from.
Both 30-day endpoints sit exactly 0.4497 away from the center in z-space. Perfectly symmetric. Butย tanh squashes hard once youโre out past 0.5 but does almost nothing near the origin, so the top end at 0.9131 gets crushed down to +0.72 while the bottom end at 0.0139 is nearly untouched at +0.014.ย What matters is each endpointโs distance fromย zero, not its distance from your estimate.
Step 2 accounts for sample size
Ten times the sample and the standard error only comes down by a factor of 3.6. At large N the confidence grows by โN scaling, but at small N, subtracting 3 makes the confidence grow slower than square root scaling.
2 lessons
The object-level lesson: Correlations are volatile and because they are bounded from [-1,1] we need to recenter our point estimates before cuffing their ranges
The meta-lesson: LLMs are great math tutors so when they volunteer info of the โI donโt know what I donโt knowโ variety they can hold your hand. Iโve shared how I use LLMs as a tutor before inย Socrates 2026: how to use highlights
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 pricing falls out of the risk-neutral world that rests on โno-arbitrageโ assumptions. In fact, the lognormal return process, described in the quote without ever using the word โlognormalโ, is only one of many assumptions. The forward price of the stock is also assumed to be a function of the risk-free rate, which pushes the price that the options are based on higher than the spot price. This, of course, pushes up calls and puts down by their respective deltas. These assumptions conspire to make calls look quite expensive relative to puts to someone comparing the risk-reward of options intuitively.
Warren Buffett sells the long-dated puts because he believes the no-arbitrage assumption of the risk-free rate underestimates real-world forward prices. The option trader he faces is quite content to buy those puts since they are looking for an easy flip in the vol market.
FX carry. The speculator holds the future for the risky but generous profit the risk-neutral price creates. The derivatives trader is content to make a penny of arbitrage profit.
This is an admittedly mind-bending state of affairs, but it creates disagreement because of different horizons. This is the basis for trade!
The collars (also known asย risk reversalsย orย fencesย depending on the trading floor you grew up on) are another example of risk-neutral assumptions presenting wacky prices to those who donโt require arbitrage to trade.
The arbitrageur prices the collar like a contractor bidding a job. The daily hedges are materials and labor. The replication price is a manufacturing cost. Call it $500 per square foot. But the client trading the collar is looking at the finished house represented by the payoff of where the stock lands. They are happy to pay $500/ sq ft if the final product is worth $800/ft. The derivatives trader is not underwriting the final value but operating a cost plus business. They have no view on the value of the final product. Itโs literally none of their business.
If you want to tangle with this deeper, you are welcome to revisitย how to get arbed with perfect information (again)ย but take heart that you arenโt alone if you struggle with the idea of no-arbitrage replication. I always say itโs the โbridge of assesโ for finance.
Collar Shopping
Deanโs tweets highlighted stocks where the calls you overwrite can finance a fairly high strike put, creating an attractive hedge and therefore risk-reward to a long position.
Consider an example where you buy a $100 stock and a 1-year 20% out-of-the-money put while selling a 1-year 40% out-of-the-money call at the same price as the put. In other words, a โzero-costโ collar. The most you can lose is 20% in the case where the stock tanks. Your upside is capped at 40% before your shares would be called away. If you think the stock has a symmetrical distribution where itโs going up or going down are the same probability this looks like a good bet because you are getting 2-1 odds.
If the collar costs $2 or 2% of the stock price, we can roll that into the basis (so $102). Now you are risking 22% to make 38%, a risk reward (R:R) of 1.73 to 1.
This is a snapshot from the Moontower Collars Workflow on 8/11/26 for options with about 3 months to expiry.
Every row on the screen prices the package of buying the .25 delta put, selling the .25 delta call, and buying the stock.
You can restrict your universe to certain sectors and re-sort. You can filter for stocks a certain threshold above their moving average or stocks that are strongly correlated to each other to hunt for the best bang for your buck for a given beta, or just any number of screens to narrow your candidates.
A thread for the masochists
The strikes here are delta-defined, so the vol gap between names is already baked in. You could imagine beta-adjusting the strikes to go a step further (although youโd need to use the API/MCP).
Betaย is correlation times the vol ratio. So if correlation < 1.0, beta-adjusting pulls the call strike in toward at-the-money. Youโre short that call in a collar, so a nearer strike prints fatter making the risk-reward look better. But itโs a trade-off. The result comes from truncating idiosyncratic upside that is not captured in beta.
Defensive-minded investors should take note (as Dean clearly has). The multi-year highs in deferred interest rates (pushes up forward prices) and the fact that high-flying stocks that have made concentrated investors quite rich are also relatively high-volatility presents those of us in the real (not risk-neutral) world an attractive menu of hedges.
A final puzzle for the masochists
Collared stock has the same hockey stock diagram as owning a call spread of the same strikes but the total cost will vary by some amount. How much is the amount and why? The hint lies in put-call parity. Solving this should feel like a puzzle and is a step on the โbridge of assesโ.
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.