The Analyst's Path

Phase 12Finance Plus, AI and the quant-code trackFinance trackFI1.0420,187 words1 h 52 min of readingabout 20 hours of study8 concept pagesfree

Embedded Options, OAS & Structured Products

The whole module in one sentence: when a bond's cash flows depend on the path of rates, you cannot value it on a curve, you must value it on a tree, and the number that comes out is only as good as the model that produced it. Everything follows.

Finance-Plus Ring · Branch FI (Fixed Income Analytics) · Node FI1.04 · CROWN · ~20 focused hours · Mastery gate ≥ 90%

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.

Every bond you have priced so far kept a promise: you knew the coupons, you knew the maturity, and the only question was the discount rate. This node is about the bonds that break that promise on purpose, the callable that vanishes exactly when you most wanted to own it, the mortgage pool whose borrowers refinance the instant it hurts you, the ABS tranche that pays in full or writes down 41% depending on a trigger buried in the offer document, and the credit default swap whose entire price is a statement about the probability that someone you have never met stops paying. In each case the cash flows are contingent, they depend on a future rate path, a future prepayment decision, a future default, and the moment cash flows become contingent, every tool from FI1.01–FI1.03 stops working, because those tools all assume you know what you are discounting.

Advertisement

The whole module in one sentence: when a bond's cash flows depend on the path of rates, you cannot value it on a curve, you must value it on a tree, and the number that comes out is only as good as the model that produced it. Everything follows. Option-adjusted spread exists because a yield spread is meaningless when the cash flows move. Effective duration exists because modified duration assumes fixed cash flows. Negative convexity exists because the issuer's option truncates your upside and leaves your downside intact. The waterfall exists because tranching is how contingency gets sliced and sold. And the hazard rate exists because a credit spread is a price, and behind every price is an implied probability somebody has to be brave enough to write down.

By the end you will build the rate tree that reprices a benchmark curve exactly, roll a callable back through it node by node, extract the OAS, prove the convexity is negative with a price ladder, tranche a pool so the cash flows tie to the last rupee, and back out the default probability the CDS market is charging you. Not read about it, do it, by hand, and check it.

A standing warning, stated once and meant. This is the highest AI-over-trust region in the corpus. An AI will produce a beautiful OAS, a plausible tranche table and a confident hazard rate in four seconds, and all three can be silently wrong in ways no reader can detect, the tree may not reprice the curve, the waterfall may not sum, the hazard rate may embed a recovery assumption nobody stated. In an accounting module a wrong number usually looks wrong. Here a wrong number looks exactly like a right one. Read R10 (§4.10) before you let a model near any of this.


Learning objectives

By the end you can:

  1. Decompose an option-embedded bond (callable = straight bond − call option, putable = straight bond + put option) and state who owns each option, when they exercise, and what that does to value.
  2. Calibrate a binomial interest-rate tree to a benchmark par curve at a given volatility, and prove it arbitrage-free: every calibrating par bond reprices at exactly 100, and a straight bond prices identically on the tree and off the spot curve.
  3. Value a callable and a putable node by node by backward induction, applying the exercise test at every decision node, and read off which nodes exercise and why.
  4. Compute and distinguish nominal spread, Z-spread and OAS; compute option cost = Z-spread − OAS; and sign it correctly for a callable versus a putable.
  5. Compute effective duration and effective convexity by curve-shift revaluation, say why modified duration and analytical convexity are invalid here, and demonstrate negative convexity numerically with a price ladder and an up/down capture ratio.
  6. Handle mortgage prepayment: convert between CPR, SMM and PSA; build a pass-through cash flow month by month; compute WAL across speeds; and isolate the prepayment option as the sole cause of negative convexity by freezing the speed.
  7. Tranche a pool and run its waterfall: a sequential-pay CMO whose principal ties to the collateral to the dollar, and an Indian PTC with over-collateralisation, subordination, cash collateral, excess spread and a loss trigger, then stress it and allocate the losses correctly.
  8. Price a CDS from hazard rates: survival probabilities, the risky annuity (RPV01), the protection leg, the par spread; convert to an upfront at a standard coupon; invert a market spread to an implied hazard rate; bootstrap a two-point credit curve; and mark a position to market.
  9. Situate all of it in both jurisdictions (R6): US agency/corporate callables, agency MBS and CMOs, standardised CDS, and India's putable/callable corporate bonds, the RBI Securitisation of Standard Assets framework (PTC/DA, MRR, MHP), and the thin single-name protection market that forces hazard rates to be inferred from bond spreads.
  10. (Productivity objective: R10 duality.) Use AI and code to accelerate tree-building, waterfall modelling and curve bootstrapping, while running the verification that makes the output admissible: the tree reprices the curve, the waterfall sums, the credit curve reprices its own quotes.

The duality, stated once (R10). The understanding objective (items 1–9) is what the gate rewards; you earn the crown by building the tree, rolling the bond back and tying the waterfall by hand. The productivity objective (item 10) is the payoff you keep. But the duality is sharper here than anywhere else in the program, because the outputs are unfalsifiable by eye: an OAS of 56 bp and an OAS of 22 bp look equally reasonable on a page, and only the model that produced them tells you which is right. Verification here is not diligence; it is the entire skill.


Prerequisites & connections

Builds on. This is the crown of the FI branch and it assumes the branch. FI1.01 gave you pricing off a discount curve and the yield family (YTM, BEY, YTC, yield-to-worst), used here, and shown exactly where it breaks. FI1.02 gave you Macaulay/modified duration, PVBP/DV01 and analytical convexity, replaced here by effective (shift-and-revalue) versions, with the reason. FI1.03 gave you bootstrapping, spot and forward rates, and the arbitrage-free logic that a curve must reprice its own instruments, the tree calibration here is that discipline in two dimensions. From the analyst core: M1.08 for effective-interest amortization; M7.03 for what curve level and shape signal; E11.01 for the credit half, ratings, covenants, recovery, and the spread ≈ PD × LGD slide rule that the CDS section makes exact rather than approximate; M5.02 for how an Indian NBFC/HFC funds itself, the demand side of the securitisation market you will tranche. From the derivatives galaxy, DV1.02 owns option pricing proper (parity, risk-neutral valuation, BSM, the Greeks), this node uses risk-neutral backward induction as a tool and does not re-derive it.

