The Analyst's Path

Phase 12Finance Plus, AI and the quant-code trackFinance trackFI1.0212,965 words1 h 12 min of readingabout 18 hours of study5 concept pagesfree

Duration, Convexity & Interest-Rate Risk

For a bond paying cash flows CFₜ at each of n coupon periods (period length 1/freq years, semi-annual, freq = 2, for a UST or a G-Sec), priced at yield y (periodic rate y/freq):

Advertisement

Branch: Fixed Income Analytics (Finance-Plus Ring) · Node FI1.02 · ~18 focused hours · Standard gate ≥ 85%

A bond's price is a promise discounted at a rate the market can change tomorrow. Everything in this module is the answer to one practical question a desk, a treasurer, or an analyst asks every single day: if that rate moves, by how much does the price move, and can you say the number before it happens, not just after? M1.08 taught you how a bond's carrying value walks from issue price to par as coupons are amortized; M7.03 taught you why a rising discount rate compresses every valuation, hardest of all the ones whose cash flows sit furthest in the future, and gave you a first taste of duration to make that point. This module stops citing duration as an intuition and starts building it as a toolkit: Macaulay, modified, and money duration; PVBP and DV01; effective duration and convexity for instruments whose cash flows are not fixed; key-rate duration for curve moves that are not parallel; and the two disciplines, immunization and hedging, that turn a risk number into a risk decision. This Ring is additive institutional/CFA breadth, it presents the toolkit and the plumbing alongside, not in place of, the program's process-over-P&L, concentration-over-diversification philosophy. None of what follows tells you whether to own a bond; all of it tells you, precisely, what owning one costs you when the world's opinion about interest rates changes.

Treat this module with unusual care, and read that sentence again once you reach the section that names it explicitly: duration, convexity, and DV01 arithmetic is one of the highest AI-over-trust zones in the entire program, because the numbers are multi-step and compounding-sensitive, and because a desk acts on the output directly (sizing a real hedge, setting a real limit) with nothing in a fluent wrong answer's tone to warn anyone it is wrong. Every figure quoted anywhere in this module was built from a bond's actual cash flows in a scratch script, run, and pasted in, not asserted, not "typical," not remembered from a table. You are about to learn to do the same, by hand, before you ever let a tool do it for you.


Advertisement

Learning objectives

By the end you can:

  1. Build a bond's full period-by-period cash-flow table from its coupon, yield, maturity, and coupon frequency, and compute its Macaulay duration (the present-value-weighted average time to cash flow) entirely from that table.
  2. Convert Macaulay duration to modified duration, state the linear price-sensitivity approximation it powers (%ΔP ≈ −ModDur × Δy), and explain precisely why that formula requires the bond's cash flows to be fixed and yield-independent.
  3. Compute money duration (dollar/rupee duration) and PVBP/DV01 for a position of a given face value, and explain (permanently) why DV01 is a currency amount per basis point and never a percentage.
  4. Explain why a callable bond or an agency MBS pool has no fixed cash-flow stream to differentiate, and compute effective duration and effective convexity for such an instrument by bump-and-reprice, given a small set of scenario prices.
  5. Derive convexity from a bond's cash flows in closed form, combine it with modified duration in the two-term Taylor shock estimate, and quantify the approximation error against an exact reprice for both a small and a large yield move, in both directions.
  6. Distinguish positive convexity (option-free bonds) from negative convexity (callable bonds, MBS) in cash-flow terms, and explain why negative convexity makes both the gain on a rally and the loss on a sell-off worse than a linear duration estimate predicts.
  7. Build a simplified key-rate duration (KRD) profile for a bond or a small portfolio, verify that key-rate durations sum to the total effective duration under a parallel shift, and use the profile to predict (then verify by exact reprice) a portfolio's response to a non-parallel curve move that a single duration number gets wrong.
  8. Build a duration- and present-value-matched (Redington) immunization portfolio against a single liability, verify the asset-convexity-≥-liability-convexity safety condition, and explain why an immunized position drifts and must be rebalanced.
  9. Size a DV01-neutral hedge of a bond position using a second instrument's own DV01, a second bond in a US Treasury setting, an interest-rate swap referencing INR OIS/MIBOR in an India setting.
  10. (Productivity objective: R10 duality.) Recognize why duration/convexity/DV01 arithmetic is one of the highest AI-over-trust zones in the program, and apply this module's adapted verification discipline, independent recomputation by a second method, plus a check against the named market convention, before any AI-produced risk figure is used to size a real hedge.

The duality, stated once (R10). Objectives 1–9 are the understanding objective the mastery gate rewards: you earn the pass by building every one of these numbers from a blank sheet and defending them. Objective 10 is the productivity payoff you keep, knowing exactly how far to trust a tool's arithmetic in a domain where a wrong number costs real money, not an awkward citation. A tool can accelerate the calculation. It cannot buy you the gate, and in this branch more than almost any other, it cannot be allowed to be the calculation either.


Prerequisites & connections

Builds on. M1.08's effective-interest machinery, you already know how a bond's issue price, coupon, and market yield relate, and how a discount or premium amortizes to par over the bond's life; this module does not re-derive any of that. It starts from a bond's price and asks how that price moves when the yield that produced it moves. M7.03 introduced Macaulay and modified duration once, in a single worked comparison of a 2-year and a 10-year bond, to make the point that a higher discount rate crushes long-duration, terminal-value-heavy assets hardest, that intuition, and the curve-shape vocabulary (normal/inverted, the four bull/bear-steepener/flattener moves) built alongside it, are assumed here, not re-taught. This module supplies the full closed-form and numerical toolkit M7.03 only sketched: money duration, PVBP/DV01, cash-flow convexity, effective duration for option-embedded instruments, key-rate duration, immunization, and hedging. E11.01 built the credit side of a bond's risk, spread duration, the price sensitivity of a corporate bond to a change in its own credit spread. Hold the boundary sharp from the first page: this module's duration is interest-rate duration, sensitivity to the risk-free curve M7.03 taught you to read. E11.01's spread duration is a different, additive sensitivity, to the same bond's credit spread. A corporate bond carries both, computed with structurally similar arithmetic, but they move for different reasons, a central-bank decision moves the first; a rating action or an earnings miss moves the second, and a number for one tells you nothing about the other.

Feeds forward. FI1.03 takes the single-yield shortcut this module leans on (pricing every bond, and every key-rate "node," off its own one yield) and replaces it with a properly bootstrapped spot and forward curve, this module's key-rate framework uses each key-rate bond's own yield as a clean stand-in for a curve node; FI1.03 builds the real node. FI1.04, this branch's crown, takes effective duration and negative convexity, introduced here as a computation technique applied to given scenario prices, and builds the valuation engine that actually produces those scenario prices: the binomial tree that prices a callable bond and the option-adjusted spread that isolates its embedded-option cost. DV1.01 and DV1.02 take this module's closing "hedge with a second instrument" idea and build the pricing of that second instrument, forwards, futures, swaps, and their Greeks, from scratch; this module only ever takes a hedge instrument's DV01 as given. AA1.01's frontier work and later asset-allocation material treat this module's duration as one axis a portfolio is built around, and MS1.03's repo and money-market plumbing is the mechanism by which a leveraged desk actually funds the position whose DV01 you compute here. Keep one more seam in view: QM's statistics/ML track and this module do not overlap, a yield shock scenario here is a stated input, never a simulated or estimated one; Monte Carlo scenario generation for rate paths is QM1.03's territory, handed off explicitly to the quant-code galaxy for its coded build.


