fixed-income.wiki
Fixed income - conventions, formulas, and the arithmetic

Curves and spreads

Zero, par and forward curves, the bootstrap that connects them, and the four spread measures against them.

A single yield discounts every cash flow at the same rate. A curve discounts each flow at the rate appropriate to its own date, and the difference between those two calculations is what every spread measure in this section quantifies. The curve used throughout is illustrative and stated explicitly: semiannually compounded zero rates of 4.00 percent at six months, 4.25 at two years, 4.50 at five and 4.75 at ten, interpolated linearly in time and flat beyond ten years. It is chosen so the arithmetic is legible and is not a market observation.

Bootstrapping a zero curve from an illustrative annual par curve

Each par bond is priced at 100 with annual coupons. Working outward one maturity at a time: DF_n = (1 - c*sum of DF_1..DF_(n-1)) / (1 + c), then z_n = (1/DF_n)^(1/n) - 1. The par yields 4.00 through 5.00 are illustrative round numbers chosen to make the bootstrap visible, not observed levels. Because the par curve rises, the zero curve sits above it at every maturity beyond the first, and the forwards sit above the zeros.

MaturityPar couponSum of prior coupon PVsDiscount factorZero rate, annual compoundingImplied one-year forward
1 year4.0000 percent0.0000000.9615384624.000000 percent4.000000 percent, the spot
2 years4.2500 percent0.0408650.9200332044.255326 percent4.511278 percent
3 years4.5000 percent0.0846710.8759131824.515246 percent5.037031 percent
4 years4.7500 percent0.1309810.8296128594.780660 percent5.580955 percent
5 years5.0000 percent0.1793550.7815667765.052594 percent6.147406 percent

Forward rates implied by the bootstrapped zero curve

A forward rate is not a forecast; it is the rate that makes borrowing long indifferent to borrowing short and rolling. It follows from two discount factors by arithmetic alone, with no expectation embedded. On an upward-sloping curve the forwards always sit above the spot rates, which is a property of the slope and not a prediction.

Forward periodFrom discount factorsValueFrom zero rates
1 to 2 yearsDF_1/DF_2 - 1 = 0.961538462/0.920033204 - 14.511278 percent(1+z_2)^2/(1+z_1)^1 - 1
2 to 3 yearsDF_2/DF_3 - 1 = 0.920033204/0.875913182 - 15.037031 percent(1+z_3)^3/(1+z_2)^2 - 1
3 to 4 yearsDF_3/DF_4 - 1 = 0.875913182/0.829612859 - 15.580955 percent(1+z_4)^4/(1+z_3)^3 - 1
4 to 5 yearsDF_4/DF_5 - 1 = 0.829612859/0.781566776 - 16.147406 percent(1+z_5)^5/(1+z_4)^4 - 1
0 to 1 years1/DF_1 - 14.000000 percentz_1 by definition
0 to 5 years, annualised(1/DF_5)^(1/5) - 15.052594 percentz_5 by definition

The illustrative discount curve applied to the reference bond

The curve values the bond at 100.379194 against a market full price of 100.021739, so the bond is 0.357455 cheap to the curve. Adding a constant 5.3240 basis points to every zero rate closes the gap exactly, and that constant is the Z-spread.

Payment dateYears to paymentZero rate on the curveDiscount factorPresent valuePV at the market Z-spread
2026-11-150.2173914.000000 percent0.9914271212.2307112.230458
2027-05-150.7173914.036232 percent0.9717397372.1864142.185596
2027-11-151.2173914.119565 percent0.9515703012.1410332.139674
2028-05-151.7173914.202899 percent0.9310593462.0948842.093009
2028-11-152.2173914.268116 percent0.9106058542.0488632.046497
2029-05-152.7173914.309783 percent0.8905912942.0038302.000995
2029-11-153.2173914.351449 percent0.8706616441.9589891.955708
2030-05-153.7173914.393116 percent0.8508311721.9143701.910667
2030-11-154.2173914.434783 percent0.8311136991.8700061.865903
2031-05-154.7173914.476449 percent0.8115225841.8259261.821446
2031-11-155.2173914.510870 percent0.7923636161.7828181.777982
2032-05-155.7173914.535870 percent0.7738042261.7410601.735886
2032-11-156.2173914.560870 percent0.7554949691.6998641.694372
2033-05-156.7173914.585870 percent0.7374388011.6592371.653447
2033-11-157.2173914.610870 percent0.7196384171.6191861.613117
2034-05-157.7173914.635870 percent0.7020962621.5797171.573387
2034-11-158.2173914.660870 percent0.68481453470.02228669.723596
Total100.379194100.021739

