Put spread calculator results are the easiest arithmetic in options. Net credit is the short put price minus the long put price. Maximum loss is the strike width minus that credit. Breakeven is the short strike minus the credit. Every calculator on the internet returns those three numbers correctly, and none of them is where the money is won or lost. Three things decide whether a put spread was worth entering, and a standard calculator reports none of them. The same payoff can be built out of puts or out of calls at identical strikes, and one of those builds is routinely impossible to profit from. The two legs never trade at the same implied volatility, and on the put side that gap is large enough to move the credit by a quarter. And the short put leg carries an early assignment risk that a European pricing model, which is what almost every calculator runs, cannot represent at all. This guide builds the tool that handles all three, using a live SPY option chain captured on 2026-08-15 for the 2026-09-18 expiry, with the underlying at 776.34 and 34 days to run.
Everything below is educational. Every strike, expiry and ticker is an example chosen to show how the arithmetic behaves. Nothing here is a recommendation to trade any contract or to adopt any strategy.
Put spread calculator: the same payoff, built two ways
Start with the table that reframes the whole problem. Each row is one bullish, defined risk, 10 point wide position. Each can be built as a put credit spread (sell the higher put, buy the lower put) or as a call debit spread (buy the lower call, sell the higher call). Put-call parity says those two are the same position. The payoff diagrams are identical. The breakevens agree to within a few cents.
They do not cost the same to put on.
| Strikes | Put legs quoted width | Call legs quoted width | Risk at mid, put build | Risk at mid, call build | Risk at fill, put build | Risk at fill, call build | Verdict |
|---|---|---|---|---|---|---|---|
| 720/730 | 0.04 | 5.50 | 9.45 | 9.48 | 9.47 | 12.23 | call build impossible |
| 730/740 | 0.04 | 5.15 | 9.20 | 9.06 | 9.22 | 11.64 | call build impossible |
| 740/750 | 0.05 | 4.14 | 8.81 | 8.57 | 8.84 | 10.64 | call build impossible |
| 750/760 | 0.06 | 4.39 | 8.22 | 8.83 | 8.25 | 11.03 | call build impossible |
| 760/770 | 0.08 | 3.31 | 7.30 | 7.18 | 7.34 | 8.84 | both tradeable |
| 770/780 | 0.11 | 0.76 | 5.97 | 6.41 | 6.03 | 6.79 | both tradeable |
| 780/790 | 1.83 | 0.16 | 4.00 | 4.56 | 4.91 | 4.64 | both tradeable |
| 790/800 | 4.41 | 0.10 | 3.21 | 2.97 | 5.41 | 3.02 | both tradeable |
Read the 720/730 row slowly. At the mid, the two builds differ by three cents: 9.45 against 9.48. Any calculator that prices from the mid will tell you they are the same trade, and at the mid they genuinely are. At the price you can actually transact, the put build risks 9.47 and the call build costs 12.23. The structure caps out at the 10 point strike width. A position that costs 12.23 to enter and can never pay more than 10.00 is not a bad trade. It is an arithmetically impossible one, and it has a guaranteed loss of at least 2.23 built into the fill.
Four of the eight call builds in that table fail that test. Zero of the put builds do.
This is the single most useful thing a put spread calculator can tell you, and it is the thing they all leave out.
Why one build is cheap and the other is not
The mechanism is not exotic. It is the order book, and it depends only on moneyness.
At the 720 and 730 strikes, with the underlying at 776.34, the puts are deep out of the money and the calls are deep in the money. Out of the money contracts on a liquid index attract market makers and quote tight. In the money contracts carry most of their value as intrinsic, trade rarely, and quote wide because nobody needs to compete for them. The 720 and 730 puts together quoted 0.04 wide. The same two call strikes quoted 5.50 wide, which is 137 times more.
Slippage follows exactly:
| Strikes | Put build slippage | Call build slippage | Ratio | Which side is out of the money |
|---|---|---|---|---|
| 720/730 | 0.020 | 2.750 | 137.5x | puts out of the money |
| 730/740 | 0.020 | 2.575 | 128.7x | puts out of the money |
| 740/750 | 0.025 | 2.070 | 82.8x | puts out of the money |
| 750/760 | 0.030 | 2.195 | 73.2x | puts out of the money |
| 760/770 | 0.040 | 1.655 | 41.4x | puts out of the money |
| 770/780 | 0.055 | 0.380 | 6.9x | straddling spot |
| 780/790 | 0.915 | 0.080 | 0.1x | calls out of the money |
| 790/800 | 2.205 | 0.050 | 0.0x | calls out of the money |
The ratio falls monotonically from 137x to effectively zero as the strikes climb past spot, and it crosses over exactly where the moneyness crosses over. Above the underlying, the advantage reverses completely: at 790/800 the put build slips 2.205 and the call build slips 0.050.
The rule that falls out is simple and it is not a rule about puts. Build the spread from whichever side is out of the money. For a bullish position at strikes below spot, that is the put credit spread. For a bearish position at strikes above spot, that is the call credit spread. The put spread is not inherently better. It is better in the region where put spreads are normally placed, which is why the preference looks like a fact about puts.
If you have read our bull call spread calculator guide, this extends a finding from that post. There, two of nine call spreads on the same underlying failed the entry cost test, and both were built from in the money legs. Here the same test applied to the synthetic pair shows the failure was never about calls. It was about which side of the book you reached into.
Getting the inputs right before getting the outputs right
Before any of the pricing means anything, the calculator needs a forward and a set of volatilities. Both are easy to get wrong in ways that look fine.
The forward is not the spot price, and it is not the spot price grown at the headline dividend yield either. Solve it from put-call parity at the most liquid strike where both a call and a put trade. With a 34 day expiry, a 4.25% short rate and a discount factor of 0.996049, the 760 strike gave a forward of 778.0262. Backing the carry out of that gives an implied dividend yield of 1.9208%, which is a long way from the headline yield you would find on a fund page.
The free check afterwards costs nothing and catches almost every input error. At the anchor strike, the call and the put must solve to the identical implied volatility. Both solved to 14.2981%, differing by about 1e-15. If yours differ by more than rounding, your forward is wrong and every Greek downstream is wrong with it.
Now the part that most guides skip. A single option chain should imply a single forward. This one does not:
| Strike | Call mid | Put mid | Implied forward | Drift versus anchor |
|---|---|---|---|---|
| 720 | 60.14 | 1.92 | 778.451 | +0.425 |
| 740 | 41.59 | 3.27 | 778.477 | +0.451 |
| 750 | 33.02 | 4.46 | 778.683 | +0.657 |
| 760 | 24.19 | 6.23 | 778.026 | 0.000 |
| 770 | 17.01 | 8.94 | 778.102 | +0.076 |
| 780 | 10.60 | 12.96 | 777.626 | -0.401 |
| 790 | 6.04 | 18.96 | 777.019 | -1.008 |
| 800 | 3.06 | 25.76 | 777.215 | -0.811 |
The forward implied by each strike's own quotes ranges from 777.019 to 778.683, a spread of 1.664 points. There is no single forward consistent with every mid on this chain. The reason is the same one that made the synthetic table interesting: the wide in the money quotes have mids that are not real prices, so the parity relation drifts wherever one side of the pair is illiquid.
The practical consequence for a put spread calculator is direct. Solve your volatilities from the contracts you are actually going to trade. For a put vertical, that means the put mids. Do not solve a put leg's volatility from the corresponding call, and do not accept a vendor's implied volatility column, which is usually solved from the last traded price under an undisclosed forward and will not reprice the mid.
Put skew is not a rounding error
With the forward fixed and each leg solved from its own mid, the smile on the put side looks like this:
| Strike | Moneyness | Put mid | Implied volatility | Versus the strike 10 points higher |
|---|---|---|---|---|
| 730 | -5.97% | 2.47 | 17.913% | +1.29 vol points |
| 740 | -4.68% | 3.27 | 16.624% | +1.21 vol points |
| 750 | -3.39% | 4.46 | 15.411% | +1.11 vol points |
| 760 | -2.10% | 6.23 | 14.298% | +0.95 vol points |
| 770 | -0.82% | 8.94 | 13.348% | +0.70 vol points |
| 780 | +0.47% | 12.96 | 12.651% | -0.05 vol points |
Every 10 point wide put spread on this chain spans between 0.70 and 1.29 volatility points. The two legs of your spread are not priced off the same volatility surface point, and they are not close. Note also that the skew is not constant: it steepens as you move down and flattens to nothing around 780, which is roughly where the smile bottoms out. A calculator that hard codes a single skew slope is only slightly better than one that ignores skew entirely.
For contrast, a 15 point wide call spread on a single stock chain we measured recently spanned 0.55 volatility points. Index put skew is a different animal. Downside protection on a broad index is structurally bid, and the effect is large enough to show up in the credit you receive.
One volatility for both legs is a 28% error
Here is what happens if you take the at the money volatility, 12.897%, and price both legs of a put spread with it, which is what a calculator with a single volatility input does:
| Spread | Market credit | Priced at one volatility | Error | Error % | Per contract |
|---|---|---|---|---|---|
| 740/730 | 0.8000 | 0.7767 | -0.0233 | -2.91% | $2.33 |
| 760/750 | 1.7800 | 2.2867 | +0.5067 | +28.46% | $50.67 |
| 770/760 | 2.7000 | 3.4044 | +0.7044 | +26.09% | $70.44 |
| 780/770 | 4.0250 | 4.6661 | +0.6411 | +15.93% | $64.11 |
The 760/750 spread is the clearest case. Its true market credit is 1.78. Priced with one at the money volatility, the model says 2.29, an overstatement of 28.46% or $50.67 per contract.
The direction is worth understanding, because it is counterintuitive. Using the lower at the money volatility reduces the modeled value of both puts, but it reduces the further out of the money leg proportionally much more. The credit is the difference between the two, so shrinking the far leg faster makes the difference larger. Your model says the spread should pay 2.29, the market pays 1.78, and if you do not know why, you will conclude the market is offering a bad fill rather than that your model is misspecified. Build a screen on that logic and it will hunt for spreads that look underpriced when the only thing that is wrong is the volatility input.
This is a much bigger effect than the equivalent error on the call side of the same underlying, where a comparable one volatility assumption produced errors around 2%. The put smile is steeper, so the penalty for flattening it is steeper too.
The bull put credit ladder
With the pricing done properly, here is the ladder of 10 point wide bull put credit spreads. Credit at fill is the short leg sold at the bid and the long leg bought at the ask. Probabilities are risk neutral, computed with the volatility interpolated at the relevant level rather than a single index vol.
| Short / long | Credit (mid) | Credit (fill) | Max loss | Breakeven | Buffer to breakeven | P(keep full credit) | P(any profit) | Vol points across legs |
|---|---|---|---|---|---|---|---|---|
| 740/730 | 0.80 | 0.78 | 9.20 | 739.20 | -4.78% | 83.2% | 83.6% | +1.29 |
| 750/740 | 1.19 | 1.16 | 8.81 | 748.82 | -3.55% | 77.5% | 78.3% | +1.21 |
| 760/750 | 1.78 | 1.75 | 8.22 | 758.22 | -2.33% | 69.7% | 71.3% | +1.11 |
| 765/755 | 2.20 | 2.16 | 7.80 | 762.80 | -1.74% | 64.8% | 67.0% | +1.04 |
| 770/760 | 2.70 | 2.66 | 7.30 | 767.30 | -1.16% | 59.3% | 62.3% | +0.95 |
| 775/765 | 3.31 | 3.26 | 6.69 | 771.68 | -0.60% | 53.1% | 57.3% | +0.83 |
| 780/770 | 4.03 | 3.97 | 5.97 | 775.98 | -0.05% | 46.6% | 51.9% | +0.70 |
Two columns deserve attention because calculators usually collapse them into one number labeled "probability of profit". The chance of keeping the entire credit is the chance of finishing above the short strike. The chance of any profit at all is the chance of finishing above the breakeven, which sits below the short strike by the credit. For the 780/770 spread those are 46.6% and 51.9%, a gap of more than five points. Which one you were shown changes how the trade reads.
The return on risk column, which we compute in the workbook, runs from 8.7% on the 740/730 up to 67.4% on the 780/770. That looks like a strong argument for the higher strikes until you notice that the probability of keeping the credit falls from 83.2% to 46.6% across the same rows. Return on risk and probability move inversely and in near lockstep, because return on risk is the risk neutral probability rewritten as a ratio. Ranking spreads by return on risk is ranking them by improbability.
Note the buffer column, which is the distance from today's price down to the breakeven. Only the top two rows give more than a 3.5% cushion, and they pay under 1.20 in credit against roughly 9.00 of risk.
A credit spread does not always decay in your favor
This is the finding that surprised us most, and it is specific to skewed put chains. Here are the net Greeks for each ladder row, in the credit direction, per one contract:
| Short / long | Net delta | Net vega ($/vol point) | Net theta ($/day) |
|---|---|---|---|
| 740/730 | +3.90 | -10.157 | +1.402 |
| 750/740 | +5.52 | -11.839 | +1.388 |
| 760/750 | +7.71 | -12.384 | +1.083 |
| 765/755 | +9.00 | -11.753 | +0.775 |
| 770/760 | +10.34 | -10.149 | +0.320 |
| 775/765 | +11.62 | -7.382 | -0.264 |
| 780/770 | +12.66 | -3.398 | -0.973 |
The bottom two rows have negative theta. A credit spread, a position you were paid to open, loses money to the passage of time on this chain.
The cause is the skew. Theta magnitude peaks at the strike carrying the most extrinsic value, and on a flat volatility surface that sits near the forward, 778.03 here. The put skew lifts volatility as strikes fall, which drags the theta peak down with it. On this chain the peak sits at the 770 strike, not at 778. So for the 780/770 spread, the long leg sits exactly on the theta peak and decays faster than the short leg. The daily decay of the long 770 put was -15.793 against -14.821 on the short 780 put, and the position nets -0.973 per day.
Net vega is short throughout, as expected, but it is not monotone. It peaks in magnitude at -12.384 on the 760/750 and then falls to -3.398 at 780/770. There is no single Greek that characterizes a put spread across the ladder, and there is no substitute for computing them per leg.
Early assignment: the risk only the put version carries
The synthetic pair section established that a put credit spread and a call debit spread have the same payoff. There is one asymmetry, and it is the reason the equivalence is not perfect. American puts can be exercised early for reasons that have nothing to do with dividends, and it is your short leg that gets assigned.
Early exercise of a put becomes rational when two conditions hold together. The contract must be in the money, and its remaining extrinsic value must be less than the interest the holder earns by receiving the strike proceeds now rather than at expiry. That interest is the carry, and it equals the strike multiplied by one minus the discount factor.
| Strike | % in the money | Put mid | Intrinsic | Extrinsic | Carry | Cushion | Early exercise premium |
|---|---|---|---|---|---|---|---|
| 780 | 0.47% | 12.96 | 3.66 | 9.30 | 3.08 | +6.22 | +0.152 (1.17%) |
| 785 | 1.12% | 15.54 | 8.66 | 6.89 | 3.10 | +3.78 | +0.199 (1.28%) |
| 790 | 1.76% | 18.96 | 13.66 | 5.31 | 3.12 | +2.18 | +0.256 (1.35%) |
| 795 | 2.40% | 21.98 | 18.66 | 3.32 | 3.14 | +0.18 | +0.336 (1.53%) |
| 797 | 2.66% | 23.45 | 20.66 | 2.79 | 3.15 | -0.36 | +0.370 (1.58%) |
| 800 | 3.05% | 25.76 | 23.66 | 2.10 | 3.16 | -1.06 | +0.429 (1.66%) |
| 805 | 3.69% | 29.86 | 28.66 | 1.20 | 3.18 | -1.99 | +0.526 (1.76%) |
The cushion turns negative at the 797 strike, about 2.66% in the money. Past that point the holder of the put gives up less time value than they gain in interest, and assignment stops being a surprise and becomes the rational choice.
The last column is what a European model silently omits. Valuing these puts on a binomial tree with early exercise allowed, against the same tree without it, the difference runs from 0.152 to 0.563, or 1.17% to 1.78% of the option's value. That is the part of the price your calculator cannot see.
The genuinely useful version of this is forward looking. Assignment is not an entry risk on a bull put spread, because you open with the short leg out of the money. It becomes a risk only after the trade moves against you. So the question is where:
| Short strike | Boundary spot | Move from today | Depth in the money there |
|---|---|---|---|
| 750 | 722.89 | -6.9% | 3.8% |
| 760 | 735.71 | -5.2% | 3.3% |
| 770 | 748.09 | -3.6% | 2.9% |
| 780 | 759.78 | -2.1% | 2.7% |
If you sold the 770 put, the assignment boundary sits near 748 on the underlying, a 3.6% decline from today. That is a concrete alert level you can put in a cell and watch, rather than a vague warning about assignment risk.
One thing this does not change: if the short leg is assigned, the long leg still caps the loss at the strike width. The exposure is financing and timing, not unbounded risk. But you will be short stock or long an unexpected position over a weekend, and the calculator that told you max loss was 7.30 said nothing about that.
Building the put spread calculator in Excel with MarketXLS
Every formula below is verified against the current MarketXLS function set.
Start by building the contract symbol for each leg, because every contract level function needs it:
=OptionSymbol("SPY","2026-09-18","Put",770)
=OptionSymbol("SPY","2026-09-18","Put",760)
Pull both sides of the market for each leg. You need bid and ask separately, not just a mid, because the natural fill test is the entire point:
=Bid(OptionSymbol("SPY","2026-09-18","Put",770))
=Ask(OptionSymbol("SPY","2026-09-18","Put",770))
=QM_OpenInterest(OptionSymbol("SPY","2026-09-18","Put",770))
=OPT_DaysToExpiration(OptionSymbol("SPY","2026-09-18","Put",770))
Solve each leg's implied volatility from that leg's own mid price. Note the argument order, and note that the dividend yield sits between the rate and sigma:
=opt_ImpliedVolatility(QM_Last("SPY"),8.935,"2026-09-18","Put",770,0.0425,0.0192)
The Greeks take the same positional arguments, so the whole set drops in beside it:
=opt_Delta(QM_Last("SPY"),8.935,"2026-09-18","Put",770,0.0425,0.0192)
=opt_Gamma(QM_Last("SPY"),8.935,"2026-09-18","Put",770,0.0425,0.0192)
=opt_Theta(QM_Last("SPY"),8.935,"2026-09-18","Put",770,0.0425,0.0192)
=opt_Vega(QM_Last("SPY"),8.935,"2026-09-18","Put",770,0.0425,0.0192)
For the assignment monitor you need intrinsic and extrinsic value separately, which is exactly what these two return:
=OPT_IntrinsicValue(OptionSymbol("SPY","2026-09-18","Put",770),QM_Last("SPY"))
=OPT_TimeValue(OptionSymbol("SPY","2026-09-18","Put",770),8.935,QM_Last("SPY"))
The viability screen is then one cell. If the entry cost at the natural fill is not below the strike width, the structure cannot profit at any price:
=IF(C23<$B$5-$B$6,"PASS","FAIL - cannot profit at any price")
And the assignment alert compares extrinsic against carry, firing only when the leg is actually in the money:
=IF(AND($B$5>QM_Last($C$3),E30<$B$5*(1-EXP(-$B$10*F30/365))),"ASSIGNMENT RISK","OK")
For chain context and surrounding structure:
=Strikes("SPY","2026-09-18")
=ExpirationNext("SPY")
=ImpliedVolatility30d("SPY")
=ImpliedVolatilityRank1y("SPY")
=opt_PutCallOIRatio("SPY")
=DividendYield("SPY")
If you want the pricing engine itself rather than the add-in Greeks, our Black-Scholes in Excel walkthrough covers the solver construction, and the options calculator dashboard post covers the payoff and probability layer.
What is in the workbook
Both files carry six sheets.
How To Use explains each sheet and states which workbook you have open, static or live.
Main Dashboard takes your two strikes, contract count, account size and risk limit in yellow input cells. It prices the spread at the mid and at the natural fill side by side, shows the difference, and runs a four point viability screen covering entry cost against width, quote width on both legs, whether the short leg is already in the money, and whether position risk fits your stated limit. Below that sits the full candidate ladder.
Scenario Analysis shows profit and loss at expiry across ten underlying levels, for both the credit and the debit direction of the same two strikes, colour coded. It also carries the one volatility error table. Two free audits are built in: the two directions must sum to the strike width at every price, and both must share one breakeven.
Construction Compare is the synthetic pair table, with the slippage detail underneath and impossible builds highlighted in red.
Skew and Sizing lists every strike with its own solved volatility, the volatility gap to the strike 10 points higher, and the quoted width. Below it sits the parity consistency check that exposes the drifting forward, and then position sizing driven from your account size and risk limit.
Assignment Monitor carries the extrinsic against carry table with a colour coded cushion, the early exercise premium per strike, and the boundary spot level for each candidate short strike.
The sample workbook holds static values captured on 2026-08-15 with a reference column quoting the MarketXLS formula behind each figure, so you can see what powers it. The template workbook replaces every data cell with a live formula. Every sheet in both files ends with a "MarketXLS Functions Used" box.
Download the templates:
- - Pre-filled with the 2026-08-15 chain
- - Live-updating formulas
Frequently asked questions
What is the difference between a bull put spread and a bear put spread?
They are the same two strikes traded in opposite directions. A bull put spread sells the higher strike put and buys the lower one, collecting a credit, and profits if the underlying stays up. A bear put spread buys the higher strike put and sells the lower one, paying a debit, and profits if the underlying falls. On the 770/760 pair the credit direction collects 2.70 and the debit direction pays 2.70. They share one breakeven at 767.30, and their maximum profits sum to the 10 point strike width. If your calculator violates either of those identities, it has a bug.
How do I calculate the breakeven on a put spread?
For the credit direction, breakeven is the short strike minus the net credit. For the debit direction, it is the long strike minus the net debit. Both give 767.30 on the 770/760 example. The subtlety worth knowing is that this is the breakeven at expiry only. Before expiry the position still holds time value, so the price that returns you to entry cost is different and moves every day.
Why does my put spread calculator show a different credit than my broker?
Almost always one of two reasons. Either the calculator is pricing from the mid while your broker is quoting the natural fill, which on out of the money put verticals costs about 1.5% to 4% of the credit, or the calculator is using a single volatility for both legs. The second is the larger error: on the 760/750 spread it overstated the credit by 28.46%.
Is a put credit spread better than a call debit spread?
They are the same position in payoff terms, so the honest answer is that neither is better as a structure. What differs is the cost of entry, and that is decided by which side is out of the money at your chosen strikes. Below spot, the put build was tighter by a factor of 41 to 137 in our measurements. Above spot, the call build wins by a similar margin.
Can I be assigned early on a put spread?
Yes, on the short leg, and this is the one real asymmetry against the call built equivalent. It requires the short put to be in the money with extrinsic value below the carry on the strike, which on this chain happened around 2.66% in the money. Your loss stays capped at the strike width because the long leg is still there, but you will be carrying an unexpected stock position until you unwind it.
Does a put credit spread always benefit from time decay?
No. On a chain with meaningful put skew the theta peak sits below the forward, so a spread whose long leg sits near that peak can carry negative theta. Two of the seven ladder rows here did, at -0.264 and -0.973 dollars per day. Compute theta per leg rather than assuming the credit direction decays in your favour.
The bottom line
A put spread calculator that returns credit, maximum loss and breakeven is returning arithmetic you could do on paper. The questions that actually decide the outcome sit one level below that, and all three are measurable on a live chain.
Price both legs at their own implied volatility, because on this chain the two legs of a 10 point put spread sat 0.70 to 1.29 volatility points apart, and collapsing that to one number moved the credit by up to 28%. Reprice at the natural fill before you commit, because half the call built versions of these spreads cost more to enter than they could ever pay. And keep an eye on extrinsic value against carry on the short leg, because that is the one risk the synthetic call equivalent does not carry and no European model will show you.
The workbooks above do all of that from live data. Explore the full function set at MarketXLS, see the pricing options, or book a demo if you would like a walkthrough of the options tooling.
Related reading: the call spread calculator guide covers the call side of the same structure, the credit spread calculator covers bull put and bear call spreads together, and the cash secured put calculator covers assignment mechanics on a single short put.
Disclaimer: This article is for educational purposes only. It is not investment advice and it is not a recommendation to buy or sell any security or to adopt any strategy. Options carry substantial risk. All prices and figures were captured on 2026-08-15 and will have changed.