Core teaching content

Why this is one of the highest AI-over-trust zones in the program

Say this plainly before a single formula appears, because it should change how you read everything that follows. Every number this module teaches you to produce (a Macaulay duration, a PVBP, a convexity, a key-rate profile, a hedge notional) is a multi-step, compounding-sensitive calculation that ends in a single figure a desk acts on directly: it sizes a real hedge, sets a real risk limit, or tells a real committee whether a book is immunized. That combination, arithmetic complex enough that a fluent, wrong answer is easy to produce, and consequential enough that acting on it moves real money, is close to the worst case AI0.01 warned you about. Recall the mechanism, don't re-derive it: a language model was built to continue text plausibly, not to compute correctly, and it perceives digits as tokens rather than the characters a calculator operates on, so a duration or DV01 calculation is exactly the kind of multi-step arithmetic where a model's fluent, unit-perfect-looking output can be silently wrong by the fourth line of a ten-line calculation, with nothing in its tone to warn you (AI0.01's token-level arithmetic limits, and its softmax-invisibility point (confidence carries no information about correctness) apply here in full force).

Unlike a company's reported profit, there is usually no single filing to trace a computed risk figure to: recomputing is the verification. This module's adapted Guardrail is therefore: (1) build the number by one method, the closed-form cash-flow table; (2) rebuild it by a genuinely independent second method (bump-and-reprice (effective duration/convexity)) and confirm the two agree to a sensible tolerance; (3) confirm the market convention you used (day count, compounding frequency) against the named primary source (FIMMDA/CCIL/FBIL for a G-Sec, the Treasury's own auction convention for a UST) rather than a default a tool silently assumed. Run all three before any risk number, AI-produced or not, sizes anything real. Common Mistake 9, below, is what happens when a desk skips this.

Macaulay duration vs modified duration

Macaulay duration is the present-value-weighted average time, in years, until a bond pays its cash flows. Modified duration is Macaulay duration divided by one plus the periodic yield, which turns that time into a price sensitivity: a modified duration of 7.13 means the price falls by about 7.13% for every 1% rise in yield. Modified duration is always slightly smaller than Macaulay, and it assumes the bond's cash flows do not change when the yield does.

3 min read, on its own page

DV01 and PVBP

DV01 and PVBP are two names for the same number: the currency amount a position's value moves for a one-basis-point move in yield. You get it by multiplying modified duration by the position's market value and then by 0.0001. Modified duration is a percentage sensitivity, perfect for comparing bonds of different sizes, useless for sizing an actual position. DV01 is the number a trading desk uses to size a position or a hedge.

3 min read, on its own page

When cash flows move with the yield: effective duration

Everything above assumes a bond's future cash flows are fixed, decided at issuance, indifferent to what the yield does afterward. That is true of a plain G-Sec, a plain UST, and any option-free corporate bond (E11.01's territory). It is false for two of this branch's named US anchors: a callable corporate bond, whose issuer can redeem it early once rates fall far enough, killing the very coupons your Macaulay-duration formula assumed you would keep receiving, and an agency MBS pool, whose underlying homeowners can prepay their mortgages early when rates fall, the same effect produced by millions of individual refinancing decisions instead of one issuer's call decision. For either instrument there is no fixed cash-flow stream to differentiate, the closed-form modified-duration formula does not merely become less accurate, it stops applying, and using it anyway is one of this module's most consequential Common Mistakes.

The fix needs a different method, not a new formula: reprice the instrument, using whatever model actually prices it, a binomial tree with an option-adjusted spread for a callable, a prepayment model for an MBS pool; FI1.04 builds both, at a yield shifted down by a small amount, and again shifted up by the same amount, and read the sensitivity directly off the three prices:

Effective duration = (P₋ − P₊) / (2 × P₀ × Δy)
Effective convexity = (P₋ + P₊ − 2 × P₀) / (P₀ × Δy²)

This is a numerical, bump-and-reprice derivative, not an algebraic formula, and it works for any instrument you can reprice, fixed cash flows or not, which is exactly why it is the general-purpose tool of the whole branch. For a plain G-Sec or UST, effective duration and modified duration come out numerically almost identical (Worked Example 3 verifies this directly); for a callable bond or an MBS, they can differ enormously, and only effective duration is meaningful. Worked Example 4 applies this to a synthetic agency MBS pool. This module teaches the calculation; FI1.04 teaches the valuation model that produces the P₋/P₀/P₊ inputs for a callable bond's OAS in the first place.

Bond convexity

Bond convexity is the curvature term that corrects duration's straight-line estimate of how a bond's price changes with yield. Modified duration is a straight-line fit to a price-yield relationship that is actually curved. For a plain option-free bond it is always positive, which is a small gift to the holder in both directions. For a callable bond or a mortgage-backed security it can turn negative.

3 min read, on its own page

Portfolio duration

Portfolio duration is the duration of a whole bond portfolio, and there are two standard ways to compute it. One weights each holding's modified duration by its share of the portfolio's market value. The other treats the portfolio as a single synthetic bond, using its combined cash flows and one yield. They give different numbers: risk systems report the first and size DV01 hedges from it, while a liability match wants the second.

4 min read, on its own page

Key-rate durations: the single number's blind spot

M7.03 taught you to read a curve's shape (normal, flat, inverted) and to classify the four bull/bear-steepener/flattener moves. A single effective-duration number cannot tell you how a bond or portfolio responds to any of those non-parallel moves, because it was built assuming one thing: every point on the curve moves by the same Δy. Key-rate duration (KRD) decomposes total duration into a separate sensitivity to each of several chosen points on the curve (illustratively, "2-year," "5-year," and "10-year" key rates) so you can answer "what happens if the short end rallies while the long end sells off," exactly a steepener, instead of only "what happens if everything moves together."

The rigorous version reprices off a bootstrapped spot curve with a localized ("tent-shaped") shock at each node: FI1.03 builds that bootstrapping machinery, and this module deliberately does not pre-empt it. Here, to isolate the idea, use each key-rate maturity's own bond and its own yield as a clean stand-in for that curve node: a bond maturing at a key-rate point loads essentially all of its duration onto that one KRD and near-zero onto the others (for well-separated key rates), while a bond or portfolio spanning multiple key rates splits its duration across them. Sum the KRDs across all key rates and you recover the total effective duration exactly, that identity is your check, every time:

Σ (KRD at each key rate) = Total effective duration      (under a parallel shift)

Worked Example 5 builds this for a genuine barbell-versus-bullet comparison and shows the payoff: two India G-Sec portfolios with identical total modified duration diverge by more than a full percentage point under a single non-parallel curve move, because their KRD profiles (not just their duration totals) are completely different.

Modern Data Analysis: vectorizing the bond-math toolkit

Everything above (the cash-flow table, Macaulay/modified duration, closed-form and effective convexity, and a key-rate profile) is a closed-form or few-line calculation for one bond. The moment you hold a real book of dozens or hundreds of positions, doing this by hand stops being a skill and becomes a bottleneck. The professional path is a vectorized pandas/numpy routine, or a call into an open-source bond-math library such as QuantLib, which implements exactly the day-count conventions, compounding rules, and effective-duration/OAS machinery this branch teaches, that computes every bond's duration, convexity, and PVBP in one pass, aggregates a portfolio PVBP and key-rate profile, and re-prices the whole book under a scenario grid in milliseconds. Feed it from a live curve pulled through an API. FBIL/CCIL's published benchmarks for India, a market-data vendor's feed or the US Treasury's own published auction and par-yield data for the US, instead of typed-in yields, and the whole risk report this module teaches you to build by hand for one bond regenerates automatically for an entire book every morning.

This module gates the by-hand mastery: you must be able to build the table and defend every number without a library before you are entitled to trust the library's output. The coded, at-scale build itself belongs to the quant-code galaxy's data/Python track, exactly as QM hands its statistics concepts to the DA/QD modules for their coded implementation: duplicate no worked content here, but know precisely which tool you reach for once the by-hand skill is real.

Immunization: matching a liability, not just a view

Everything so far measures risk. Immunization neutralizes it against a specific, known future obligation, the classical problem a pension fund, an insurer, or a corporate treasury with a bond due actually faces. Redington's construction needs two conditions met together at the outset:

  1. Present value match: the market value of the asset portfolio equals the present value of the liability, at today's discount rate.
  2. Duration match: the (Macaulay) duration of the asset portfolio equals the duration of the liability.

Meeting both means a small parallel shift in yields moves the assets and the liability's present value by very nearly the same amount, leaving the surplus roughly unchanged, you are hedged against small parallel rate moves without having to forecast which way rates go. The refinement that turns "roughly unchanged" into "weakly better, never worse" is Redington's safety condition: make sure the asset portfolio's convexity is at least as large as the liability's convexity. Since convexity is itself always a benefit for an option-free instrument (two sections back), an asset portfolio with more curvature than the liability it backs gains slightly more on a rally and loses slightly less on a sell-off than the liability does, the surplus should improve, weakly, on either side of a small parallel shift. Worked Example 6 builds a full immunized portfolio against a single $20 million, 7-year liability from two coupon bonds, verifies the convexity condition, applies ±100bp shocks and shows the surplus stays positive both ways, and then does the thing most treatments skip: returns one year later, with yields unchanged, and shows the match has already drifted and needs rebalancing, because a coupon bond's duration does not fall by exactly one year for each calendar year that passes. Immunization is a maintained position, never a one-time trade.

DV01 hedging

A DV01 hedge neutralises the interest-rate risk of one position by adding a second instrument, such as another bond or an interest-rate swap, and sizing it so the two PVBPs offset. You do not have to sell the original position. For a swap, a desk holding a G-Sec can pay fixed on an overnight index swap whose DV01 offsets as much of the bond's DV01 as it wants to shed.

4 min read, on its own page

Reading an interest-rate-risk position like an analyst

From here on, read every fixed-income position (your own, a fund's, a company's investment book) with five numbers, in this order. (1) Modified (or effective) duration, the single-number, parallel-shift sensitivity. (2) Convexity, and its sign, positive (a plain bond) or negative (callable/MBS) changes what a large move does to you. (3) PVBP/DV01 for the actual position size, the currency figure that turns an abstract sensitivity into "how much money moves." (4) The key-rate profile, concentrated at one maturity (a bullet) or spread across several (a barbell), because that alone tells you how a curve twist, not just a curve shift, will treat you. (5) Whether anything here is meant to be immunized or hedged, and whether that match has been checked since it was set up, because duration drifts, yields move, and an un-rebalanced hedge is a hedge in name only. Five numbers, one sweep, and you know more about a book's interest-rate risk than most readers of a single "duration: 6.2 years" headline ever will.


Common mistakes & how experts think differently

  1. Quoting Macaulay duration where modified duration is meant. Macaulay duration is a time (years); modified duration is a price-sensitivity (a pure decimal multiplier on Δy). The two are always close but never equal, dividing by (1 + y/freq) matters. Experts state the type of duration they mean every single time, because using 7.36 (Macaulay) as if it were 7.13 (modified) overstates every downstream price estimate by the compounding factor.
  2. "Duration is 5.2, so DV01 is 5.2%." DV01/PVBP is a currency amount per basis point, never a percentage. It requires the position's market value, not just its duration. Experts compute money duration first (ModDur × market value) and only then scale by 0.0001; skipping the market-value step is a category error, not a rounding one (Practice P16).
  3. Applying closed-form modified duration to a bond whose cash flows change with yield. A callable bond, an MBS pool, or a puttable bond has no fixed cash-flow stream to differentiate, the closed-form formula does not apply, full stop. Experts reach for effective duration (bump-and-reprice) the instant an instrument carries an embedded option, and treat "modified duration of a callable bond" as a phrase that should make them stop and ask which duration is actually meant.
  4. Trusting the duration-only linear estimate for a large yield move. Worked Examples 1 and 3 show the error growing with shock size; for anything beyond a small move, or for any option-embedded instrument, experts add the convexity term or reprice exactly, and never report a bare duration-only estimate as if it were precise.
  5. Treating negative convexity as "a bit less positive convexity." It is a difference in kind, not degree: negative convexity makes both directions of a move worse than the linear estimate, which never happens for an option-free bond. Experts read a negative effective-convexity number as an explicit warning that the instrument's upside is capped and its downside is not cushioned, the defining shape of prepayment and call risk.
  6. Using one duration number to protect against any curve move. A single effective duration only protects against a parallel shift. Worked Example 5 shows two portfolios with identical duration moving in opposite directions under a curve twist. Experts always ask "parallel or non-parallel?" before reaching for a single number, and build the key-rate profile the moment the answer is "it depends on the shape."
  7. Believing immunization is set once and done. Duration drifts with time and with yield changes, and it drifts at different rates for different bonds (Worked Example 6's one-year-later check). Experts treat an immunized book as a maintained position with a rebalancing calendar, never a trade you can forget.
  8. Confusing interest-rate duration (this module) with spread duration (E11.01). A corporate bond carries both, and they move independently, a Fed or RBI decision moves the first, a rating action or an earnings miss moves the second. "This bond's duration is 4" says nothing about how it behaves when its own credit spread widens. Experts always name which duration they are quoting and add the two effects, never substitute one for the other.
  9. Accepting an AI-produced duration/DV01/convexity figure because the arithmetic "looks right." This is precisely the highest AI-over-trust zone flagged at the top of Core teaching content. Experts recompute by an independent second method (closed-form versus bump-and-reprice) and check the market convention used, every time, before a real hedge or a real risk limit is sized off the number, regardless of how fluent or confident the tool's output reads.

Worked examples

Worked example 1: Macaulay/modified duration, money duration & PVBP: an on-the-run-style G-Sec (India, ₹, synthetic)

Consider GoI 7.18% GS 2036 (synthetic; not a real ISIN, check the actual current 10-year benchmark and its live yield at ccilindia.com, fbil.org.in, or rbi.org.in): face ₹100, coupon 7.18% paid semi-annually (₹3.59 per ₹100 every six months), 10-year maturity (20 semi-annual periods), priced to yield 6.60%, the illustrative 10-year G-Sec level this program's own M7.03 already uses, for continuity, under the standard FIMMDA/CCIL 30/360, semi-annual-compounding convention (FIMMDA's Government Securities Market in India: A Primer states this explicitly: "irrespective of the actual number of days in a month, the number of days in a month is taken as 30 and the number of days in a year is taken as 360," with coupons "compound[ing] semi-annually"). Valuing exactly on a coupon date keeps the arithmetic convention-clean, no accrued-interest adjustment enters, and that is a division of labour rather than an omission: FI1.05 owns settlement arithmetic, accrued interest and the clean-versus-dirty price in full, and a real trade date sends you there first.

Solution. Step 1, price and the full cash-flow table. Each period's cash flow is the coupon (₹3.59), plus face value (₹100) at period 20. Discounting every cash flow at the periodic rate y/2 = 3.30%:

Price = Σ CFₜ / 1.033^t  =  ₹104.1972 per ₹100 face   (a premium bond: coupon 7.18% > yield 6.60%)

The full table (period t, years t/2, cash flow, present value, PV weight, weight × years) runs 20 rows; the first and last rows, and the check:

t= 1  yrs=0.5   CF=3.590   PV=3.4753   weight=0.03335   weight×yrs=0.01668
t=20  yrs=10.0  CF=103.590 PV=54.1142  weight=0.51934   weight×yrs=5.19344
  ... (18 intermediate rows, weight falling smoothly from 0.0333 toward the final row) ...
  sum of weights          = 1.000000   (must equal 1 — it does)
  sum of (weight × years) = 7.364114   (this IS the Macaulay duration)

Step 2: Macaulay and modified duration. Macaulay duration = 7.3641 years. Modified duration = 7.3641 / 1.033 = 7.1289. Analytical convexity (next section's formula, computed here for later use) = 64.6212.

Step 3, money duration and PVBP for a real position. A desk holds ₹10 crore face value:

Market value  = ₹10 crore × 104.1972/100 = ₹10.42 crore  (₹104,197,192.37)
Money duration = 7.1289 × ₹104,197,192.37 = ₹74.28 crore  (₹742,807,347.96)
PVBP (DV01)    = Money duration × 0.0001  = ₹74,280.73 per 1bp

Step 4, a 50bp shock, duration-only versus exact. If the yield rises 50bp, to 7.10%, the duration-only estimate is −7.1289 × 0.0050 = −3.5644%. The exact reprice, discounting the same 20 cash flows at 3.55% per period, gives a new price of ₹100.5659, a move of −3.4850%. The duration-only estimate overstates the loss by 0.0794 percentage points even for a modest 50bp move: a small gap, and exactly the seed Worked Example 3 grows into the convexity correction.

Read it. Every number above came from the same 20-row table; nothing was looked up or assumed. Note the discipline in Step 4, the "exact" answer was never in doubt, because you can always reprice a bond whose cash flows you know. The duration estimate is a fast approximation you sanity-check against that exact number, never the other way around.

Worked example 2: Money duration, PVBP & a DV01-neutral hedge: 10-year UST hedged with a 5-year note (US, $, synthetic)

A desk holds $50,000,000 face value of a synthetic 10-year on-the-run-style UST note: coupon 4.25%, semi-annual, priced to yield 4.50% (Actual/Actual-ICMA, semi-annual compounding; valuing exactly on a coupon date, this reduces to the same clean per-period math as Worked Example 1's 30/360 bond, the two conventions' odd-period adjustments only bite between coupon dates). It wants to hedge the position's rate risk with a 5-year UST note: coupon 4.00%, yield 4.10%, without selling the 10-year.

Solution. Step 1, price and duration of both notes.

10Y note: price = 98.0045   MacDur = 8.2282   ModDur = 8.0472   Convexity = 77.0888
5Y  note: price = 99.5520   MacDur = 4.5800   ModDur = 4.4880   Convexity = 23.4683

Step 2, the position's money duration and PVBP.

Market value  = $50,000,000 × 98.0045/100 = $49,002,267.98
Money duration = 8.0472 × $49,002,267.98  = $394,329,746.95
PVBP           = Money duration × 0.0001  = $39,432.97 per 1bp

Step 3, size the hedge in the 5-year note. Per $100 face of the 5-year note, its PVBP is 4.4880 × 99.5520 × 0.0001 = 0.044679. To offset the 10-year position's $39,432.97 PVBP:

Hedge face value = $39,432.97 / 0.044679 × 100 = $88,259,168.49

Check: buying $88,259,168.49 face of the 5-year note gives it a PVBP of 4.4880 × ($88,259,168.49 × 0.995520) × 0.0001 = $39,432.97, an exact match.

Read it. Notice the hedge needs almost 1.8× the face value of the position it hedges, purely because the 5-year note's duration (4.49) is roughly half the 10-year's (8.05), a shorter instrument needs proportionally more of it to carry the same dollar-duration. This is the identical PVBP-matching logic Worked Example 7 applies with a swap instead of a second bond.

Worked example 3: Convexity from cash flows, and the Taylor estimate at scale (India, ₹, synthetic; continues Worked Example 1)

Return to the GoI 7.18% GS 2036 bond above (price ₹104.1972, ModDur 7.1289, Convexity 64.6212) and apply larger shocks (the size a genuine hiking or easing cycle delivers) to see convexity earn its place in the formula.

Solution. Step 1, the formula. %ΔPrice ≈ −ModDur × Δy + ½ × Convexity × (Δy)². The second term is always non-negative for Δy ≠ 0 when convexity is positive, so it always pulls the estimate in the holder's favor, less loss on a rise, more gain on a fall.

Step 2, a +150bp shock (yield to 8.10%).

Duration-only estimate     = −10.6933%
Duration + convexity       = −9.9663%
Exact reprice (from cash flows, y=8.10%) = price 93.7760  →  −10.0014%
Error, duration-only       = −0.6919 percentage points
Error, duration+convexity  = +0.0351 percentage points

Step 3, a −150bp shock (yield to 5.10%), the mirror case.

Duration-only estimate     = +10.6933%
Duration + convexity       = +11.4203%
Exact reprice (y=5.10%) = price 116.1364  →  +11.4583%
Error, duration-only       = −0.7650 percentage points
Error, duration+convexity  = −0.0380 percentage points

Read it. At ±150bp, duration alone is wrong by 0.69–0.77 percentage points; adding the convexity term shrinks the error to roughly 0.04pp both ways, an eighteen-to-twenty-fold reduction in the approximation error, from one extra, closed-form term. And notice the direction of every error: duration-only always understates how well the bond does, it overstates the loss on the rise and understates the gain on the fall, because convexity is genuinely positive here. That asymmetric bias, always in the holder's favor for an option-free bond, is the entire content of "positive convexity," made arithmetic instead of a phrase.

Worked example 4: Effective duration & negative convexity: a synthetic agency MBS pool (US, $, synthetic)

A synthetic agency MBS pass-through pool, current price 100.00, is repriced (by the prepayment/OAS model FI1.04 builds, here, simply given) at yields 50bp below and 50bp above today's: P(y−50bp) = 101.35, P(y+50bp) = 97.80.

Solution. Step 1: effective duration and convexity.

Effective duration  = (101.35 − 97.80) / (2 × 100.00 × 0.0050) = 3.5500
Effective convexity = (101.35 + 97.80 − 200.00) / (100.00 × 0.0050²) = −340.0000

The convexity is negative: the hallmark of prepayment risk.

Step 2, what the negative sign actually does. Using the same two-term formula as Worked Example 3, but now with Convexity = −340:

+50bp: dur-only = −1.7750%   dur+conv = −1.7750% + ½(−340)(0.0050)² = −2.2000%   (matches the given −2.20% exactly)
−50bp: dur-only = +1.7750%   dur+conv = +1.7750% + ½(−340)(0.0050)² = +1.3500%   (matches the given +1.35% exactly)

Step 3, contrast with a comparable option-free bond. A hypothetical option-free note of the same 3.55 effective duration but a typical positive convexity of +40 would show, for the identical ±50bp shocks: +50bp → −1.7250% and −50bp → +1.8250%, nearly symmetric, and slightly better than the linear duration estimate both ways, exactly as Worked Example 3 demonstrated.

Read it. Line the two shapes up. The option-free comparison bond loses 1.7250% on the sell-off and gains 1.8250% on the rally: better than linear, both ways. The MBS pool loses 2.2000% on the identical sell-off (worse than its own linear estimate of −1.7750%) and gains only 1.3500% on the identical rally (also worse than its own linear estimate of +1.7750%). Same size shock, same starting effective duration: opposite verdict on both sides. That is what a negative sign on convexity means in cash-flow terms: as rates fall, homeowners prepay faster, capping the pool's price appreciation exactly when a plain bond would be rallying hardest; as rates rise, prepayments slow, extending the pool's effective duration exactly when you wanted it short. Negative convexity is not "less good", it is a structurally different risk shape, and FI1.04 builds the machinery that prices precisely why.

Worked example 5: Barbell versus bullet: key-rate duration and a non-parallel shift (India, ₹, synthetic)

Build three India G-Secs consistent with a normal, upward-sloping curve (2-year 6.35%, 5-year 6.55%, 10-year 6.60%, the same illustrative levels M7.03 used): a 2-year at par (coupon 6.35%, yield 6.35%), the 10-year from Worked Example 1 (coupon 7.18%, yield 6.60%, price 104.1972, ModDur 7.1289, Convexity 64.6212), and a 5-year bullet at par (coupon 6.55%, yield 6.55%).

Solution. Step 1, price and risk of each leg.

2Y : price=100.0000  ModDur=1.8508  Conv= 4.4145
5Y : price=100.0000  ModDur=4.2059  Conv=21.3179   (the BULLET)
10Y: price=104.1972  ModDur=7.1289  Conv=64.6212

Step 2, build a barbell (2Y + 10Y) with the SAME total modified duration as the 5Y bullet. Solve w₂×1.8508 + w₁₀×7.1289 = 4.2059, w₂ + w₁₀ = 1:

w(2Y) = 0.5538    w(10Y) = 0.4462
Check: 0.5538×1.8508 + 0.4462×7.1289 = 4.2059   (matches the bullet exactly)
Barbell convexity = 0.5538×4.4145 + 0.4462×64.6212 = 31.2787   vs Bullet convexity = 21.3179

The barbell already carries meaningfully more convexity, for identical duration.

Step 3, a large PARALLEL shock, both directions.

+200bp: bullet %ΔP = −8.0010%   barbell %ΔP = −7.8237%   (barbell wins by 0.1773pp)
−200bp: bullet %ΔP = +8.8547%   barbell %ΔP = +9.0790%   (barbell wins by 0.2243pp)

Exactly the convexity payoff, the higher-convexity barbell outperforms the equal-duration bullet on both sides of a large parallel move.

Step 4, a NON-PARALLEL shift ("belly pivot"): 2Y down 50bp, 5Y unchanged, 10Y up 50bp.

Bullet  %ΔP (its own key rate, 5Y, did not move) = 0.0000%
Barbell %ΔP (its 2Y and 10Y legs both moved)      = −1.0394%
Divergence = −1.0394 percentage points — same duration, opposite curve exposure

Step 5, the key-rate duration profile, and its own predictive check.

KRD profile — Bullet:  KRD(2Y)=0.0000  KRD(5Y)=4.2059  KRD(10Y)=0.0000   (sum = 4.2059)
KRD profile — Barbell: KRD(2Y)=1.0250  KRD(5Y)=0.0000  KRD(10Y)=3.1809   (sum = 4.2059)
KRD-predicted %ΔP for the Step-4 shift — Bullet: 0.0000%   Barbell: −1.0780%
   (vs the exact reprice of −1.0394% — a small ~0.04pp gap, the identical convexity-omission
    logic from Worked Example 3, now operating leg-by-leg inside a linear KRD prediction)

Read it. Both portfolios sum their KRDs to the identical 4.2059 (confirming the KRD identity) yet the profile is completely different: the bullet's risk sits entirely at the 5-year point; the barbell's sits split between the 2-year and the 10-year, with none at the 5-year. A single duration number, computed either way, is 4.2059 for both. Only the KRD profile tells you, correctly and in advance, that a curve twist pivoting on the belly leaves the bullet untouched and costs the barbell over a full percentage point. Duration protects you against a parallel shift; only the key-rate profile protects you against a curve reshaping itself.

Worked example 6: Immunizing a single liability, and the one-year-later drift check (US, $, synthetic)

A liability of $20,000,000 is due in exactly 7 years; today's flat discount rate is 5.00% (a deliberately flat curve, so the immunization mechanic is isolated from curve shape).

Solution. Step 1, the liability's PV, duration, and convexity.

PV of liability = $20,000,000 / 1.025^14 = $14,154,543.92
Macaulay duration = 7.0000 years  (a single cash flow's duration is always its own maturity)
Convexity = 49.9703

Step 2, the trivial immunizing asset: a matching 7-year zero. A zero-coupon bond maturing in exactly 7 years, bought for $14,154,543.92 today, grows to exactly $20,000,000 at 5.00%: face value $20,000,000, duration 7.0000 years by construction. Perfectly immunized, in this single-curve sense, with no calculation beyond the PV.

Step 3, the realistic case: two coupon bonds, PV- and duration-matched. Using a 3-year bond (coupon 4.8%, yield 5.0%: price 99.4492, MacDur 2.8291, Convexity 9.2378) and a 12-year bond (coupon 5.2%, yield 5.0%: price 101.7885, MacDur 9.1045, Convexity 97.8367), solve for present-value weights w₃, w₁₂ with w₃ + w₁₂ = 1 and w₃×2.8291 + w₁₂×9.1045 = 7.0000:

w(3Y) = 0.3354    w(12Y) = 0.6646
Dollar allocation: $4,746,769.30 into the 3Y bond ($4,773,059.92 face)
                   $9,407,774.61 into the 12Y bond ($9,242,473.11 face)
Portfolio convexity = 0.3354×9.2378 + 0.6646×97.8367 = 68.1248
   vs Liability convexity = 49.9703  →  asset convexity EXCEEDS liability convexity (the safety condition holds)

Step 4, apply ±100bp parallel shocks and check the surplus.

+100bp: liability PV → $13,222,356.12 (from $14,154,543.92); assets → $13,234,288.38; surplus = +$11,932.26
−100bp: liability PV → $15,157,500.49 (from $14,154,543.92); assets → $15,171,345.58; surplus = +$13,845.09

The surplus stays positive on both sides, precisely the payoff of the convexity-safety condition from Step 3.

Step 5, one year later, yields unchanged, no rebalancing.

Liability duration now = 6 years (7 minus the year that passed)
3Y bond (now a 2Y) duration = 1.9306
12Y bond (now an 11Y) duration = 8.5373
Un-rebalanced portfolio duration (SAME dollar weights 0.3354 / 0.6646) = 6.3217
Drift = 6.3217 − 6.0000 = +0.3217 years

Read it. Even with yields completely unchanged, the match has already drifted by nearly a third of a year in twelve months, because the 12-year bond's duration fell more slowly than the liability's (a coupon bond's duration decays at a different rate than a single cash flow's, which always falls exactly one year per year). Immunization protected the surplus at the moment it was set up; it did not protect it forever. A desk that checks this position only once, at inception, is carrying a growing, silent mismatch it believes is hedged.

Worked example 7: A duration overlay: hedging a G-Sec with a MIBOR-OIS (India, ₹, illustrative)

The desk from Worked Example 1 holds its ₹10 crore face value of the GoI 7.18% GS 2036 bond (PVBP ₹74,280.73) and wants to shed the position's rate risk without selling the bond, perhaps for tax, relationship, or collateral reasons. It overlays a pay-fixed 5-year INR overnight-indexed swap (OIS) referencing the overnight MIBOR fixing (the FBIL-published benchmark; the floating leg compounds daily off the overnight MIBOR fixings, exactly as CCIL's own published INR-OIS methodology specifies). Take the swap's DV01 as given here: DV1.01 builds the valuation that produces it, at an illustrative ₹4,850 per ₹10 crore notional (check the live figure off the CCIL/FBIL curve; this is not a quoted market rate).

Solution. Step 1, the hedge notional.

Hedge notional = Position PVBP / OIS DV01-per-₹10cr × ₹10 crore
              = ₹74,280.73 / ₹4,850 × ₹10 crore
              = ₹153.16 crore (pay-fixed OIS notional)
Check: ₹153.16 crore / ₹10 crore × ₹4,850 = ₹74,280.73  (matches the bond's PVBP exactly)

Read it. Paying fixed on roughly ₹153 crore of 5-year OIS notional offsets the entire ₹74,280.73 PVBP of the ₹10 crore G-Sec position, leaving the desk long the bond's coupon and credit-free carry while running (near) zero net rate risk. This is the identical PVBP-matching arithmetic as Worked Example 2's bond-versus-bond hedge; only the second instrument changed, from a UST note to a swap. Note precisely what stayed outside this module: where the ₹4,850 DV01 itself comes from is a swap-curve valuation question (DV1.01), and the SDL market (India's state-government equivalent of a G-Sec) uses this exact same interest-rate-duration arithmetic unchanged, an SDL's rate duration is computed identically to a G-Sec's; only the spread an SDL trades over the G-Sec curve is a separate, roughly parallel add-on, priced and monitored the way E11.01 prices any spread, not remeasured here.


Practice set

Work every problem fully before reading its solution. Numeric answers are to about ±2% unless stated otherwise. All entities are synthetic unless a named primary source is given.

P1 (guided). Macaulay duration by hand, a tiny 3-year annual bond. Face 100, coupon 6% (paid annually), yield 6% (freq = 1). Build the 3-row cash-flow table and compute Macaulay duration.

Solution. Coupon = par bond (coupon = yield), so price = 100.0000 exactly. Cash flows: t=1: 6; t=2: 6; t=3: 106. Discounting at 6%: PV(1)=5.6604, PV(2)=5.3400, PV(3)=88.9996 (sums to 100.0000). Weights: 0.05660, 0.05340, 0.89000. Weighted years: 0.0566, 0.1068, 2.6700, summing to Macaulay duration = 2.8334 years, noticeably close to, but less than, the 3-year maturity, because the coupons pull some weight forward.

P2 (guided). Modified duration from P1. Convert P1's Macaulay duration to modified duration.

Solution. ModDur = MacDur / (1 + y) = 2.8334 / 1.06 = 2.6730 (annual compounding, so divide by (1+y), not (1+y/2)).

P3 (guided). Money duration & PVBP. India. A position has modified duration 5.20, price ₹98.40 per ₹100 face, face value ₹5 crore. Compute market value, money duration, and PVBP.

Solution. Market value = ₹5 crore × 98.40/100 = ₹4,92,00,000 (₹4.92 crore). Money duration = 5.20 × ₹4,92,00,000 = ₹25,58,40,000 (₹25.58 crore). PVBP = money duration × 0.0001 = ₹25,584.00 per 1bp.

P4. Linear shock estimate: US. Face $20,000,000, price 101.50, modified duration 6.40, yield rises 75bp. Compute the duration-only %ΔPrice and the dollar change.

Solution. Market value = $20,000,000 × 1.0150 = $20,300,000.00. %ΔP = −6.40 × 0.0075 = −4.8000%. Dollar change = −4.80% × $20,300,000.00 = −$974,400.00.

P5. Effective duration from three prices. P₀ = 100.00, Δy = 25bp; P(y+25bp) = 98.90; P(y−25bp) = 101.20. Compute effective duration.

Solution. EffDur = (101.20 − 98.90) / (2 × 100.00 × 0.0025) = 2.30 / 0.50 = 4.6000.

P6. The convexity correction term alone. Convexity = 55.0; Δy = 100bp. Compute ½ × Convexity × (Δy)².

Solution. 0.5 × 55.0 × (0.01)² = 0.5 × 55.0 × 0.0001 = 0.002750 = 0.2750%.

P7. Full two-term Taylor estimate. Modified duration 6.0, convexity 50, Δy = +125bp. Compute both the duration-only and duration+convexity estimates.

Solution. Duration-only: −6.0 × 0.0125 = −7.5000%. Duration+convexity: −7.5000% + 0.5×50×(0.0125)² = −7.5000% + 0.3906% = −7.1094%.

P8. Exact reprice versus both approximations. Bond: coupon 5%, yield 5.5%, 8 years, semi-annual. Compute price, modified duration, and convexity; then estimate and exactly reprice a +100bp shock.

Solution. Price = 96.7989, ModDur = 6.4865, Convexity = 50.2965. At Δy = +100bp: duration-only = −6.4865%; duration+convexity = −6.2350%; exact reprice (new price 90.7567) = −6.2419%. Duration-only error = −0.2445pp; duration+convexity error = only +0.0069pp, a thirty-five-fold reduction in error from the single extra term.

P9. Key-rate duration additivity. A bond's KRD profile: KRD(2Y) = 0.30, KRD(5Y) = 2.10, KRD(10Y) = 0.00. What is its total effective duration under a parallel shift, and where does its risk concentrate?

Solution. Total effective duration = 0.30 + 2.10 + 0.00 = 2.40. Essentially all of the risk (2.10 of 2.40, or 87.5%) sits at the 5-year key rate, this bond behaves almost exactly like a 5-year bullet.

P10. Non-parallel shift via KRDs. Same-style profile: KRD(2Y) = 0.30, KRD(5Y) = 2.10, KRD(10Y) = 1.00 (total effective duration 3.40). The curve moves: 2Y −40bp, 5Y −10bp, 10Y +20bp. Estimate the price impact.

Solution. %ΔP ≈ −(0.30×(−0.0040) + 2.10×(−0.0010) + 1.00×(0.0020)) = −(−0.0012 − 0.0021 + 0.0020) = −(−0.0013) = +0.1300%. A small net gain, because the short-end rally (which this bond is most exposed to, after the belly) outweighs the modest long-end sell-off.

P11. Immunization, the investment needed today. A liability of $8,000,000 is due in exactly 5 years; today's 5-year rate is 4.5% (annual compounding). How much must be invested today in a matching 5-year zero-coupon bond to immunize this liability exactly, and what is that bond's duration?

Solution. PV = $8,000,000 / 1.045^5 = $6,419,608.37, invest this amount today in a 5-year zero with face value $8,000,000. Its Macaulay duration is exactly 5.0 years, matching the liability's duration by construction; this is the trivial (single-instrument) immunization case Worked Example 6 opens with.

P12. Immunization: two-bond duration matching. Liability duration 6.0 years. Bond A duration 3.5 years; Bond B duration 9.0 years. Find the present-value weights that duration-match the liability.

Solution. wA×3.5 + wB×9.0 = 6.0, wA + wB = 1 → wA = (6.0 − 9.0)/(3.5 − 9.0) = (−3.0)/(−5.5) = 0.5455; wB = 0.4545. Check: 0.5455×3.5 + 0.4545×9.0 = 1.9091 + 4.0909 = 6.0000. ✓

P13. DV01 hedge notional. A position's DV01 is $42,000 per basis point. A hedge instrument's DV01 is $620 per $1,000,000 face value. What face value of the hedge instrument is needed?

Solution. Hedge face = $42,000 / $620 × $1,000,000 = $67,741,935.48 (≈ $67.74 million).

P14. Barbell versus bullet, quantified. Two portfolios share modified duration 5.0. Portfolio A (bullet) has convexity 28; Portfolio B (barbell) has convexity 45. Estimate each portfolio's %ΔPrice for a ±300bp parallel shock.

Solution. At Δy = +300bp: A = −5.0×0.03 + 0.5×28×0.03² = −15.00% + 1.26% = −13.7400%; B = −15.00% + 0.5×45×0.03² = −15.00%+2.025% = −12.9750%. At Δy = −300bp: A = +15.00%+1.26% = +16.2600%; B = +15.00%+2.025% = +17.0250%. B (the barbell) beats A by 0.7650 percentage points on both sides of the shock, identical in magnitude, because the convexity term is symmetric in (Δy)².

P15. India G-Sec price from yield. Face 100, coupon 7.00%, 6 years (12 semi-annual periods, 30/360, FIMMDA convention), yield 7.40%. Compute price and modified duration.

Solution. Price = 98.0899 (a discount bond: coupon 7.00% < yield 7.40%). Modified duration = 4.8113.

P16. Catching the category error. A risk report states: "The bond's duration is 5.2, and its DV01 is 5.2%." The bond's market value is ₹9,80,00,000 (₹9.8 crore). What is wrong, and what is the correct PVBP?

Solution. DV01/PVBP is a currency amount per basis point, never a percentage: "5.2%" cannot be a DV01 regardless of what the duration is. The correct PVBP requires the market value: 5.2 × ₹9,80,00,000 × 0.0001 = ₹50,960.00 per 1bp. The report conflated modified duration (a pure percentage-sensitivity number) with PVBP (a currency figure that also depends on position size), precisely Common Mistake 2.

P17. Portfolio duration, weighted by the right thing (India, ₹). A fund holds three annual-coupon G-Secs at face amounts of ₹40, ₹35 and ₹25 crore. Their prices per ₹100 face are 99.634347, 100.824450 and 100.559298, and their modified durations are 1.829845, 4.110504 and 6.977992. Compute the portfolio's market value and its market-value-weighted modified duration. Then compute what you would have got by weighting on face instead, and say which error that introduces.

Solution. Market values are 40 × 99.634347/100 = ₹39.853739 crore, 35 × 100.824450/100 = ₹35.288557 crore and 25 × 100.559298/100 = ₹25.139825 crore, totalling ₹100.282121 crore. The weights are 0.397416, 0.351893 and 0.250691, so the modified duration is 0.397416 × 1.829845 + 0.351893 × 4.110504 + 0.250691 × 6.977992 = **3.922987 years**. Weighting on face instead uses 0.40, 0.35 and 0.25, giving 0.40 × 1.829845 + 0.35 × 4.110504 + 0.25 × 6.977992 = **3.915112 years**, understating the true figure by 0.007875 years. The direction is what to remember rather than the size. Face weighting over-counts the discount bond, which here is the short holding, and under-counts the two longer premium bonds, so it under-states duration whenever the long end of the portfolio trades above par and over-states it whenever the long end trades at a discount. On this ₹100 crore book that 0.0079-year error is about ₹0.79 lakh of unhedged exposure per 100 bp, small enough to ignore in a memo and large enough to matter in a hedge ratio.

P18. The same portfolio, the other method (India, ₹). The three holdings above produce one aggregate cash-flow stream, and the single rate that discounts that stream to ₹100.282121 crore is a cash-flow yield of 6.825131%, giving an aggregate modified duration of 3.953426 years. (a) State which of the two portfolio durations you would quote to size a DV01 hedge, and which to check an immunisation against a six-year liability. (b) Estimate the portfolio's return on a 100 bp parallel rise under each measure, given that a full reprice of every bond at its own yield plus 100 bp gives −3.7971%, and explain the gap.

Solution. (a) Quote the market-value-weighted 3.922987 for the hedge, because that is what a risk system reports and what the hedge instrument's own DV01 is being matched against. Use the cash-flow-yield 3.953426 against the liability, because immunisation is a statement about one dated stream of cash meeting another dated obligation, and treating the portfolio as one synthetic bond is exactly the frame that statement lives in. (b) The first-order estimates are −3.922987 × 1% = **−3.9230%** and −3.953426 × 1% = **−3.9534%**, against a true −3.7971%. Both over-state the loss, by 12.6 bp and 15.6 bp respectively, and the reason is that neither carries a convexity term: a duration-only estimate is a straight line drawn tangent to a curve that bends upward, so it always over-states a loss on a rate rise and under-states a gain on a rate fall. Adding ½ × convexity × (Δy)² closes most of each gap. The residual difference between the two measures is not convexity at all; it is the cash-flow-yield method discounting a two-year coupon and a ten-year coupon at the same 6.825131% while the weighted average lets each bond keep its own yield.


Applied mini-project

Build a duration/convexity/DV01 risk-and-hedge memo.

Pick one bond, either a real on-the-run instrument (pull its coupon, maturity, and current yield from a named primary source: CCIL, FBIL, or RBI for a G-Sec; TreasuryDirect or a market-data vendor for a UST) or one of this module's synthetic bonds. Produce a short memo with:

  1. The full cash-flow table and Macaulay and modified duration computed from it (show every row, or a representative subset with the running sums, exactly as Worked Example 1 does).
  2. Convexity, computed both the closed-form (cash-flow) way and, if you can construct two bump scenarios, the effective way, and confirm the two agree closely (this bond should be option-free).
  3. Money duration and PVBP for a position size you choose (state the notional and currency).
  4. A shock table: for both a small (±50bp) and a large (±200bp) parallel shock, report the duration-only estimate, the duration+convexity estimate, and the exact reprice (four rows, three columns each) and note where the approximation errs most.
  5. A simplified three-key-rate profile (2Y/5Y/10Y-style) for your bond, most of a single bullet bond's duration will load onto its own nearest key rate; show this and explain why.
  6. One proposed DV01-neutral hedge using a second, clearly named instrument (another bond, or, for an India bond, an OIS tenor), state the hedge instrument's own duration/DV01 assumption and compute the hedge notional.
  7. One paragraph: of every number in your memo, which would you be most nervous accepting from an AI tool unchecked, and what is the one independent check (per this module's opener) you would run before trusting it?

Rubric, score yourself out of 10, pass at 8/10 with no zero on any item. (a) 2 pts, cash-flow table and Macaulay/modified duration correctly built and shown in full. (b) 2 pts, convexity correctly computed, closed-form (and effective, if attempted) methods cross-checked. (c) 2 pts, money duration and PVBP computed and correctly labeled (currency, not percent). (d) 2 pts, all four shock-table cells computed, including the exact reprice for each (not just the estimate). (e) 1 pt, key-rate profile built with a correct explanation of where the risk concentrates and why. (f) 1 pt, hedge notional computed from a clearly named, clearly assumed hedge-instrument DV01, with the arithmetic shown, and the AI-verification paragraph completed honestly.

Lab: open this node's Duration & PVBP Calculator sandbox in the Practice tab and reproduce your memo's Step 1–4 numbers inside it, confirming the app's output matches your by-hand work to the decimal before you move on.


Reading & Resources

Everything below is an anchor to build against and verify with, never a substitute for the by-hand table. Free unless marked; level tags reflect the ramp from intuition to full mechanism.

The core toolkit, in depth:

  • CFA Institute curriculum. Fixed Income: Understanding Fixed-Income Risk and Return. The standard, exam-grade synthesis of duration, convexity, and key-rate duration this module's framework is aligned to. [Paid] [Intermediate]
  • Frank Fabozzi (ed.), The Handbook of Fixed Income Securities. The same reference E11.01 pointed you to for spreads; its duration/convexity/effective-duration chapters are the standard practitioner lookup. [Paid] [Intermediate]
  • Pietro Veronesi, Fixed Income Securities: Valuation, Risk, and Risk Management. A rigorous academic treatment of effective duration, key-rate duration, and immunization, for when you want the full derivation behind the formulas used here. [Paid] [Advanced]
  • Frank Fabozzi, Bond Markets, Analysis, and Strategies. A more accessible intro-to-intermediate path through duration, convexity, and hedging. [Paid] [Beginner–Intermediate]

India primary sources (R6), the conventions and live data this module's G-Sec examples used:

  • FIMMDA, Government Securities Market in India: A Primer. The source for the 30/360 day count and semi-annual compounding convention every India worked example in this module follows. [Free] [Beginner–Intermediate]
  • CCIL: published PVBP Methodology (INR OIS). The real-world twin of this module's bump-and-reprice effective-duration technique: CCIL computes and publishes PVBP daily by repricing at the curve ±1bp and averaging, exactly as Worked Example 4's formula does. [Free] [Intermediate]
  • FBIL (Financial Benchmarks India Pvt Ltd): MIBOR and G-Sec valuation methodology. The daily benchmark publisher behind this module's MIBOR/OIS references and G-Sec valuation curve. [Free] [Beginner–Intermediate]
  • CCIL / RBI, live on-the-run G-Sec yields, auction results, and the SDL issuance calendar. Pull a real current benchmark's coupon, maturity, and yield here before building the mini-project's memo. [Free] [Beginner]

US primary sources (R6):

  • TreasuryDirect / treasury.gov. Auction results and the Actual/Actual-ICMA, semi-annual convention this module's UST examples use. [Free] [Beginner]
  • SEC EDGAR. A real corporate issuer's indenture, for the call schedule behind a genuine callable bond (priced in full only once FI1.04 builds the OAS machinery). [Free] [Beginner–Advanced]

Where this hands off:

  • M7.03: the curve-reading and "rates as gravity" intuition this module assumed throughout; go back if any of the steepener/flattener language felt unfamiliar.
  • E11.01: the credit half: spread duration, the credit triangle, and everything about a bond's own credit spread that this module deliberately left untouched.
  • FI1.03: the real bootstrapped spot curve that replaces this module's own-yield key-rate shortcut.
  • FI1.04 Crown: the binomial-tree and OAS machinery that actually prices the callable-bond and MBS scenarios this module only ever took as given inputs.
  • DV1.01 / DV1.02: pricing the hedge instrument (forward, future, or swap) whose DV01 this module took as given.
  • The quant-code galaxy's data/Python track: the vectorized, portfolio-scale build of every formula in this module (see "Modern Data Analysis," above).

Do this, not just read: pull one real on-the-run G-Sec's coupon and maturity from CCIL or RBI, and one real on-the-run UST's from TreasuryDirect. Build both cash-flow tables by hand exactly as Worked Example 1 does, and compute modified duration and PVBP for a position size of your choosing. Ten minutes spent on a real bond's table, instead of a synthetic one, is what turns this module's arithmetic into a skill you own rather than a formula you recognize.


Teach it back & journal

Feynman prompt. Explain to a colleague who has only ever seen "duration: 6.2 years" on a risk report why that single number is both useful and dangerously incomplete. Cover, in order: (1) what that 6.2 actually measures (a linear, parallel-shift price sensitivity) and what it assumes away (that cash flows are fixed, and that the whole curve moves together); (2) why a second number, convexity, and its sign, changes the story for a large move or for any callable/MBS instrument; (3) why a THIRD idea, key-rate duration, is sometimes the only thing that tells you the truth, using the barbell-versus-bullet result (identical duration, over a percentage point of divergence under a curve twist) as your one concrete piece of evidence. If your colleague can, unprompted, ask "but what if the curve doesn't move in parallel?" after you explain step (1), you have installed the module's central insight.

Journal prompt. Pick one real fixed-income position you can find data for (your own, a fund's factsheet, or a company's investment note in its annual report) and run this module's five-number sweep on it: modified/effective duration, convexity and its sign, PVBP for its actual size, an approximate key-rate profile, and whether anything about it looks immunized or hedged (and, if so, how you'd tell whether that match has drifted). Write one paragraph on which of the five numbers was hardest to find or estimate, and why. Then write a second paragraph, honestly, on this module's opening claim (that duration/DV01/convexity arithmetic is one of the highest AI-over-trust zones in the program) using your own experience building this module's worked examples and practice problems: was there a moment where a plausible-looking intermediate number would have been easy to accept without the independent second-method check? What, specifically, will you do differently the next time a tool hands you a risk figure you did not build yourself?


This module's flashcards and mastery quiz are wired into the app: see the node's Quiz and Reviews.

Advertisement

The gate

The module's flashcards and its quiz are in the app. The quiz is the gate: you need 85% to pass it, and the next module opens when you do.