Four spread measures on the reference bond, across five prices

Same bond, same illustrative curve, five market prices. The nominal spread is measured against a benchmark bond with the reference bond's own dates whose quoted price is 100 on the curve, which requires a coupon of 463.114521 percent and yields 4.630183 percent. The I-spread is measured against par swap rates on the curve interpolated to the bond's 8.217391-year maturity, which gives 4.630276 percent from 4.620792 percent at eight years and 4.664416 percent at nine. The four measures agree closely near par and diverge as the price moves away from it, which is the coupon effect.

Quoted priceYield to maturityNominal spreadI-spreadZ-spreadPar-par asset-swap spread
92.0005.733247 percent+110.3064 bp+110.2971 bp+110.3687 bp+100.2690 bp
96.0005.100942 percent+47.0759 bp+47.0666 bp+47.0611 bp+43.8387 bp
98.7504.684070 percent+5.3887 bp+5.3795 bp+5.3240 bp+5.0428 bp
102.0004.208742 percent-42.1441 bp-42.1534 bp-42.2647 bp-40.8068 bp
106.0003.647654 percent-98.2529 bp-98.2621 bp-98.4382 bp-97.2371 bp

Carry and roll-down over a three-month horizon

Horizon 2026-08-27 to 2026-11-27, 92 days. The curve and the Z-spread of 5.3240 basis points are held constant, so every number here is a consequence of the passage of time alone. The bond's yield falls from 4.684070 percent to 4.673086 percent purely because it has rolled 92 days down an upward-sloping curve. The repo rate is illustrative.

ComponentPer 100 of parOn 10,000,000 parWhere it comes from
Coupon received 2026-11-152.250000225,000.00Scheduled payment
Reinvestment of that coupon to the horizon0.003000300.0012 days at an illustrative 4.000 percent ACT/360
Accrued interest at the horizon0.14917114,917.1312/181 of the new period
Accrued interest given up at the start-1.271739-127,173.91104/184 paid away on purchase
Financing cost-1.022444-102,244.44100.021739 at 4.000 percent for 92 days ACT/360
Net carry0.10798810,798.77Income less funding, before any price change
Roll-down, quoted price+0.10799710,799.72Quoted price moves from 98.750 to 98.857997 on an unchanged curve and spread
Total return+0.21598521,598.49Net carry plus roll-down
Total return, annualised0.844975 percent92 days ACT/360 on a full price of 100.021739

Entries

Spot rate, zero rate and discount factor

A zero or spot rate is the yield of a single payment at one date. A discount factor is the same information with no compounding convention attached. The factor is the primitive; the rate is a presentation of it.

FieldValue
FormulaDF(t) = (1 + z(t)/f)^(-f*t) on frequency f, or exp(-z_c(t)*t) continuously compounded. Inverting: z(t) = f*[DF(t)^(-1/(f*t)) - 1]
WorkedOn the illustrative curve at 8.217391 years the zero rate is 4.660870 percent, so DF = (1 + 0.023304348)^-16.434783 = 0.684814534
Inverting2 * [0.684814534^(-1/16.434783) - 1] = 4.660870 percent
Curve at the bond's flow dates4.000000 percent at six months rising to 4.660870 percent at 8.2174 years
Discount factors0.991427121 at the first coupon and 0.684814534 at redemption
  • Discount factors are the safe interchange format between systems because they are convention-free. A rate handed across a boundary without its compounding frequency and day count is ambiguous, and the resulting error is small enough to survive review.
  • Zero rates are not directly observable beyond the shortest maturities. They are inferred from coupon instruments by the bootstrap in the next entries, and the inference depends on the interpolation choice, which is why two curves built from the same inputs can differ by a basis point or two in the gaps.
  • The interpolation variable matters as much as the method. Linear in zero rates, linear in the logarithm of discount factors, and linear in forward rates all pass exactly through the same input points and disagree everywhere between them, sometimes producing negative implied forwards.
  • A curve is only as good as the instrument set it is fitted to. A gap in the input maturities is a region where the curve is an assumption, and any spread computed for a bond maturing in that gap inherits it.

