Financial
Cost-of-carry price model: compare a maturity price with spot
Explore Spot × EXP((financing + storage - yield) × years), with explicit continuous-rate assumptions and a comparison against spot.
Model carry for one maturity
The model uses positive spot price, annual continuously compounded financing and proportional storage costs, a continuous income or convenience-yield input, and time in years. Equity dividends and physical convenience yield represent different mechanisms; for the equity example set storage to zero and use dividend yield.
This simplified forward-price relation can approximate a futures price under suitable assumptions. Daily settlement, stochastic rates, commodity borrowing constraints and uncertain convenience yield can matter. The output is not a market quote or a guaranteed arbitrage opportunity. One maturity versus spot does not describe the complete multi-maturity curve.
The displayed price is rounded to two decimals. The comparison instead uses the unrounded carry exponent, with an absolute tolerance of 1e-12 for floating-point zero. A tiny positive difference may therefore be labeled above spot even when the displayed prices round equally.
| Carry Input | Cell | Normal Market | Supply Squeeze (y = 12%) |
|---|---|---|---|
| Spot Price S0 ($/bbl) | B2 | $80.00 | $80.00 |
| Risk-Free r & Storage u | B3 = 5%, B4 = 3% | Gross carry = 8%/yr | Gross carry = 8%/yr |
| Convenience / Div Yield y | B5 | 2%/yr (Net = +6%) | 12%/yr (Net = -4%) |
| 6-Month Fair Futures (B6 = 0.5) | S0 * EXP(net * T) | $82.44 ("Contango") | $78.42 ("Backwardation") |
Continuous Cost-of-Carry Futures Fair Value F0
For equity index futures with zero storage cost, set B4 = 0 and enter index dividend yield in B5.
=IF(OR(COUNT(B2:B6)<>5,B2<=0,B4<0,B5<0,B6<0),"Invalid inputs",ROUND(B2 * EXP((B3 + B4 - B5) * B6), 2))Compare the modeled maturity price with spot
Positive net carry over positive time produces Above spot (contango); negative carry produces Below spot (backwardation). These labels describe this model comparison only. At maturity, T=0, the output equals spot.
=IF(OR(COUNT(B2:B6)<>5,B2<=0,B4<0,B5<0,B6<0),"Invalid inputs",LET(carry,(B3+B4-B5)*B6,IF(ABS(carry)<=0.000000000001,"Flat",IF(carry>0,"Contango","Backwardation"))))Try the example
Use the original values or change them to test your understanding.