Deliberate non-overlaps (R1). We do not re-teach bond pricing or the yield family (FI1.01), analytical duration/convexity (FI1.02), curve bootstrapping mechanics (FI1.03), rating methodology, covenants or the insolvency recovery waterfall (E11.01, note that the structured-finance waterfall taught here is a payment-priority mechanism inside a live SPV, a different object from E11.01's Section 53 liquidation waterfall, and you should be able to say why), the option-pricing foundations (DV1.02), or hedge accounting (M1.09). Where those modules own a concept, this node cites and moves on.

Feeds forward. DV1.03 hedges the exposures measured here. AA1.02's risk budgeting needs these effective durations, because a portfolio of callables does not have the duration its constituents' modified durations imply. AL1.01's relative-value and structured-credit strategies live on this OAS and tranche machinery. MS1.03 covers repo, haircuts and the shadow-banking chain (the funding side of every structure here) and MS1.04 the global-dollar plumbing. The quant-code galaxy is where these models get built rather than hand-rolled; see the Modern Data Analysis callout for the hand-off.

Case Lab: run CL-FI.2. Callable at Par: OAS on a US Agency MBS after Worked Examples 1–5. It hands you a benchmark curve, a callable structure and a market price, and asks you to produce the OAS, the effective duration and the convexity verdict, with the tree tying out. The write-before-peek rule applies.


Core teaching content

4.0 The one-page map: contingency and where it comes from

Four instrument families sit in this node and they are the same idea in different clothing.

A callable bond gives the issuer the right to redeem early at a stated price, exercised when refinancing is cheap, when rates have fallen. The holder loses the bond exactly in the states where it had become most valuable. A putable bond gives the holder the right to sell it back, exercised when rates have risen. Both are Bermudan options (exercisable on a schedule of dates) embedded in a debt instrument, and both price the same way.

A mortgage-backed security is a callable bond whose option is written by thousands of borrowers who each hold a free prepayment right and exercise it imperfectly, sometimes rationally (refinance when rates fall), sometimes not (job change, relocation, housing turnover). The imperfection is the whole game: because the option is not exercised optimally it cannot be priced by optimality, so it needs a prepayment model, a behavioural forecast dressed as mathematics.

A structured product (ABS, CMO, CDO) redistributes a pool's contingent cash flows by rule. The rule is the waterfall: a strict priority ordering of who gets paid what, in what sequence, with what triggers. Tranching does not reduce risk; it reallocates it, creating a senior claim safer than the pool and a junior claim far riskier.

A credit default swap strips the contingency out and sells it alone: one party pays a running premium, the other pays the loss if a named entity defaults. Its price is a direct statement about default probability and recovery.

The unifying discipline: when cash flows depend on a path, take a probability-weighted average across paths, discounting each along its own path. A binomial tree is the simplest honest device for that.

4.1 The decomposition: who owns the option

Start with the two identities that organise everything:

  • Value of a callable bond = Value of the otherwise-identical straight bond − Value of the embedded call option
  • Value of a putable bond = Value of the otherwise-identical straight bond + Value of the embedded put option

Read them as ownership statements. The issuer bought the call from you, so it is subtracted, a callable is always worth less than its straight twin. The holder bought the put, so it is added.

Three consequences, before any arithmetic. The call caps your upside: as rates fall the straight bond rises without limit, but the callable is squeezed toward the call price, because the issuer will not let you keep a bond worth 108 when it can redeem it at 100. The put floors your downside: as rates rise the putable cannot fall far below the put price, because you can hand it back. And (the one people miss) the option's shadow reaches back into nodes where it is never exercised. A callable is worth less than its twin even where the call is out of the money today, because the continuation value already reflects the possibility of a call tomorrow. Worked Example 2 shows this at node (t=2, i=1): 100.264 as a straight bond, 99.885 as a callable, with nothing exercised.

Vocabulary: the lockout (non-call period) is the time before the first call date, a bond callable at par annually after one year is "NC1", the structure used in this module's US example. The call schedule is the set of dates and prices; corporates often use a declining schedule (102, then 101, then 100), while agency structures and most Indian corporate bonds use par.

Binomial interest rate tree

A binomial rate tree is a lattice of one-period interest rates. It is calibrated when it reprices the benchmark curve's own instruments exactly, so an option-free bond priced on the tree matches its value off the spot curve. If that check fails, nothing built on the tree can be trusted, such as the OAS or the option value. Calibration fixes the level of rates at each date. Volatility is a separate input you supply, and it is the largest source of model risk.

3 min read, on its own page

Callable bond valuation

Valuing a callable bond by backward induction means rolling its value back through a calibrated rate tree one step at a time, applying the issuer's right to call at each call date. On a call date you cap the node value at the call price, because the issuer refinances whenever the bond is worth more than the price it can buy it back for. The same roll-back values a putable bond with a floor at the put price, but a mortgage pool, whose cash flows depend on the path of rates, needs Monte Carlo instead.

7 min read, on its own page

Z-spread vs OAS

The Z-spread and the option-adjusted spread (OAS) are two ways to quote a bond's spread over the benchmark curve, and only OAS charges for an embedded option. The Z-spread is the constant spread added to every spot rate so the promised cash flows discount to the market price. OAS is the constant spread added to every rate in a calibrated tree so the model value, with the exercise test on, equals the market price. The gap between them is the option cost, and OAS changes with the volatility you assume.

6 min read, on its own page

Effective duration

Effective duration measures how much a bond's value changes when the benchmark curve shifts, found by revaluing the bond after a shift down and a shift up instead of using a closed-form formula. You recalibrate the tree after each shift and hold the OAS constant, so that credit moves do not contaminate the rate sensitivity. It is the right measure when cash flows move with rates, as for a callable or putable bond, and the matching effective convexity can be negative.

3 min read, on its own page

Negative convexity

A bond has negative convexity when its price gains shrink with each further fall in yield, the reverse of a plain bond, whose gains grow. A callable has it because the holder has sold the issuer an option. In the worked numbers a callable captures 61.6% of a straight bond's rally but 84.0% of its sell-off. A risk system running on modified duration and assuming positive convexity will systematically overstate what a callable book earns in a rally and understate what it loses in a sell-off, in the same direction every time.

3 min read, on its own page

Mortgage prepayment risk

Mortgage prepayment risk is the risk that borrowers repay their loans faster or slower than expected, which changes the life and value of a mortgage pass-through. Every borrower holds an American call on their own loan, struck at par, exercisable any month, at little cost beyond refinancing friction, the most generous option in fixed income, and the pass-through holder is short all of it. When rates rise, prepayments slow and the security lengthens, which is extension risk; when they fall, prepayments speed up and it shortens, which is contraction risk.

3 min read, on its own page

Securitisation

Pooling loans and selling claims on their cash flows to investors, which raises funding against the pool and can release capital. Ask what risk was actually transferred. Where the originator keeps a first-loss piece or provides credit enhancement, it has kept most of the risk, and under Ind AS the pool then usually stays on its balance sheet with the money raised shown as a borrowing.

3 min read, on its own page

Credit default swap

A credit default swap (CDS) is a contract in which a protection buyer pays a running premium, and the protection seller pays for the loss if the reference entity has a credit event such as bankruptcy. The buyer is short credit and the seller is long credit. The par spread is the running premium that makes the two legs equal at inception, and a hazard rate drives the survival probabilities that weight both. One spread quote cannot separate the hazard rate from recovery, so any implied default probability needs its recovery assumption.

4 min read, on its own page

4.10 R10: why this region is the corpus's highest AI-over-trust risk

Every module carries the AI duality. This one carries it with a red border, for a structural rather than a moral reason.

In most analytical work an error announces itself: a balance sheet that does not balance is visibly wrong, and even a bad DCF usually fails a sanity check. The models in this node produce nothing of the kind. An OAS is a single number with no natural scale, computed by an optimisation inside a lattice whose calibration you cannot see. A tranche table is a grid of plausible numbers that either sums or does not, and nobody checks. A hazard rate looks reasonable at almost any value. There is no visual tell.

And these are exactly the tasks an AI does fluently and fast. Ask for a calibrated binomial tree and you get a beautifully formatted lattice that may be uncalibrated. Ask for a CMO waterfall and you get a clean table whose principal column does not sum to the collateral. Ask for an OAS and you get a number with no volatility attached, and you now know that assumption alone is worth 34 bp on this module's example.

So verification here is not a hygiene step appended to the work. It is the work. Four cheap checks:

  1. Does the tree reprice the curve? Every calibrating par bond back at exactly 100, and the straight bond identical on the tree and off the spot curve. If not, stop.
  2. Does the waterfall sum? Principal to tranches = principal from the pool; interest + residual = net interest collected; principal collected + losses = original pool. If not, stop.
  3. Does the credit curve reprice its own quotes? Feed the bootstrapped hazards back and recover the 3- and 5-year spreads you started from. If not, stop.
  4. Is every assumption named? Volatility, prepayment speed, recovery, day count, compounding. A number without its assumptions is a rumour.

These are AI0.01's Guardrail 1–5 (Trace · Match · Recompute · Date-check · Cite) specialised to this domain, with Recompute promoted to first among equals. Use AI to write the code that does these calculations, an excellent use, because code is inspectable and testable in a way a chat answer is not. Never use AI as the source of a valuation figure, and never put a model output into a client document, committee memo or risk report without running the four checks yourself.

{
  "skill": "Building and calibrating a binomial interest-rate tree, then extracting OAS",
  "use": "Have an assistant write the tree-calibration and backward-induction code in Python (a solver for each step's base rate, plus a root-finder for OAS) so you can iterate on structures fast — then run the arbitrage-free test yourself before you look at a single output number.",
  "tools": ["Chat assistants with code execution — Claude, ChatGPT", "Notebook environments — Jupyter, Colab", "Spreadsheet solvers — Excel Goal Seek / Solver for a hand-built 3-4 step lattice"],
  "prompt": "Write Python that (1) bootstraps spot rates from this annual par curve, (2) calibrates a lognormal binomial short-rate tree with r[t,i] = r[t,0]*exp(2*i*sigma) so EVERY par bond reprices to exactly 100.000, (3) prices a bond with a Bermudan call schedule by backward induction applying min(value, call price) at each call date, and (4) solves for the constant spread (OAS) that makes the model price equal a given market price. Print the calibration residual for every par bond, and print the straight-bond price computed BOTH on the tree and off the spot curve so I can compare them.",
  "verify": "Run the two arbitrage-free tests before trusting anything: every calibrating par bond must price to 100.000000, and the option-free bond must price identically on the tree and off the bootstrapped spot curve (~1e-9). Then confirm the OAS reproduces the market price when fed back through the tree. Trace the input curve to its primary source (FBIL/CCIL G-Sec valuation curve for INR; the US Treasury par yield curve for USD), match tenor/day-count/compounding conventions, recompute, date-check and cite. The model's number is never the source (Guardrail 1-5, Recompute first).",
  "diy": "You must be able to roll a four-step tree back by hand and apply the min/max test at every node - what Worked Examples 1-2 build. If you cannot reproduce the node values with a calculator you cannot audit the code, and code you cannot audit is a liability, not a tool.",
  "market": "US"
}
{
  "skill": "Modelling a securitisation waterfall and stressing it",
  "use": "Use AI to translate a term sheet's payment priority into an explicit period-by-period waterfall function, then to generate stress vectors (loss timing, prepayment speed, trigger breach paths) far faster than you could enumerate them by hand.",
  "tools": ["Chat assistants with code execution — Claude, ChatGPT", "Python/pandas in a notebook", "Excel for the first two periods, hand-checked, before any code is trusted"],
  "prompt": "Here is a securitisation payment priority: <PASTE THE ORDERED WATERFALL FROM THE TERM SHEET>. Write a Python function taking an opening pool balance, a period's interest collections, principal collections and losses, plus tranche balances, returning every payment in strict priority order. Have it RETURN and ASSERT the tie-outs: (a) principal paid to tranches equals principal collected, (b) interest paid plus residual equals net interest collected, (c) principal collected plus cumulative losses equals the original pool once resolved. Then run a base and a stress loss vector and report each tranche's writedown.",
  "verify": "Do not read the tranche outputs until the three assertions pass. Then hand-check period 1 on paper against the offer document's own worked example. Trace every structural term (tranche sizes, coupons, trigger thresholds, MRR/MHP compliance) to the offer document or the RBI Securitisation of Standard Assets Directions, not to the model's summary of it. Match currency and units (Rs crore vs Rs million) and the period convention; recompute; date-check the document version; cite the clause. An AI paraphrase of a waterfall clause is a claim, not the clause (Guardrail 1-5).",
  "diy": "You must be able to run one period by hand and state, without looking, which buffer absorbs loss first and which trigger changes the ordering. Worked Example 7 is that drill. A waterfall you cannot narrate is one you cannot audit.",
  "market": "IN"
}

Modern Data Analysis. Everything in this module is four short Python functions. A curve bootstrap is a loop solving one unknown per maturity (scipy.optimize.brentq on the price residual). A tree calibration is that same loop with the tree's own pricer inside it, solve r[t,0] so the (t+1)-maturity par bond returns 100. Backward induction is a reversed loop over time steps holding a list of node values, with min() or max() on option dates. OAS is one more root-find wrapping the pricer. A waterfall is a function from (collections, balances) to (payments, new balances) applied down a list of periods, ending in three assert statements, and those asserts are worth more than any amount of formatting, because they are the only thing standing between you and a table that looks right and is not. For pools, pandas turns a 360-month amortisation schedule into eight lines and the WAL table in §4.7 into a one-line groupby across speeds. Monte Carlo path generation, needed for genuinely path-dependent securities such as MBS, where today's prepayment depends on the history of rates and not just today's level, is the natural next step and the point at which a lattice stops being enough. The quant-code galaxy (DA/QD branches) is where these get built properly: data structures, testing discipline, vectorisation, simulation. This node's job is to make you able to check that code; the quant-code region's is to make you able to write it at scale. Learn the check first, a model you can audit by hand is a model you can trust at scale, never the reverse.


Common mistakes & how experts think differently

  1. Using modified duration on a callable bond. It is the analytical derivative of a fixed-cash-flow price function, so on moving cash flows it answers a question you did not ask. Reach for effective duration the moment any optionality appears, and state the shock size, because for option-embedded bonds it changes the answer.
  2. Comparing OAS numbers computed at different volatilities. The §4.4 table is the whole rebuttal: 15% vol gives 56 bp, 25% vol gives 22 bp, same bond, same price. The first question about any OAS is "at what σ, on what curve, with what call schedule?", and an OAS quoted without those three is decoration.
  3. Believing a Z-spread on a callable, or signing the option cost backwards. A Z-spread discounts cash flows the bond will not pay in exactly the states where it matters; it is not "approximately the OAS" but the OAS plus the option cost, here 18.50 bp of a 74.70 bp spread, a quarter of the apparent compensation. And Z − OAS is positive for a callable (you sold an option) and negative for a putable (you own one); check the sign before the magnitude, because a sign error means the framework was not understood at all.
  4. Treating yield-to-worst as a risk measure. YTW is a disclosure, not a model: it assumes one deterministic exercise path and ignores volatility. At 99.50 this module's bond shows YTW = YTM (5.643%) and the call looks irrelevant; at 105.00 the same bond's YTW collapses to 0.476%. Use YTW as a quick floor and OAS as the valuation.
  5. Assuming the prepayment option is exercised optimally. It is not, borrowers refinance late, refinance for non-rate reasons, and a pool that has survived a refi wave contains slower survivors (burnout). That is why MBS cannot be priced by a pure optimal-exercise lattice and why every MBS duration is a behavioural forecast. State the model and the speed alongside every MBS risk number.
  6. Confusing tranching with risk reduction. Tranching redistributes loss; it does not destroy it. The senior is safer than the pool because the junior is riskier, and fees make the total slightly worse. Always ask who holds the first-loss piece and whether they are paid enough to keep holding it in a bad year.
  7. Ignoring the triggers. Worked Example 7 shows identical collateral and identical losses producing a fully-repaid senior with the excess-spread trap on, and a senior written down 5.17% with it off, while ₹43 crore of excess walked out to the originator. Read the trigger definitions before the tranche sizes: a trigger that traps cash early is worth more than several points of subordination, and one set too loose is worth nothing.
  8. Quoting an implied default probability without its recovery assumption. At a fixed 210 bp spread, the implied five-year cumulative default probability is 12.30% at 20% recovery and 23.09% at 60%. The spread pins down λ × LGD, not λ. Quote the pair, and treat any single-number "the market is pricing X% default risk" headline as unfinished.
  9. Reading the CDS spread curve as the hazard curve, or a bond spread as a CDS spread. A 150 bp three-year and a 210 bp five-year imply a forward hazard of 5.32% for years 4–5 against 2.50% for years 1–3, spreads are averages, hazard rates are marginals, the FI1.03 spot-versus-forward distinction in credit clothing. And bond spreads carry a liquidity premium and funding costs that CDS spreads largely do not (the CDS-bond basis), so in a market as illiquid as India's the bond-implied hazard is biased high. Name the bias.
  10. Letting the OAS float when computing effective duration. Shift the benchmark curve, recalibrate, revalue at constant OAS. Let OAS re-solve to the market price at each shift and you will compute approximately zero, you have just asked how much the price changes when you force it not to change.

The thread through all ten: an expert treats every output as the joint product of a market price and a model, and never forgets which part is which. The market gave you the price. The OAS, the duration, the convexity, the default probability, you manufactured those, from assumptions you chose. Make them explicit, test the model against the constraints it must satisfy, and quote the number with its provenance attached.


Worked examples

Every figure in these examples was recomputed in Python before it was written down (R3). Entities are explicitly synthetic; curves are illustrative but internally consistent and arbitrage-free.

Worked example 1: Calibrating the tree (US, $)

You are given a benchmark par curve of 4.00%, 4.40%, 4.70%, 4.90% for maturities 1 to 4 years (annual coupons, annual compounding) and an assumed interest-rate volatility of σ = 15%. Build the arbitrage-free binomial tree.

Solution. Step 1, bootstrap the spot curve, for the later cross-check. z₁ = 4.000000%, z₂ = 4.408835%, z₃ = 4.720729%, z₄ = 4.931584%; implied one-year forwards 4.000000%, 4.819277%, 5.347315%, 5.566699%.

Step 2: t = 0. r[0,0] = 4.000000%, since (100 + 4)/(1 + r) = 100.

Step 3: t = 1. Search for r[1,0] with r[1,1] = r[1,0] × e^(2×0.15) = r[1,0] × 1.349859 such that the two-year par bond (coupon 4.40) rolls back to exactly 100: r[1,0] = 4.105948%, r[1,1] = 5.542449%.

Step 4: t = 2. Holding steps 0–1 fixed, solve so the three-year par bond (coupon 4.70) prices at 100: r[2,0] = 3.886374%, r[2,1] = 5.246057%, r[2,2] = 7.081436%.

Step 5: t = 3. Same with the four-year par bond (coupon 4.90): 3.455822%, 4.664871%, 6.296917%, 8.499949%. The completed tree:

ti = 0i = 1i = 2i = 3
04.000000%
14.105948%5.542449%
23.886374%5.246057%7.081436%
33.455822%4.664871%6.296917%8.499949%

Step 6: verify three ways. Spacing: 4.664871 / 3.455822 = 1.349859 = e^0.30, on every row. Calibration: each of the four par bonds, rolled back through the tree it built, returns 100.000000000. Arbitrage-free: a straight 5.50% four-year note prices at 102.144691360 on the tree and 102.144691360 off the bootstrapped spot curve, a difference of 2 × 10⁻¹³.

Read it. The tree is not a forecast and the 50/50 probabilities are not a view; it is a representation of the observed curve extended into a second dimension by an assumed volatility. Everything valued on it inherits the curve exactly and inherits σ as an assumption. If the calibration check fails, nothing else in this module can be run.

Worked example 2: A callable bond, node by node (US, $)

Summit Ridge Industries Inc. (synthetic) issues a four-year, 5.50% annual-coupon note, face 100, callable at par annually from the end of year 1 (an "NC1" structure). Value it on the tree from Worked Example 1, and identify which nodes exercise.

Solution. Step 1, the straight bond first, as a control. Rolling back with no exercise test:

Nodet = 1t = 2t = 3
i = 0102.853135102.888278101.975895
i = 198.607823100.264184100.797907
i = 296.88204099.250291
i = 397.235068

giving V₀ = 102.144691. Check one by hand: at (3,0), both children are 100, so V = (100 + 5.50)/1.03455822 = 105.50/1.03455822 = 101.975895. ✓

Step 2, roll back the callable, applying min(raw, 100) at every call date. At t = 3:

Noderateraw valuecall testcallable value
(3,0)3.455822%101.975895> 100100.000000: CALLED
(3,1)4.664871%100.797907> 100100.000000: CALLED
(3,2)6.296917%99.250291< 10099.250291
(3,3)8.499949%97.235068< 10097.235068

At t = 2, using the post-call t = 3 values:

Noderatearithmeticrawcallable value
(2,0)3.886374%0.5 × (105.500000 + 105.500000) / 1.03886374101.553260100.000000: CALLED
(2,1)5.246057%0.5 × (105.500000 + 104.750291) / 1.0524605799.88511699.885116
(2,2)7.081436%0.5 × (104.750291 + 102.735068) / 1.0708143696.88204096.882040

At t = 1:

Noderatearithmeticrawcallable value
(1,0)4.105948%0.5 × (105.500000 + 105.385116) / 1.04105948101.283894100.000000: CALLED
(1,1)5.542449%0.5 × (105.385116 + 102.382040) / 1.0554244998.42824398.428243

At t = 0 (no call at issue): V = 0.5 × (105.500000 + 103.928243) / 1.04 = 104.714122 / 1.04 = 100.686655.

Step 3, read the option value off the identity. Call option value = straight − callable = 102.144691 − 100.686655 = 1.458036 points. On $100m of face that is $1.46m of value handed to the issuer.

Step 4, the putable twin, for contrast. Applying max(raw, 100) instead gives 103.018204, so the put is worth 103.018204 − 102.144691 = 0.873512. Both identities close exactly: 102.144691 − 1.458036 = 100.686655 and 102.144691 + 0.873512 = 103.018204.

Read it. Four of the nine decision nodes exercise, and they are precisely the low-rate ones, the call is a rally-killer by construction. The sharpest lesson is at (2,1), where the bond is not called and yet the callable value (99.885116) sits below the straight value (100.264184): the gap exists because the continuation value already embeds the certainty of a call at (3,0) and (3,1). The option's shadow reaches back through nodes where it is never exercised, which is why a yield measure assuming a single exercise path cannot capture it, and why you need the tree.

Worked example 3: Nominal spread, Z-spread and OAS on the same bond (US, $)

The Summit Ridge note from Worked Example 2 trades at a market price of 99.50. Compute the nominal, Z and option-adjusted spreads and the option cost.

Solution. Step 1: yield measures. YTM = 5.643118%; yields to each call date 6.030151% (t = 1), 5.771847% (t = 2), 5.685969% (t = 3); yield-to-worst = 5.643118%, i.e. the YTM, at a discount price, early redemption at par is good for the holder. (Reprice at 105.00 and it inverts: YTM 4.1187%, YTC to the t = 1 call 0.4762%, so YTW collapses to 0.48%. Same bond, same schedule, opposite conclusion, which is why YTW is a disclosure, not a model.)

Step 2: nominal spread. 5.643118% − 4.90% = 74.31 bp.

Step 3: Z-spread. Solve for the constant z added to every spot rate with Σ 5.50/(1 + zₜ + z)ᵗ + 100/(1 + z₄ + z)⁴ = 99.50: 74.70 bp. It sits close to the nominal spread because the curve is gently sloped; on a steep or humped curve the gap opens up.

Step 4: OAS. Solve for the constant spread added to every node rate, with the call test running, so the model price equals 99.50: 56.20 bp. Verification: adding 0.561997% to every tree rate and re-rolling returns exactly 99.500000.

Step 5: option cost. 74.70 − 56.20 = 18.50 bp. Of the 74.70 bp of apparent compensation, 18.50 bp is not compensation at all, it is the price of the call you wrote. Only 56.20 bp is left for credit and liquidity.

Step 6, the putable comparison. At the same 99.50 price, a putable structure would show OAS 203.02 bp and option cost −128.32 bp.

Read it. The ladder: nominal 74.31 → Z 74.70 → OAS 56.20. Nominal ignores curve shape; Z ignores the option; OAS removes both, and is the only one you can set beside a bullet's Z-spread and compare honestly.

Worked example 4: The mirror in rupees: an investor-putable NBFC bond (India, ₹)

Deccan Housing Finance Ltd (synthetic) has a three-year, 8.00% annual-coupon bond, face ₹100, carrying an investor put at par at the end of year 2, the commonest embedded option in the Indian corporate bond market. It trades at ₹100.40. The benchmark G-Sec par curve is 6.55% / 6.75% / 6.90% and the assumed volatility is σ = 15%.

Solution. Step 1: calibrate the benchmark tree. Bootstrapped G-Sec spots: 6.550000%, 6.756763%, 6.915240%. Calibrating exactly as in Worked Example 1:

ti = 0i = 1i = 2
06.550000%
15.935681%8.012331%
25.262982%7.104283%9.589779%

All three G-Sec par bonds reprice to 100.000000000 on this tree. ✓

Step 2, the spreads. YTM at ₹100.40 = 7.845220%. Z-spread over the G-Sec spot curve = 94.75 bp. Solving for the constant spread added to every node rate with the put test max(raw, 100) running gives OAS = 120.20 bp; re-rolling at that spread returns exactly 100.400000 ✓. Option cost = 94.75 − 120.20 = −25.44 bp.

Step 3, the node walk (rates shown include the OAS).

Noderate + OASstraightrawputable
(2,2)10.791744%97.48018897.480188100.000000: PUT
(2,1)8.306248%99.71723999.717239100.000000: PUT
(2,0)6.464947%101.441839101.441839101.441839
(1,1)9.214296%97.60509198.88815298.888152
(1,0)7.137646%101.345832101.477794101.477794
(0,0)7.751965%99.743389100.400000100.400000

Hand-check (2,2): 108 / 1.10791744 = 97.480188, below the ₹100 strike, so the holder puts. Hand-check (1,1): both children were put to 100, so 0.5 × (108.000000 + 108.000000) / 1.09214296 = 98.888152.

Step 4, the contrast that isolates ownership. Value the identical bond as issuer-callable at par at t = 2 instead, at the same market price, and the OAS falls to 77.29 bp with an option cost of +17.46 bp. Same coupon, same maturity, same price, same tree, and a 43 bp swing in the spread you are genuinely earning, purely from who holds the option.

Read it. Two of the three t = 2 nodes exercise, and they are the high-rate ones, the exact mirror of Worked Example 2, where the low-rate nodes were called. The put pays in precisely the states where the call hurt you. Hence the negative option cost: the 94.75 bp Z-spread understates what this bond compensates you for credit and liquidity, because part of your yield give-up is buying protection rather than accepting risk. In India this matters more than the arithmetic suggests, because put-and-call structures are the market norm rather than the exception, and a screen that ranks Indian corporate bonds on Z-spread is systematically mis-ranking them.

Worked example 5: Negative convexity, proven with numbers (US, $)

Hold the OAS constant at 56.20 bp, shift the benchmark curve, recalibrate the tree at each shift, and revalue. Prove that the callable is negatively convex and quantify the cost.

Solution. Step 1, the Greeks at ±100 bp.

InstrumentV₋ (−100 bp)V₀V₊ (+100 bp)Effective durationEffective convexity
Straight103.7613100.146296.69493.528+16.4
Callable101.728099.500096.59972.577−67.6
Putable104.2014101.6914100.08412.024+88.8

Work one by hand: callable effective duration = (101.7280 − 96.5997) / (2 × 99.5000 × 0.01) = 5.1283 / 1.99 = 2.577. Effective convexity = (96.5997 + 101.7280 − 2 × 99.5000) / (99.5000 × 0.01²) = (−0.6723) / 0.00995 = −67.6.

Step 2, the price ladder, which needs no formula. The callable's price gain per 50 bp step as rates fall from +200 to −200 bp: 1.597, 1.625, 1.548, 1.352, 1.166, 1.062, 0.638, 0.499: shrinking. The straight bond's over the same range: 1.629, 1.667, 1.706, 1.746, 1.787, 1.829, 1.872, 1.917: growing. That contrast is negative versus positive convexity, visible without a second derivative.

Step 3: up/down capture. On a 100 bp move the callable gains +2.239% and loses −2.915%, against the straight bond's +3.610% and −3.446%. Capture is computed on price change rather than on percentage return: 2.2280/3.6151 = 61.6% of the upside and 2.9003/3.4513 = 84.0% of the downside. Dividing the quoted percentages instead gives 62.0% and 84.6%, because the two instruments start from different price bases (99.50 against 100.15), and mixing the two routes is how a capture table stops tying out. The putable mirrors it: 69.4% up, 46.6% down.

Step 4, what a duration-only risk report gets wrong. Straight bond: duration-only +3.5281%, with convexity +3.6099%, actual +3.6099%. Callable: duration-only +2.5770%, with convexity +2.2392%, actual +2.2392%, a −34 bp correction against the straight bond's +8 bp. A system assuming positive convexity everywhere overstates a callable book's rally by about a third of a percent of market value per 100 bp, in the same direction every time.

Step 5, the honest caveat. At ±25 bp this same callable shows +5.1, not −67.6: the exercise boundary is a kink and a small symmetric shock on a four-step annual lattice can straddle it spuriously. Refining fixes the small-shock measure (±25 bp convexity is −127.1 on a 12-step-per-year lattice fitted to the same zero curve) while the ±100 bp measure stays negative at every refinement (−67.6, −76.8, −80.6, −86.4). Always report the shock size.

Read it. Negative convexity is not exotic. It is what happens whenever someone else owns an option on your asset, and it shows up as a checkable asymmetry in a price table. Learn to read the ladder and you never need to trust anyone's convexity number again.

Worked example 6: A US agency pass-through: prepayment, WAL, and where the convexity goes (US, $)

A $500m agency pass-through pool: weighted-average coupon 6.00%, net pass-through rate to investors 5.50% (a 50 bp servicing and guarantee strip), original term 360 months, base speed 165 PSA.

Solution. Step 1: month 1 in full. Opening balance $500,000,000. Gross interest = 500,000,000 × 0.06/12 = $2,500,000. Net interest to investors = 500,000,000 × 0.055/12 = $2,291,667; the difference, $208,333, is the strip (50 bp / 12 on the balance). The level monthly payment on a 360-month, 6.00% loan gives scheduled principal of $497,753. Speed: 165 PSA in month 1 is CPR = 6% × (1/30) × 1.65 = 0.3300%, so SMM = 1 − (1 − 0.0033)^(1/12) = 0.027542%. Prepayment = (500,000,000 − 497,753) × 0.00027542 = $137,571. Total principal = 497,753 + 137,571 = $635,324; investor cash flow = 2,291,667 + 635,324 = $2,926,991; closing balance $499,364,676.

Step 2, months 2 and 3, as the ramp bites. Month 2: CPR 0.6600%, SMM 0.055167%, prepayment $275,209, total principal $775,313, cash flow $3,064,067. Month 3: CPR 0.9900%, SMM 0.082877%, prepayment $412,798, total principal $915,125, cash flow $3,200,326. The scheduled component barely moves (497,753 → 500,104 → 502,327); the prepayment component triples.

Step 3: WAL across speeds. Over the full 360 months: 50 PSA → 14.53 yrs; 100 PSA → 11.36 yrs; 165 PSA → 8.68 yrs; 250 PSA → 6.56 yrs; 400 PSA → 4.60 yrs; 600 PSA → 3.36 yrs. Principal returned is $500,000,000 in every case, only the timing moves.

Step 4: isolate the option. Price the pool at a 5.75% base discount rate, first letting the speed respond to rates, then freezing it:

ShiftAssumed speedDiscount ratePriceWAL
−100 bp400 PSA4.7500%102.93984.60y
−50 bp260 PSA5.2500%101.25016.38y
0165 PSA5.7500%98.46078.68y
+50 bp120 PSA6.2500%94.888510.40y
+100 bp90 PSA6.7500%90.925111.90y

With the speed responding: effective duration 6.461, effective convexity −318.0 (plus or minus 50 bp). With the speed frozen at 165 PSA and only the discount rate moving: effective duration 6.175, effective convexity +64.8 (plus or minus 50 bp). Both are computed off the table's inner rows. Recomputing from the outer plus or minus 100 bp rows gives 6.101 and −310.4 instead, which is a real difference rather than rounding, and it is why this module insists on printing the shock size next to every effective measure.

Read it. The same pool at the same rates flips from strongly positive to violently negative convexity when, and only when, the prepayment option is switched on: a clean isolation of cause. Note the WAL column moving the wrong way at every step: rates fall and the asset shortens (contraction); rates rise and it lengthens (extension). You are always holding the wrong duration, and the more the market moves the wronger it is. Hence the substantial OAS MBS trade at over comparable-duration bullets, and hence two dealers quoting different durations for the same pool, because they are quoting their prepayment models, not the bond.

Worked example 7: Tranching a pool: a US CMO and an Indian PTC (US $ and India ₹)

Part A, a sequential-pay CMO (US, $). Collateral: $500m, WAC 6.00%, net coupon to the structure 5.75%, five annual periods, 8% annual CPR on the pool. Three sequential-pay tranches: A $325m @ 4.60%, B $120m @ 5.20%, C $55m @ 5.70% (summing to $500m). Principal goes entirely to A until retired, then entirely to B, then to C; interest is paid on each tranche's outstanding balance; whatever net interest is left over is excess to the residual holder.

Step 1, the collateral.

YrBeginningGross intNet intSched prinPrepayTotal prinEnding
1500,000,00030,000,00028,750,00088,698,20032,904,144121,602,344378,397,656
2378,397,65622,703,85921,757,86586,498,48523,351,934109,850,419268,547,237
3268,547,23716,112,83415,441,46684,353,32214,735,51399,088,836169,458,402
4169,458,40210,167,5049,743,85882,261,3606,975,76389,237,12380,221,278
580,221,2784,813,2774,612,72480,221,278080,221,2780
Sum83,797,47480,305,913422,032,64677,967,354500,000,000

Step 2, the waterfall.

YrA begA intA prinB begB intB prinC begC intC prinExcess
1325,000,00014,950,000121,602,344120,000,0006,240,000055,000,0003,135,00004,425,000
2203,397,6569,356,292109,850,419120,000,0006,240,000055,000,0003,135,00003,026,573
393,547,2374,303,17393,547,237120,000,0006,240,0005,541,59855,000,0003,135,00001,763,293
4000114,458,4025,951,83789,237,12355,000,0003,135,0000657,021
500025,221,2781,311,50625,221,27855,000,0003,135,00055,000,000166,217

(Columns are rounded for display; every total below is computed unrounded, so a column may differ from its printed entries by a cent.)

Step 3, tie out, which is not optional. Principal to tranches = $500,000,000.00 = collateral principal = A + B + C original. Interest to tranches $70,267,808.44 + excess to residual $10,038,104.51 = $80,305,912.95 = net interest collected. Ending balances all zero. Both identities close to the cent.

Step 4: what tranching bought. Weighted-average lives A 1.914, B 4.164, C 5.000 yrs against a collateral WAL of 2.793 yrs: one undifferentiated 2.8-year pool became a money-market-eligible short note, an intermediate and a long bond, sold to three different buyers at three different yields. That is the commercial logic of time tranching.

Step 5, the risk did not vanish. Move the pool's speed and watch the WALs travel:

Pool CPRWAL AWAL BWAL CCollateral
2%2.19y4.40y5.00y3.03y
8%1.91y4.16y5.00y2.79y
20%1.56y3.47y4.83y2.38y
35%1.28y2.70y4.36y1.96y

Tranche A's life moves 0.9 years across the range and B's 1.7 years. Sequential-pay concentrates prepayment uncertainty in the shorter tranches while giving C near-certain timing until speeds get extreme. The buyer of A has bought call risk; the buyer of C has bought extension risk. Nobody made it go away.

Part B, an Indian auto-loan PTC (India, ₹). Vindhya Auto Receivables Trust 2026 Series I (synthetic) acquires a ₹500 crore auto-loan pool yielding 14.00%, with a 1.00% servicing fee. Issued against it: Series A ₹425 crore @ 8.25% (85% of pool) and Series B ₹45 crore @ 11.00% (9%), leaving over-collateralisation of ₹30 crore (6%), plus cash collateral of ₹15 crore (3%) funded by the originator. Scheduled amortisation retires 28%, 39% and 55% of the opening balance in years 1–3 and the remainder in year 4. A cumulative-loss trigger at 4% of the original pool, once breached, traps excess spread and turbos it to Series A instead of releasing it to the originator.

Step 1, size the enhancement before running anything. Credit enhancement available to Series A = OC 6.0% + subordination 9.0% + cash collateral 3.0% = 18.0% of pool, before excess spread. Annual gross excess spread at close = 14.00% − 1.00% − (425 × 8.25% + 45 × 11.00%)/500 = 14.00% − 1.00% − 8.0025% = 4.9975% of pool per year. Against the RBI Securitisation of Standard Assets framework's minimum retention requirement, the originator retains OC ₹30 crore + cash collateral ₹15 crore = ₹45 crore = 9.0% of the pool, comfortably above a 5% MRR.

Step 2, base case: gross losses of 1.0% / 1.2% / 1.5% / 1.0% of the opening pool. (Rows are rounded to two decimals for display; the totals and tie-outs below are computed unrounded, so a column may differ from its printed entries by ₹0.01 crore.)

YrPool begInterestSvcLossesPrin collA intA prinB intB prinCCResidualA endB end
1500.0070.005.005.00140.0035.06140.004.950.0015.0024.99285.0045.00
2355.0049.703.554.26138.4523.51138.454.950.0015.0017.69146.5545.00
3212.2929.722.123.18116.7612.09116.764.950.0015.0010.5629.7945.00
492.3512.930.920.9291.422.4629.794.9545.0015.0021.230.000.00

Cumulative losses ₹13.37 crore (2.67% of pool): below the 4% trigger, so excess spread is released throughout. Both series repaid in full. Cash collateral untouched. Residual to the originator ₹74.46 crore. Tie-outs: sources = interest ₹162.35 + principal ₹486.63 = ₹648.9812 crore; uses = servicing ₹11.60 + A interest ₹73.12 + A principal ₹425.00 + B interest ₹19.80 + B principal ₹45.00 + residual ₹74.46 = ₹648.9812 crore. Loss identity: principal collected 486.63 + losses 13.37 = 500.00. ✓

Step 3, stress case: gross losses of 6% / 11% / 15% / 12%.

YrPool begInterestSvcLossesPrin collA intA prinB intB prinTurboCCResidualA endB end
1500.0070.005.0030.00140.0035.06140.004.950.0024.9915.000.00260.0145.00
2330.0046.203.3036.30128.7021.45128.704.950.0016.5015.000.00114.8145.00
3165.0023.101.6524.7590.759.4790.754.950.007.0315.000.0017.0445.00
449.506.930.495.9443.561.4117.044.9526.520.0815.000.000.0018.40

Cumulative losses ₹96.99 crore = 19.40% of the pool. The trigger breaches in year 1 (₹30 crore > 4% × ₹500 crore = ₹20 crore), so from then on ₹48.59 crore of excess spread is trapped and turboed into the notes (₹48.51 crore of it to Series A, ₹0.08 crore to Series B once A is retired) rather than released. Outcome: Series A repaid in full: interest ₹67.39 crore, and principal of ₹376.49 crore through the principal waterfall plus ₹48.51 crore of trapped excess spread = ₹425.00 crore, zero writedown. Series B receives ₹26.60 crore (₹26.52 crore of principal collections plus ₹0.08 crore of trapped spread) against its ₹45 crore, a writedown of ₹18.40 crore, or 40.89% of the tranche. On principal collections alone the writedown would be ₹18.48 crore, or 41.07%; the ₹0.08 crore of year-4 turbo is what separates the two figures. Sources ₹549.24 crore = uses ₹549.24 crore; principal collected ₹403.01 + losses ₹96.99 = ₹500.00. ✓

Step 4, the counterfactual that teaches the lesson. Run the identical loss vector with the trigger switched off, so excess spread is released to the originator every period:

With triggerWithout trigger
Cumulative losses₹96.99 cr (19.40%)₹96.99 cr (19.40%)
Excess released to originator₹0.00 cr₹43.03 cr
Series A unpaid₹0.00 cr (0.00%)₹21.99 cr (5.17%)
Series B unpaid₹18.40 cr (40.88%)₹45.00 cr (100.00%)

Read it. Same collateral, same losses, same tranche sizes, same cash collateral, and the senior noteholder is either whole or down 5.17%, purely because of a clause about when cash stops leaving the deal. Trapping excess spread early is worth more to the senior tranche than several points of subordination, because subordination is a stock that sits there while excess spread is a flow that walks out every period unless something stops it. The practical instruction: read the trigger definitions and thresholds before the tranche sizes, and satisfy yourself the trigger breaches in a realistic bad case rather than only an apocalyptic one. Note too the correctly-ordered absorption (OC ₹30 crore first, then Series B's ₹45 crore, Series A only after both) and that the cash collateral was never drawn in either scenario because it sits below excess spread in the defence order.

Worked example 8: A CDS priced from hazard rates, and a credit curve bootstrapped (US $, with an India ₹ tail)

Northline Communications Inc. (synthetic), five-year CDS, $10m notional, annual premium payments, flat risk-free rate 4.00% continuously compounded, assumed recovery 40% (LGD 60%), assumed flat hazard rate λ = 2.50%.

Solution. Step 1: survival and default probabilities. S(t) = e^(−0.025t):

tD(t) = e^(−0.04t)S(t)Marginal default S(t−1) − S(t)
10.9607890.9753100.024690
20.9231160.9512290.024080
30.8869200.9277430.023486
40.8521440.9048370.022906
50.8187310.8824970.022341

Cumulative five-year default probability = 1 − S(5) = 11.750310%. Note the marginals decline (2.469% → 2.234%) even though the hazard rate is constant, fewer survivors remain to default each year.

Step 2, build the two legs term by term.

tPremium D×SAccrual 0.5×D×ΔPProtection LGD×D×ΔP
10.9370670.0118610.014233
20.8780950.0111150.013337
30.8228350.0104150.012498
40.7710520.0097600.011712
50.7225270.0091450.010975
Total4.1315760.0522960.062755

The premium leg totals 4.131576 + 0.052296 = RPV01 = 4.183872; the protection leg totals 0.062755.

Step 3, the par spread. s* = 0.062755 / 4.183872 = 1.499922% = 149.99 bp. E11.01's credit triangle, λ × LGD = 2.50% × 60% = 150.00 bp, is off by one hundredth of a basis point here.

Step 4: convert to an upfront. At the ISDA-standard 100 bp coupon: upfront = (149.99 − 100.00) bp × 4.183872 × $10,000,000 = $209,161 paid by the protection buyer: 2.0916 points, a quoted price of 97.9084, plus $100,000 a year running. At a 500 bp standard coupon the upfront would be −$1,464,388: the seller pays, because the buyer over-pays on the running leg.

Step 5: invert a market quote. A five-year spread of 210 bp at 40% recovery implies λ = 3.500357% (triangle: 210/0.60 = 3.5000%) and a five-year cumulative default probability of 16.0558%.

Step 6: bootstrap a two-point credit curve. From a three-year quote of 150 bp and a five-year of 210 bp: λ(0–3y) = 2.500130%, then holding that fixed, λ(3–5y) = 5.316423%. S(3) = 0.927740, S(5) = 0.834158, so the probability of defaulting in years 4–5 given survival to year 3 is 10.0871%. Reprice check: the bootstrapped curve returns par spreads of exactly 150.00 bp and 210.00 bp. ✓

Step 7: mark an existing position. Protection bought at 150 bp, market now 210 bp, RPV01 on the new curve 4.086549: MTM gain = 60 bp × 4.086549 = 2.4519% of notional = $245,193 on $10m.

Step 8, the recovery problem, which is the real lesson. Hold the five-year spread at 210 bp and vary recovery:

RecoveryImplied λImplied 5y cumulative default probability
20%2.6252%12.30%
30%3.0002%13.93%
40%3.5004%16.06%
50%4.2006%18.94%
60%5.2512%23.09%

The spread pins down the product λ × LGD, not λ. Reporting "the market prices a 16% chance of default" without adding "assuming 40% recovery" is reporting one of five different numbers and hoping.

Step 9, the India tail (₹). India's single-name CDS market is thin, so an Indian analyst runs this backwards: take Deccan Housing Finance Ltd (synthetic)'s bond spread of 210 bp over the G-Sec curve and infer the hazard rate directly. At a 6.90% INR discount rate: recovery 35% → λ = 3.2311%, five-year cumulative default 14.92%, five-year expected loss on ₹100 crore = ₹9.70 crore; recovery 45% → λ = 3.8186%, 17.38%, ₹9.56 crore; recovery 55% → λ = 4.6675%, 20.81%, ₹9.37 crore. Notice that the expected loss is nearly invariant (₹9.4–9.7 crore) while the default probability nearly doubles, the spread is telling you about expected loss, and any decomposition of it into probability and severity is your assumption, not the market's information. And flag the bias: a bond spread carries a liquidity premium that a CDS spread largely does not, so an Indian bond-implied hazard rate is biased high relative to a true default-intensity estimate. Say so when you report it.

Read it. A CDS spread is not a number about a company; it is a number about λ × LGD under a risk-neutral measure, discounted along a survival-weighted annuity. Everything an analyst wants to say about it (implied default probability, cheapness versus a bond, the shape of the forward hazard curve) requires assumptions you supply. Supply them out loud.

Worked example 9: Pathwise valuation, and where it stops working (US, $)

Take the tree from Worked Example 1 and a three-year, 5.50% annual-coupon note, face 100. Value it by enumerating every path, prove the answer equals backward induction, then repeat with the note callable at par at the end of year 1 only and measure what the pathwise route gets wrong.

Solution. Step 1, enumerate the paths. Three one-year discount steps use r[0,0], then r[1,i], then r[2,i], so the path is fixed by two branchings and there are exactly four, each with probability 1/4.

Pathr(0→1)r(1→2)r(2→3)DF to yr 1DF to yr 2DF to yr 3
DD4.000000%4.105948%3.886374%0.9615380.9236150.889063
DU4.000000%4.105948%5.246057%0.9615380.9236150.877577
UD4.000000%5.542449%5.246057%0.9615380.9110440.865633
UU4.000000%5.542449%7.081436%0.9615380.9110440.850796

Step 2, value the straight note path by path. Each path value is 5.50 × DF₁ + 5.50 × DF₂ + 105.50 × DF₃, giving 104.164491, 102.952730, 101.623456 and 100.058156. The average of the four is 102.199708126.

Step 3, prove it against backward induction. Roll the same note back through the lattice with no exercise test and the value at the root is 102.199708126, identical to nine decimals. Run the same pair on the three-year par bond (4.70% coupon) and both routes return 100.000000, the calibration the tree was built to satisfy. The pathwise figure lands at 99.999999811 when computed from the six-decimal rates printed in the table rather than from the full-precision tree, which is a rounding artefact worth naming rather than a discrepancy.

Step 4, now add the call and watch the equality fail. Make the note callable at par at the end of year 1 only. Backward induction first: the ex-coupon values at t = 1 are 102.200955 in the down state and 99.374438 in the up state, so the call bites in the down state only, giving 100.000000 and 99.374438 after the test, and a root value of 101.141557.

The pathwise route now needs an exercise rule, and the tempting one is to look along each whole path and let the issuer take whichever outcome costs less:

PathHold to maturityRedeem at t = 1Issuer takes
DD104.164491101.442308101.442308
DU102.952730101.442308101.442308
UD101.623456101.442308101.442308
UU100.058156101.442308100.058156

The average is 101.096270, which is 0.045287 points below the backward-induction value, about 4.5 basis points of price.

Read it. The first three steps show that a lattice value is an expected discounted cash flow over paths; backward induction is the efficient way to compute that average, not a different quantity. Step 4 shows what the efficiency is protecting. The pathwise rule let the issuer see the whole path before choosing, and perfect foresight makes any option worth more to its owner, so the bond is worth correspondingly less to the holder and the error signs the same way every time. The real test compares the call price against a continuation value, which is an expectation over the sub-tree and simply does not exist along a single path. What this does not say: pathwise valuation is not a broken technique. It is the only technique available once cash flows depend on the path taken, which is the mortgage case, and there the fix is to sample paths and handle exercise with a rule estimated from the simulation rather than assumed. That build belongs to the quant-code track.


Practice set

Work each problem fully before reading its solution (write before you peek). A calculator is assumed; answers within about ±2% score as correct unless stated otherwise. All entities are synthetic; all curves are illustrative but internally consistent.

P1 (guided). The two decompositions. A four-year straight bond is worth 102.1447. The otherwise-identical callable is worth 100.6867 and the otherwise-identical putable is worth 103.0182. State the value of each embedded option, say who owns it, and say in one sentence why the callable must be worth less than the straight bond.

Solution. Call value = 102.1447 − 100.6867 = 1.4580, owned by the issuer. Put value = 103.0182 − 102.1447 = 0.8735, owned by the holder. The callable must be worth less because the holder has sold a right: in every state where the bond becomes valuable enough to call, the issuer takes it back at the call price, so the upside is truncated while the downside is unchanged. callable = straight − call; putable = straight + put.

P2 (guided). Calibrate a two-step tree. Par yields are 5.00% (1y) and 5.50% (2y), annual coupons; σ = 20%. Find r[0,0], r[1,0] and r[1,1], and verify the calibration.

Solution. r[0,0] = 5.000000% (the one-year par bond forces it). Then solve for r[1,0] with r[1,1] = r[1,0] × e^(2×0.20) = r[1,0] × 1.491825, such that the two-year 5.50% par bond rolls back to 100. The answer is r[1,0] = 4.850717%, r[1,1] = 7.236420%. Verify: the ratio 7.236420/4.850717 = 1.491825 = e^0.4 ✓, and the two-year par bond prices at 100.000000000 on the tree ✓. Bootstrapped spots for the cross-check: z₁ = 5.000000%, z₂ = 5.513818%.

P3 (guided). Value a callable on that tree. On the P2 tree, value a two-year 6.00% annual-coupon bond, (a) straight, (b) callable at 100 at t = 1, (c) putable at 100 at t = 1. Show the t = 1 node values.

Solution. At t = 1 the bond has one cash flow left, 106. Up node: 106/1.07236420 = 98.847015. Down node: 106/1.04850717 = 101.096113. (a) Straight: V₀ = 0.5 × (98.847015 + 6 + 101.096113 + 6)/1.05 = 105.971564/1.05 = 100.925299, which equals the spot-curve PV of 6/1.05 + 106/1.05513818² = 100.925299 ✓ (the arbitrage-free check). (b) Callable: apply min(·, 100) at t = 1, the up node stays at 98.847015, the down node is capped to 100.000000. V₀ = 0.5 × (104.847015 + 106.000000)/1.05 = 105.423508/1.05 = 100.403340; option value = 100.925299 − 100.403340 = 0.521959. (c) Putable: apply max(·, 100), the up node rises to 100.000000, the down node stays. V₀ = 101.474340; put value = 0.549041.

P4. Effective duration and convexity by hand. A bond is worth 100.00. Shift the curve ±25 bp, recalibrate, revalue at constant OAS: V₋ = 101.90, V₊ = 98.20. Compute effective duration and effective convexity, then estimate the price change for a 100 bp rally using both.

Solution. EffDur = (101.90 − 98.20)/(2 × 100.00 × 0.0025) = 3.70/0.50 = 7.40. EffCvx = (98.20 + 101.90 − 200.00)/(100.00 × 0.0025²) = 0.10/0.000625 = +160.0. For a 100 bp rally: duration-only = 7.40 × 0.01 = +7.40%; with convexity = 7.40% + 0.5 × 160 × 0.01² = 7.40% + 0.80% = +8.20%. Positive convexity, so the convexity term adds to the rally.

P5. Negative convexity from a price triple. A callable is worth 100.00. At ±50 bp shifts at constant OAS, V₋ = 100.90 and V₊ = 98.60. Compute effective duration and effective convexity and interpret the sign.

Solution. EffDur = (100.90 − 98.60)/(2 × 100.00 × 0.005) = 2.30/1.00 = 2.30. EffCvx = (98.60 + 100.90 − 200.00)/(100.00 × 0.005²) = (−0.50)/0.0025 = −200.0. Negative convexity: the bond gains only 0.90 in a 50 bp rally but loses 1.40 in a 50 bp sell-off. The issuer's call is truncating the upside, so a duration-only estimate will overstate rally performance and understate sell-off losses. Note also that you should report the shock size (±50 bp) alongside the number.

P6. The three spreads and the option cost. Bond X is callable and shows a Z-spread of 145 bp and an OAS of 88 bp. Bond Y is putable and shows a Z-spread of 145 bp and an OAS of 180 bp. Compute each option cost, explain the signs, and say which bond's Z-spread most overstates the compensation on offer.

Solution. X: 145 − 88 = +57 bp, positive because the issuer owns the call and 57 bp of the apparent spread is the price of the option X's holder wrote. Y: 145 − 180 = −35 bp, negative because the holder owns the put, so charging for it properly raises the credit-and-liquidity spread to 180 bp. X's Z-spread overstates the compensation (only 88 bp is genuine); Y's understates it. An option-free bond shows exactly zero.

P7. CPR, SMM and PSA conversions. (a) Convert CPR 8% to SMM. (b) Convert SMM 1.20% to CPR. (c) What CPR does 250 PSA imply in month 12? (d) What CPR does 100 PSA imply in month 40?

Solution. (a) SMM = 1 − (1 − 0.08)^(1/12) = 0.692438%. (b) CPR = 1 − (1 − 0.012)¹² = 13.4866%. (c) The PSA ramp at month 12 is 6% × 12/30 = 2.40% at 100 PSA, so at 250 PSA it is 2.40% × 2.5 = 6.0000%. (d) Month 40 is past the 30-month ramp, so 100 PSA is flat at 6.0000%.

P8. A pass-through's first month. A $300m pool, WAC 5.40%, net pass-through 5.00%, 360 months, 150 PSA. Compute the month-1 gross interest, scheduled principal, prepayment, total principal, net interest to investors, the servicing strip, and the investor's cash flow.

Solution. Monthly rate 0.45%; level payment = $1,684,592.38. Gross interest = 300,000,000 × 0.0045 = $1,350,000.00. Scheduled principal = 1,684,592.38 − 1,350,000.00 = $334,592.38. Speed: 150 PSA month 1 → CPR = 6% × (1/30) × 1.5 = 0.3000% → SMM = 1 − (1 − 0.003)^(1/12) = 0.025034%. Prepayment = (300,000,000 − 334,592.38) × 0.00025034 = $75,019.56. Total principal = $409,611.94. Net interest = 300,000,000 × 0.05/12 = $1,250,000.00; servicing strip = 1,350,000 − 1,250,000 = $100,000.00 (40 bp / 12 on $300m). Investor cash flow = 1,250,000.00 + 409,611.94 = $1,659,611.94.

P9. One period of a waterfall. A PTC trust holds a ₹200 crore pool. This period it collects ₹28 crore of interest and ₹60 crore of principal, pays a ₹2 crore servicing fee, and has no losses. Series A is ₹170 crore at 8.50%, Series B is ₹20 crore at 12.00%, and there is ₹10 crore of over-collateralisation. Interest is paid from interest collections, principal sequentially from principal collections. Run the waterfall and tie out.

Solution. Servicing ₹2.00 crore off the top leaves ₹26.00 crore of interest. Series A interest = 170 × 8.50% = ₹14.45 crore, leaving ₹11.55 crore. Series B interest = 20 × 12.00% = ₹2.40 crore, leaving ₹9.15 crore of excess spread. Series A principal = min(170, 60) = ₹60.00 crore, so Series A ends at ₹110.00 crore; Series B principal = ₹0.00 (sequential. B receives nothing until A is retired). Tie-out: sources 28 + 60 = ₹88.00 crore; uses 2.00 + 14.45 + 60.00 + 2.40 + 9.15 = ₹88.00 crore ✓.

P10. Loss allocation order. A ₹500 crore pool funds Series A ₹425 crore and Series B ₹45 crore, with ₹30 crore of over-collateralisation and ₹15 crore of cash collateral. Excess spread runs at about 5% of the pool a year. Cumulative losses reach ₹96.99 crore. In what order are the buffers consumed, and who bears the loss?

Solution. Excess spread first (a flow consumed period by period, but only if trapped rather than released), then over-collateralisation ₹30 crore, then Series B ₹45 crore (subordination), then cash collateral where the documents place it, then Series A. With ₹96.99 crore of losses and about ₹48.6 crore of trapped excess spread, the OC and part of Series B absorb the rest: Series A repaid in full; Series B written down ₹18.40 crore (40.88%). Released rather than trapped, that excess would have left Series B wiped out entirely and Series A down ₹21.99 crore (5.17%).

P11. Sequential-pay average lives. A tranche receives ₹60, ₹120, ₹90 and ₹30 crore of principal in years 1–4 against an original balance of ₹300 crore. Compute its weighted-average life and verify the principal ties out.

Solution. WAL = (60 × 1 + 120 × 2 + 90 × 3 + 30 × 4)/300 = (60 + 240 + 270 + 120)/300 = 690/300 = 2.30 years. Principal check: 60 + 120 + 90 + 30 = ₹300 crore = original balance ✓. (If it had not tied, the schedule is wrong, this is the smallest version of the waterfall tie-out discipline.)

P12. Price a CDS from a hazard rate. Flat hazard λ = 3.00%, recovery 30%, risk-free 4.00% continuously compounded, five-year contract with annual premiums and half-period accrual on default. Compute RPV01, the protection leg PV, the par spread, and the five-year cumulative default probability. Then compute the upfront on $20m at a 100 bp standard coupon.

Solution. RPV01 = 4.134826; protection leg PV = 0.086825; par spread = 0.086825/4.134826 = 209.98 bp (the credit triangle λ × LGD = 3.00% × 70% = 210 bp, essentially exact). Five-year cumulative default probability = 1 − e^(−0.03 × 5) = 1 − e^(−0.15) = 13.9292%. Upfront = (209.98 − 100.00) bp × 4.134826 × $20,000,000 = $909,531, paid by the protection buyer.

P13. Invert a market spread. A five-year CDS quotes at 300 bp with an assumed 40% recovery, risk-free 4.00% continuously compounded. Find the implied flat hazard rate, the five-year cumulative default probability, and the implied five-year expected loss as a percentage of notional. Then state what changes if recovery is actually 20%.

Solution. Solving the par-spread equation gives λ = 5.0010% (the triangle 300/60 = 5.00% is nearly exact). Five-year cumulative default probability = 1 − e^(−0.05001 × 5) = 22.12%; expected loss ≈ 22.12% × 60% = 13.27% of notional. At 20% recovery the same 300 bp implies a lower hazard (roughly 300/80 = 3.75%) and a default probability near 17%, but a higher loss given default, the spread constrains λ × LGD, not either factor. Any implied default probability is a joint statement about hazard and recovery and must be quoted with its recovery assumption.

P14. Read a credit curve. Three-year CDS quotes 150 bp and five-year quotes 210 bp, recovery 40%. Bootstrapping gives λ(0–3y) = 2.500130% and λ(3–5y) = 5.316423%. (a) Why is the second hazard rate more than double the first when the spread rose only 60 bp? (b) Compute the conditional probability of default in years 4–5 given survival to year 3. (c) State the analogy to FI1.03.

Solution. (a) Because the five-year spread is an average over five years, while λ(3–5y) is a marginal rate applying only to the back two years. To lift a five-year average from 150 to 210 bp when the first three years are pinned at 2.50%, the last two years must carry a far higher intensity. (b) S(3) = 0.927740, S(5) = 0.834158, so the conditional default probability = 1 − S(5)/S(3) = 1 − 0.834158/0.927740 = 10.0871%. (c) It is exactly the spot-versus-forward relationship of FI1.03 in credit clothing: a gently upward-sloping spot curve implies much steeper forwards, and a gently upward-sloping spread curve implies much steeper forward hazard rates. Reading the spread curve as the hazard curve understates the market's view of the back end.


Applied mini-project

Build the callable, prove the convexity, tranche the pool, price the protection.

Four artefacts, each of which must pass an explicit numerical test before it counts. Use a spreadsheet or Python, but every tie-out must be shown, not asserted. Label invented entities synthetic; trace any real curve to a named primary source (FBIL or CCIL for the INR G-Sec valuation curve; the US Treasury par yield curve for USD) with the date recorded.

Artefact 1, a calibrated tree and an OAS (2 tests). Choose a benchmark par curve of at least four annual maturities and a defensible volatility. Calibrate a binomial tree. Pick a callable structure (coupon, maturity, call schedule, lockout) and a market price, and extract OAS, Z-spread and option cost. Test 1: every calibrating par bond reprices to 100.000000. Test 2: an option-free bond of the same maturity prices identically on the tree and off your bootstrapped spot curve. Report both residuals; if either fails you have no artefact.

Artefact 2, the convexity proof (1 test). Using Artefact 1's bond at constant OAS, produce a price ladder from −200 to +200 bp in 50 bp steps for the callable and its straight twin, and compute effective duration and convexity at ±25, ±50 and ±100 bp with the shock size labelled. Test 3: state the up/down capture ratios on a 100 bp move and confirm the callable captures materially less of the rally than of the sell-off. Explain in one paragraph any sign disagreement between the ±25 and ±100 bp results.

Artefact 3, a tranched deal that ties (3 tests). Build a pool (a US sequential-pay CMO or an Indian PTC with credit enhancement) and at least three claims on it with an explicit waterfall. Run a base and a stress case. Test 4: principal paid to tranches = principal collected. Test 5: interest paid + residual = net interest collected. Test 6: principal collected + cumulative losses = original pool balance. Then run one counterfactual: change a single structural feature (a trigger threshold, a tranche size, the payment order) and report how the senior tranche's outcome changes under the same losses.

Artefact 4, a credit curve (1 test). Take two CDS tenors, or two bond spreads if you are working the Indian market (say so, and name the liquidity bias), and bootstrap a piecewise-constant hazard curve. Test 7: feed the hazards back through the pricer and recover both original quotes to within 0.01 bp. Report the implied cumulative default probability at both tenors under three recovery assumptions, and write two sentences on what that range means for anyone quoting a single "market-implied default probability".

Deliverable. One workbook or notebook plus a two-page memo carrying: the four artefacts' headline numbers; the seven test residuals; a named list of every assumption (volatility, prepayment speed, recovery, day count, compounding); and a closing paragraph on the single assumption your conclusions are most sensitive to, with the sensitivity quantified.

Rubric (20 points; pass at 16 with no zero on any row, this is a crown node, gate ≥ 90%).

#Criterion0123
1Tree calibration (Tests 1–2)fails or absentreprices approximatelyreprices to 1e-6reprices to 1e-9, both tests shown
2OAS / Z / option costmissing or wrong signcomputed, sign rightverified by re-pricing at the OASplus a σ-sensitivity table
3Convexity proof (Test 3)no ladderladder onlyladder + Greeks at one shockthree shock sizes, capture ratios, kink discussed
4Waterfall tie-outs (Tests 4–6)any test failsone test passestwo passall three pass in base and stress
5Structural counterfactualabsentdescribed onlyquantifiedquantified with the mechanism explained
6Credit curve (Test 7)fails to repricereprices one tenorreprices bothplus the three-recovery sensitivity
7Assumptions named and sourcednonepartialcompletecomplete, sourced and dated

Two points for rows 1–6 at the "2" standard, three at the "3" standard; row 7 scored the same way. Any artefact whose test fails scores zero for that row regardless of presentation quality, that rule is the entire pedagogy of this node.


Reading & resources

Everything below is an anchor to verify against and learn from, never a source to quote a number from without tracing it yourself.

The valuation spine:

  • Frank J. Fabozzi (ed.), The Handbook of Fixed Income Securities, the standard desk reference; its chapters on bonds with embedded options, MBS analytics and structured products are the canonical treatment of everything here. [Paid] [Intermediate–Advanced]
  • Frank J. Fabozzi, Bond Markets, Analysis and Strategies, a gentler ramp into binomial valuation, OAS and prepayment measures, with worked lattices. [Paid] [Beginner–Intermediate]
  • CFA Institute Level II Fixed Income. Valuation and Analysis of Bonds with Embedded Options and Credit Default Swaps; the arbitrage-free framework and CDS conventions in exam form. [Paid] [Intermediate]

Structured finance and mortgages:

  • SIFMA's standard prepayment model documentation, the definitive statement of the PSA ramp used here. [Free] [Beginner]
  • Fannie Mae and Freddie Mac issuer disclosure pages, real pool- and CMO-level cash flow disclosures, the best free source of waterfalls to reverse-engineer. [Free] [Intermediate]
  • RBI Master Direction. Securitisation of Standard Assets Directions, 2021 (current version): MRR, MHP, PTC and DA, and the enhancement rules shaping every Indian ABS; the primary source for the India half of this node. [Free] [Intermediate]
  • CRISIL / ICRA / CARE structured-finance criteria and pool performance reports, how Indian agencies size enhancement and monitor pools; the way to calibrate a realistic loss vector by asset class. [Free] [Intermediate–Advanced]

Credit derivatives:

  • ISDA Credit Derivatives Definitions and the "Big Bang" standard-coupon protocol, what a credit event is, how auctions settle, why coupons are standardised. [Free] [Advanced]
  • Dominic O'Kane, Modelling Single-name and Multi-name Credit Derivatives, the reference implementation of hazard bootstrapping, RPV01 and upfront conversion. [Paid] [Advanced]
  • RBI Master Direction (Credit Derivatives, 2022 (current version)) eligible participants, permitted structures, the shape of the Indian CDS market. [Free] [Intermediate]

Primary-source anchors for the data you will actually use:

  • FBIL and CCIL: INR benchmark rates and the G-Sec valuation curve; the India anchor for every curve here. [Free] [Beginner–Advanced]
  • US Treasury daily par yield curve rates, and SEC EDGAR for prospectuses and 424B filings on callable structures. [Free] [Beginner–Advanced]
  • SEBI and NSDL/CDSL issuance disclosures, where you read a real Indian call/put schedule rather than assuming one. [Free] [Intermediate]

Do this, not just read: build Worked Example 1's four-step tree in a spreadsheet, solving each calibration step with Goal Seek. Then break it deliberately, set r[2,0] wrong by 10 bp and watch the three-year par bond stop pricing at 100 while the four-year price moves by an amount you did not intend. Ten minutes of watching a miscalibrated tree misprice things you already know will teach you more about model risk than any chapter.


Teach it back & journal

Feynman prompt. Explain to a colleague who prices only bullet bonds why a callable yielding 74 bp over the curve is not actually paying them 74 bp, using the sentence "a Z-spread discounts cash flows the bond will not pay in exactly the states where it matters." Walk them through the single node where the raw value came out at 101.55 and the call test knocked it to 100.00, and make them say out loud why the issuer does that. Then show them the price ladder and have them read the callable column's step sizes from the bottom up until they notice the gains shrinking, and name what they found. If your colleague afterwards asks, unprompted, "at what volatility?" the next time anyone quotes them an OAS, you have installed the mechanism.

Then the structured half: explain why two tranches of the same deal, with the same collateral and the same losses, end up one whole and one down 41%, and why the clause that decided it was a trigger, not a tranche size. Have them state the three tie-outs from memory before they may look at any tranche table.

Journal prompt. For one week, every time you meet a spread (in a research note, term sheet, pitch or rating report) write down three things before using it: what kind of spread it is (nominal, Z, OAS, CDS par spread, bond spread over a sovereign curve), what model produced it, and what assumption it is most sensitive to. Then answer in writing: how many came with their model attached? How many OAS figures named a volatility? How many implied default probabilities named a recovery rate? Where you could not find the assumption, what did you do, and what should you have done?

Then write a paragraph on this. These instruments are where the program's process-over-P&L philosophy meets its hardest test, because here the process is the product: the number is not discovered, it is manufactured, and its quality is exactly the quality of the checks you ran. Which of the four habits from §4.10 (tree reprices the curve, waterfall sums, credit curve reprices its own quotes, every assumption named) are you most likely to skip when you are in a hurry? Write down what specifically will go wrong when you skip it, and what you will put in place this month to make skipping harder than doing.


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 90% to pass it, and the next module opens when you do.