Par yield curve

For each maturity, the coupon rate at which a bond of that maturity would price at par. It is the curve most often quoted and the least useful for discounting, because it mixes every maturity's zero rate into a single number.

FieldValue
FormulaPar coupon c_n solves 100 = c_n/f * sum of DF(t_k) + 100 * DF(t_n), so c_n = f * (1 - DF(t_n)) / sum of DF(t_k)
Worked, on the reference bond's own datesSum of the 17 discount factors = 14.176773577, final factor 0.684814534
ResultThe coupon that puts the quoted price at 100 on the illustrative curve is 463.114521 percent, and such a bond yields 4.630183 percent
Against the zero rate463.114521 percent par against 4.660870 percent zero at the same maturity
Bootstrap exampleOn the illustrative annual curve, par yields of 4.00 to 5.00 percent imply zero rates of 4.000000 to 5.052594 percent
  • On an upward-sloping curve the par yield sits below the zero rate of the same maturity, because it is a weighted average of all the zero rates up to that point and the early ones are lower. The gap widens with the slope and with the coupon.
  • A par yield is only a par yield for a bond that actually prices at par. Applying a par curve to a discount or premium bond and calling the difference a spread introduces the coupon effect, which is exactly what the Z-spread avoids.
  • Government benchmark curves published by central banks and statistical agencies are usually par or fitted par curves, so a spread computed against a published curve is normally a spread to par yields, not to zeros. That is a difference of tens of basis points in some shapes.
  • Note the definitional subtlety off a coupon date: par can mean a quoted price of 100 or a full price of 100, and the two differ by the accrued interest. The figure quoted here uses a quoted price of 100, which is the market convention.

Also described at: Wikipedia · Wikidata

Bootstrapping a zero curve

The sequential extraction of zero rates from coupon instruments. Each new maturity contributes exactly one unknown discount factor, because every earlier flow is already discounted by factors already solved for.

FieldValue
FormulaFor a par instrument of maturity n with coupon c: DF_n = (1 - (c/f) * sum of DF_1..DF_(n-1)) / (1 + c/f). Then z_n follows from DF_n
Worked, one year100 = (100 + 4.00)*DF_1, so DF_1 = 0.961538462 and z_1 = 4.000000 percent, equal to the par yield as it must be
Worked, two yearsDF_2 = (1 - 0.0425*0.961538462) / (1 + 0.0425) = 0.920033204, so z_2 = (1/0.920033204)^(1/2) - 1 = 4.255326 percent
Worked, three yearsDF_3 = (1 - 0.0450*(0.961538462 + 0.920033204)) / (1 + 0.0450) = 0.875913182, z_3 = 4.515246 percent
Worked, five yearsDF_5 = 0.781566776, z_5 = 5.052594 percent against a par yield of 5.00 percent
DivergenceThe gap between the par yield and the zero rate grows from 0 basis points at one year to 5.3 at five
  • The first zero rate always equals the first par yield, because a one-period instrument has a single flow. That identity is the first check on any bootstrap implementation.
  • The method requires an instrument at every node. Real input sets have gaps, so a practical bootstrap interpolates the missing par yields first, which means the resulting zero curve depends on an interpolation applied before the bootstrap as well as after it.
  • Bootstrapping from coupon bonds rather than par instruments requires solving for the discount factor that reproduces the observed price rather than 100, which is the same algebra with a different right-hand side and no additional difficulty.
  • The procedure is exact and produces a curve that reprices every input instrument to the basis point. That is a fitting property, not an accuracy property: a curve that reprices its inputs perfectly can still be a poor description of the rates between them.

Also described at: Wikipedia · Wikidata

Implied forward rate

