Step 1: Bond Price
Price = Sum of [ Coupon / (1 + y)^t ] plus Face Value / (1 + y)^N
Where: Coupon = the $50 annual payment, y = the 6.0% (0.060) market yield, t = the year in which the cash flow arrives, N = 5 years to maturity, Face Value = $1,000 repaid at maturity.
Using the annual coupon of $50, the market yield of 6.0% (0.060), and the $1,000 principal repaid in year 5:
| Year (t) | Cash Flow | Discount Factor at 6.0% | Present Value |
| 1 | $50.00 | 0.9434 | $47.17 |
| 2 | $50.00 | 0.8900 | $44.50 |
| 3 | $50.00 | 0.8396 | $41.98 |
| 4 | $50.00 | 0.7921 | $39.60 |
| 5 | $1,050.00 | 0.7473 | $784.62 |
| Total | — | — | $957.88 |
Price = $47.17 + $44.50 + $41.98 + $39.60 + $784.62 = $957.88
The bond price is simply the present value of every cash flow the bond will ever pay, discounted at the yield the market currently demands. It trades below its $1,000 face value because the fixed 5.0% (0.050) coupon is lower than the 6.0% (0.060) yield investors now require: nobody pays par for a below-market coupon, so the price falls until the total return to maturity again matches 6.0%. This is the inverse price-yield relationship in its simplest form. The coupon is contractually fixed, so when yields move, the only thing that can adjust is the price.
Step 2: Macaulay Duration
Macaulay Duration = Sum of [ t × PV(Cash Flow at t) ] / Price
Using the present values computed in Step 1, each weighted by the year in which it arrives:
| Year (t) | Present Value | t × PV |
| 1 | $47.17 | $47.17 |
| 2 | $44.50 | $89.00 |
| 3 | $41.98 | $125.94 |
| 4 | $39.60 | $158.42 |
| 5 | $784.62 | $3,923.11 |
| Total | $957.88 | $4,343.64 |
Macaulay Duration = $4,343.64 / $957.88 = 4.53 years
Macaulay duration is the weighted-average time until an investor gets their money back, where each year is weighted by the share of the bond's present value that arrives then. It comes out at 4.53 years rather than the full 5, because the coupons return cash early and pull the average forward. Note how lopsided the weighting is: year 5 alone carries $784.62 of the $957.88 total, because the principal repayment sits there. That is the mechanical reason a longer maturity or a lower coupon pushes duration up, and why a zero-coupon bond has a duration exactly equal to its maturity.
Step 3: Modified Duration
Modified Duration = Macaulay Duration / (1 + y)
Using the Macaulay duration of 4.53 years and the market yield of 6.0% (0.060):
Modified Duration = 4.53 / 1.06 = 4.28
Modified duration converts a measure of time into a measure of price sensitivity: it says this bond loses roughly 4.28% of its value for every one percentage point rise in yield. This is the number traders, treasurers and risk managers actually quote, because it answers the question they care about, which is how much money moves, not how long they wait to be repaid. Unlike Macaulay duration it carries no unit of years, and quoting 4.53 when the interviewer asked for price sensitivity is one of the most common slips in a fixed income interview.
Step 4: Estimated Price Change from a 100 bp Yield Increase
Estimated % Price Change = − Modified Duration × Change in Yield
Using the modified duration of 4.28 and a yield increase of 100 basis points, a change in yield of +1.0% (+0.010):
Estimated % Price Change = −4.28 × 0.010 = −4.28%
Estimated $ Price Change = −4.28% × $957.88 = −$40.98
Estimated New Price = $957.88 − $40.98 = $916.90
This is the standard first-pass answer to "what happens to my bond if rates rise by one percent?", and it is exactly what a desk would quote in seconds. But it is a linear approximation: a straight line drawn tangent to a price-yield relationship that is genuinely curved. For small moves the line and the curve are indistinguishable, which is why duration is such a durable shorthand. For larger moves the line drifts away from reality, always in the same direction, and that drift has a name.
Step 5: Actual Repricing and the Convexity Gap
Repricing the bond directly at the new yields, using the same pricing formula from Step 1:
| Yield Scenario | Actual Price | Actual $ Change | Duration Estimate | Difference |
| 5.0% (−100 bp) | $1,000.00 | +$42.12 | +$40.98 | +$1.14 |
| 6.0% (unchanged) | $957.88 | — | — | — |
| 7.0% (+100 bp) | $918.00 | −$39.88 | −$40.98 | +$1.10 |
Convexity = (P(y − d) + P(y + d) − 2 × P(y)) / (P(y) × d^2)
Where: P(y − d) = the price at 5.0% = $1,000.00, P(y + d) = the price at 7.0% = $918.00, P(y) = the price at the current 6.0% yield = $957.88, and d = the yield shift of 1.0% (0.010).
Convexity = ($1,000.00 + $918.00 − 2 × $957.88) / ($957.88 × 0.010^2) = $2.24 / 0.0958 = 23.4
Convexity Adjustment = 0.5 × 23.4 × 0.010^2 = 0.117% of price, or +$1.12
Duration plus convexity estimate = −$40.98 + $1.12 = −$39.86, against an actual move of −$39.88.
Convexity is the curvature that the straight duration line misses, and for a plain vanilla bond it always works in the holder's favour. The actual loss when yields rise ($39.88) is smaller than duration predicted, and the actual gain when yields fall ($42.12) is larger. That asymmetry is a real economic benefit, which is why investors will accept a slightly lower yield for a more convex bond, and why the effect is a rounding error in a 25 basis point move but becomes the entire conversation in a 300 basis point repricing.
Final Results
- Bond price at a 6.0% market yield: $957.88
- Macaulay duration: 4.53 years
- Modified duration: 4.28
- Duration-estimated price change for +100 bp: −$40.98 (−4.28%)
- Actual price change for +100 bp: −$39.88 (−4.16%)
These mechanics sit directly underneath the cost of debt in a WACC calculation: a company's true borrowing cost is the market yield on its debt, not the coupon printed on bonds it issued years ago. The same duration figure is what tells a treasurer how exposed the balance sheet is to a rate move, and what tells a credit investor how much of their position is at risk before any view on the issuer's credit quality enters the picture.
Would you like to explore how the answer changes for a semi-annual coupon bond, or for a zero-coupon bond where duration equals maturity exactly?
No comments yet — be the first to ask a question.