The rate for a future period that is implied by two present discount factors. It is the breakeven rate at which borrowing for the long period costs the same as borrowing short and rolling, and it contains no forecast of any kind.

FieldValue
FormulaFor the period t1 to t2: (1 + f/m)^(m*(t2-t1)) = DF(t1)/DF(t2). Annualised simply: f = (DF(t1)/DF(t2) - 1) * 1/(t2-t1)
Worked, one to two years0.961538462/0.920033204 - 1 = 4.511278 percent
Worked, four to five years0.829612859/0.781566776 - 1 = 6.147406 percent
From zero rates(1 + 0.050525944)^5 / (1 + 0.047806604)^4 - 1 = 6.147406 percent, the same number
AmplificationPar yields spanning 4.00 to 5.00 percent, a range of 100 basis points, imply one-year forwards spanning 4.000000 to 6.147406 percent, a range of 215
  • The amplification in the last field is the most useful property of the forward curve: a mildly sloped spot curve implies a steeply sloped forward curve. A modest view on the shape of the spot curve is a large view on forwards, and positions expressed in forward space are correspondingly leveraged.
  • Forwards are arithmetic, not expectation. Saying the market expects rates to reach the forward rate imports a term-premium assumption that the arithmetic does not contain. The forward is a breakeven, and whether it is also a forecast is a separate empirical question.
  • Rolling down an upward-sloping curve produces a capital gain if the curve is unchanged, precisely because the forward rate is above the spot rate. That gain is the roll-down component in the carry table, and it is what the curve prices in.
  • Forward rates computed from an interpolated curve inherit the interpolation's kinks and can turn negative between nodes even when every input zero rate is positive. Interpolating in forward space rather than zero space avoids that and distorts something else.

Also described at: Wikipedia · Wikidata

Nominal spread

The difference between a bond's yield to maturity and the yield of a benchmark government bond of comparable maturity. It is the simplest spread measure and the only one that requires no curve at all, which is both its appeal and its defect.

FieldValue
FormulaNominal spread = y_bond - y_benchmark, with both yields on the same compounding and day-count conventions
BenchmarkOn the illustrative curve, a bond with the reference bond's dates and a quoted price of 100 needs a coupon of 463.114521 percent and yields 4.630183 percent
Worked4.684070 - 4.630183 = 5.3887 basis points
At a quoted price of 92.0005.733247 - 4.630183 = 110.3064 basis points
At a quoted price of 106.0003.647654 - 4.630183 = -98.2529 basis points
Against the Z-spread5.3887 against 5.3240 basis points at the base price, and 110.3064 against 110.3687 at 92.000
  • Nominal spread compares two yields, and a yield depends on the coupon as well as the curve. Two bonds with identical credit risk and identical maturities but different coupons have different nominal spreads on the same curve, and the difference is not credit.
  • It also depends on which benchmark is chosen. An off-the-run government bond of the same maturity and the on-the-run issue trade at different yields, so the same corporate bond has two nominal spreads depending on the reference.
  • The measure is still what most cash markets quote and negotiate in, because it is unambiguous once the benchmark is named and requires no curve construction. Knowing its bias is more useful than refusing to use it.
  • The bias is largest when the curve is steep and the bond is far from par. In a flat curve at a par price, nominal spread, I-spread and Z-spread converge, and the table above shows exactly how they separate as the price moves.

Also described at: Wikipedia · Wikidata

Interpolated spread, or I-spread

The bond's yield less a swap rate interpolated to the bond's exact maturity. It removes the benchmark-selection problem in nominal spread by replacing a single bond with a continuous curve, and keeps the coupon problem.

FieldValue
FormulaI-spread = y_bond - swap rate interpolated linearly between the two adjacent par swap tenors
Curve inputsPar swap rates on the illustrative curve: 4.620792 percent at eight years and 4.664416 percent at nine
InterpolationBond maturity is 8.217391 years, so the interpolated rate is 4.620792 + (8.217391 - 8)*(4.664416 - 4.620792) = 4.630276 percent
Worked4.684070 - 4.630276 = 5.3795 basis points
Against the Z-spread5.3795 against 5.3240 basis points, a wedge of 0.0555
At a quoted price of 92.000110.2971 basis points, against a Z-spread of 110.3687
  • I-spread and Z-spread are frequently reported side by side and are close for a near-par bond on a gently sloping curve. The gap widens with curve curvature and with the bond's distance from par, and it is a curve artefact rather than information.
  • The interpolation is conventionally linear in the swap rate, which is not the same as linear in the zero rate or in the discount factor. That choice is a convention and it moves the answer by a fraction of a basis point on a smooth curve and more on a kinked one.
  • Because it references swaps rather than governments, I-spread on a government bond is not zero; it is the negative of the swap spread. That is often the intended measurement.
  • It is a yield difference, so it retains the single-discount-rate defect. Any measure built by subtracting one yield from another prices the bond's cash flows all at one rate, which no curve does.

Also described at: Wikipedia · Wikidata

Zero-volatility spread, or Z-spread

The constant amount added to every zero rate on a curve that makes the discounted value of the bond's cash flows equal its market full price. Unlike a yield difference it discounts each flow at its own maturity's rate, so it removes the coupon and shape distortions in nominal and I-spread.

FieldValue
FormulaSolve for s: P_full = sum over k of CF_k / (1 + (z(t_k) + s)/f)^n_k
Curve valueDiscounting the reference bond's 17 flows on the illustrative curve with no spread gives 100.379194
Market value100.021739, so the bond is 0.357455 cheap to the curve
Worked, solutions = 5.3240 basis points
CheckAdding 5.3240 basis points to every zero rate gives 100.021739 against a target of 100.021739
Spread duration implied6.698219, so one basis point of Z-spread is worth 0.066997 per 100 of par
Across prices+110.3687 basis points at 92.000, +5.3240 at 98.750, -98.4382 at 106.000
  • Zero volatility does not mean the bond has no volatility. It means the measure assumes no interest-rate volatility and therefore assigns no value to any embedded option. For a bullet bond that is correct; for a callable it is the whole difference between Z-spread and option-adjusted spread.
  • The Z-spread is defined against a specific curve, so it is only comparable across bonds valued on the same curve. A Z-spread to a government curve and one to a swap curve differ by the swap spread and are routinely quoted without saying which was used.
  • It is a parallel spread by construction, so it cannot express a bond that is cheap at the front and rich at the back. That is a feature: the single number is the point. A term structure of credit spreads needs a curve, not a spread.
  • Because it discounts each flow at its own rate, Z-spread is the right measure for comparing bonds of different coupons and different distances from par, which the table above quantifies.

Also described at: Wikipedia · Wikidata

Option-adjusted spread

The spread over a curve that a model requires in order to reprice a bond once the embedded option has been valued and removed. For a bond with no options it is identical to the Z-spread; for a callable it is the Z-spread less the option cost.

FieldValue
FormulaOAS = Z-spread - option cost, where the option cost is the model's value of the embedded optionality expressed in spread terms. Equivalently: OAS is the s solving market price = model price with every rate path shifted by s
On the option-free reference bondOAS = Z-spread = 5.3240 basis points, because the option cost is zero
Illustrative callable caseAssume a model values the embedded call at 35.0 basis points of spread. That figure is supplied as an input and is not computed anywhere in this corpus
Worked, resultOAS = 5.3240 - 35.0 = -29.6760 basis points
InterpretationA callable bond quoted at a Z-spread wide to a comparable bullet is not necessarily cheap; the difference may be entirely the option the holder has written
SignOAS is at most the Z-spread for a callable and at least the Z-spread for a putable, because the holder is short the option in the first case and long it in the second
  • OAS is a model output, not a market observable. It depends on the interest-rate model, the volatility surface, the assumed exercise rule and, for mortgages, the prepayment model. Two vendors will report OAS figures for the same bond that differ by more than the spread differences traders act on.
  • The comparison that OAS is built for is between an option-free bond and a bond with options. Comparing two OAS figures from different models is not that comparison and is close to meaningless.
  • The volatility assumption is the dominant input. Higher assumed volatility makes the option more valuable, so it lowers OAS for a callable. An OAS quoted without the volatility it was computed at is incomplete.
  • For an option-free bullet the correct OAS is the Z-spread and any difference is model noise. That identity is the standard calibration test for an OAS engine.

Also described at: Wikipedia · Wikidata

Par-par asset-swap spread

The spread over the floating index that an investor earns by buying the bond and swapping its fixed coupon into floating, with the swap notional set at par. It converts a bond's credit compensation into a floating-rate margin directly comparable with a loan or a floater.

FieldValue
FormulaTo the standard par-par approximation: ASW = (P_curve - P_market) / (100 * A), where P_curve is the bond's full price discounted on the swap curve, P_market its market full price, and A = sum of delta_i * DF(t_i) the floating-leg annuity to maturity
Curve price100.379194 full, from discounting the 17 flows on the illustrative curve
Market price100.021739 full
AnnuitySum of 0.5 * DF over the 17 payment dates = 7.088387
Worked(100.379194 - 100.021739) / (100 * 7.088387) = 0.357455 / 708.838679 = 5.0428 basis points
Against the Z-spread5.0428 against 5.3240 basis points, a wedge of -0.2812
At a quoted price of 92.000100.2690 basis points against a Z-spread of 110.3687, a wedge of -10.0997
  • The par-par structure has a notional mismatch built into it: the investor pays par for a package whose bond is worth its market price, and the difference is funded across the swap. That mismatch is what makes the asset-swap spread diverge from the Z-spread, and the divergence grows with the distance of the price from par, exactly as the last two fields show.
  • A market-value asset swap sets the swap notional to the bond's dirty price instead and removes most of the mismatch, at the cost of an off-market swap and a different set of documentation. Which structure was traded changes the quoted spread materially on a bond far from par.
  • For a bond priced near par the asset-swap spread and the Z-spread are within a basis point or two. For a deeply discounted bond the gap is tens of basis points and is not credit information.
  • The asset swap does not remove default risk. If the bond defaults the investor is left with a live swap and no bond, which is an open interest-rate position at exactly the worst moment. That residual is priced into the spread and is not visible in the arithmetic.

Also described at: Wikipedia · Wikidata

Discount margin

The floating-rate analogue of a yield spread: the constant addition to the assumed index rate that discounts a floater's projected cash flows back to its market price. Quoted margin is a contractual term; discount margin is a market measure.

FieldValue
FormulaSolve for DM: P_full = sum over k of [(I + QM)/f * 100] / (1 + (I + DM)/f)^k + 100 / (1 + (I + DM)/f)^n, where I is the assumed constant index rate and QM the contractual quoted margin
SetupIllustrative floater: 12 quarterly periods, index assumed flat at 4.000 percent, quoted margin 80 basis points, quoted price 99.500
Projected coupon(4.000 + 0.80) / 4 = 1.200000 per 100 of par per period
Worked, solutionDM = 98.0461 basis points
CheckDiscounting at (4.000 + 0.980461)/4 per period gives 99.500000 against a target of 99.500
Against the quoted margin98.0461 against 80 basis points; the extra 18.05 is the discount to par amortised over the remaining life
Spread duration2.776718, so one basis point of discount margin is worth 0.027628 per 100 of par
  • A floater trading at par has a discount margin equal to its quoted margin, exactly. Any deviation of the price from par shows up entirely in the difference between the two, which makes discount margin the natural measure of whether a floater is cheap.
  • The assumption that the index is flat at its current level is doing real work, and it is wrong whenever the curve is not flat. A more careful discount margin projects the coupons off the forward curve, and the two versions differ by more than a basis point in a steep curve.
  • For a floater the discount margin is a credit measure and the rate duration is near zero, so a floater book's risk is almost entirely spread risk. Reporting a single duration for such a book conveys nothing about its actual exposure.
  • Simple margin is a further simplification that amortises the price discount linearly and applies no discounting, in the same relation to discount margin as simple yield is to yield to maturity. It is still quoted in some loan markets.

Carry and roll-down

The return a bond position generates from the passage of time alone, with the curve unchanged. Carry is coupon income net of financing; roll-down is the price change from the bond's remaining maturity shortening along a sloped curve. They are separate effects and are routinely conflated.

FieldValue
FormulaCarry = coupon accrued over the horizon - financing cost on the full price. Roll-down = P(horizon, unchanged curve) - P(today). Total = carry + roll-down, before any change in the curve or spread
Horizon2026-08-27 to 2026-11-27, 92 days, at an illustrative repo rate of 4.000 percent ACT/360
IncomeCoupon of 2.250 received 2026-11-15, reinvested 12 days to 2.253000, plus horizon accrued 0.149171, less accrued given up 1.271739: net 1.130432
Financing100.021739 * 0.0400 * 92/360 = 1.022444
Worked, carry1.130432 - 1.022444 = 0.107988 per 100 of par
Roll-downQuoted price at the horizon on the same curve and spread is 98.857997, against 98.750 today, so roll-down is +0.107997
Total0.107988 + +0.107997 = +0.215985 per 100, or 0.844975 percent annualised
In yield termsThe bond's own yield falls from 4.684070 percent to 4.673086 percent, a roll of -1.0985 basis points, purely from ageing
  • Roll-down is positive here because the curve slopes upward: a shorter bond is discounted at a lower rate, so the price rises even with nothing changing. On an inverted curve roll-down is negative and can exceed positive carry.
  • Carry and roll-down are what a position must beat to be worth financing. A trade with negative total carry-and-roll needs a directional move to break even, and quantifying that hurdle is the point of the decomposition.
  • The income and the financing legs are on different day-count bases, ACT/ACT against ACT/360, and netting them without conversion overstates carry by roughly the 365/360 factor applied to the financing.
  • The coupon reinvestment term is small over three months and is the sort of thing that is dropped and then forgotten. Here it is under a tenth of a basis point of the total; over a year on a high coupon it is not.

Also described at: Wikipedia · Wikidata

Decomposing a holding-period return

Any realised return over a horizon splits into terms that were known at the outset and terms that were not. Carry and roll-down were known; the yield and spread changes were not. Separating them is the difference between attribution and narrative.

FieldValue
FormulaTotal return = carry + roll-down + (-D_mod * dy + 0.5 * Cx * dy^2) * P + spread effect, where dy is the change in the bond's own yield beyond the roll and the spread effect is -spread duration * ds * P
Known at the outsetCarry 0.107988 plus roll-down +0.107997 = +0.215985 per 100 of par over 92 days
A 25 basis point selloff on top of that-6.706168 * 0.0025 * 100.021739 + 0.5 * 53.827761 * 0.0025^2 * 100.021739 = -1.660082
Worked, combined+0.215985 + -1.660082 = -1.444097 per 100
Breakeven moveThe yield rise that exactly cancels carry and roll-down is roughly 3.22 basis points
Spread componentA 10 basis point spread widening costs -0.669967 per 100, using a spread duration of 6.698219
  • The breakeven in the fourth field is the number that decides whether a position is worth holding: it states how much the market has to move against you before time stops paying you. It is computable at the outset and requires no view.
  • The decomposition is not unique. Attributing the same return to curve, spread and carry depends on the order in which the effects are applied, and the interaction terms have to be assigned to something. Any attribution system embeds a convention here and should state it.
  • Second order matters for large moves and not for small ones. Over a quarter with a 25 basis point move the convexity term is a rounding item; over a quarter with a 200 basis point move it is a material part of the answer.
  • A decomposition that reconciles to the actual profit and loss to the last decimal is usually hiding a plug. Reporting the unexplained residual is more useful than eliminating it.

Reference data. Reviewed 2026-08-27. Machine-readable: /curves.json. Corpus manifest: /llms.txt.

Published and maintained by · [email protected]. A reference published by the wallstreet.wiki network. Every figure is stated as a formula and recomputed from it, every convention names the authority that sets it, and corrections are versioned and dated. About this reference.

Reference information only. Not investment, legal, tax, or accounting advice. Day-count, settlement, quotation and reset conventions vary by market, by instrument class and by individual issue, and the convention that applies to a specific security is a term of that security. Verify every convention against the offering document, prospectus, indenture or confirmation before relying on any calculation here. All prices, rates, curve levels, index values and model outputs in worked examples are illustrative inputs chosen for arithmetic clarity and are not market levels, typical levels, or benchmarks.