CFA Level II · CFA Level II Exam
The Arbitrage-Free Valuation Framework: formula sheet
Key formulas
- Arbitrage-free bond value (spot rates)
- P = C ÷ (1 + z₁) + C ÷ (1 + z₂)² + ... + (C + FV) ÷ (1 + zₙ)ⁿ
- z_t is the spot rate for maturity t, annual compounding. Each cash flow uses its own spot rate.
- Discount factor from spot rate
- DF_t = 1 ÷ (1 + z_t)ᵗ
- Bond value = Σ (cash flow_t × DF_t). Discount factors let you value any bond on the same curve.
- Bond value using YTM
- P = C ÷ (1 + y) + C ÷ (1 + y)² + ... + (C + FV) ÷ (1 + y)ⁿ
- One rate y for all cash flows. Solve for y given price. It matches the spot-rate price only by construction.
- Arbitrage condition
- Market price ≠ Σ (CF_t × DF_t) → arbitrage exists
- Price below value: buy bond, sell strips. Price above value: buy strips, sell (short) bond.
- Law of one price
- Identical cash flows → identical price
- Applies to the same cash flows in all states, adjusted for no transaction costs or liquidity differences.
- Bond value using spot rates
- PV = CF₁ ÷ (1+z₁) + CF₂ ÷ (1+z₂)² + … + CFₙ ÷ (1+zₙ)ⁿ
- Each cash flow is discounted at the spot rate for its own maturity. Rates are annual effective, with annual cash flows.
- Forward rate from spot rates
- (1+z_(A+B))^(A+B) = (1+z_A)^A × (1+f(A,B))^B
- f(A,B) is the B-year rate starting A years from now. This is the no-arbitrage link between spot and forward rates.
- Solved for the forward rate
- f(A,B) = [ (1+z_(A+B))^(A+B) ÷ (1+z_A)^A ]^(1/B) − 1
- Compute the ratio first, then take the 1/B power. For B = 1, there is no root to take.
- Spot rate from one-year forward rates
- (1+z_T)^T = (1+f(0,1)) × (1+f(1,1)) × … × (1+f(T−1,1))
- f(0,1) equals the 1-year spot rate z₁. The spot rate is the geometric average of the one-period forwards.
- Forward price of a bond
- F(j,k) = P_(j+k) ÷ P_j, where P_t = 1 ÷ (1+z_t)^t
- Price per 1 of face value for a zero-coupon bond. F(j,k) is the forward price at time j of a zero maturing at j+k. Multiply by face value for a price.
- Forward rate model decision rule
- Expected future spot rate < forward rate → expected price > forward price
- Then the bond is expected to be worth more than the forward contract price, so buying is favoured. The reverse holds if the expected spot rate is above the forward rate.
- Lognormal spacing of adjacent nodes
- r_H = r_L × e^(2σ)
- Applies to two adjacent nodes on the same date over a one-year step. σ is annual volatility.
- Any node on a date
- r_i = r_L × e^(2σ × i)
- i = 0 is the lowest node and 1 is the next one up. This lets you get all nodes on a date from the lowest one.
- Number of nodes
- Nodes at time n = n + 1
- The tree recombines, so up-then-down equals down-then-up.
- Backward induction at a node
- V = [0.5 × (V_up + C) + 0.5 × (V_down + C)] ÷ (1 + r)
- V_up and V_down are next-date values before that date's coupon. C is the coupon paid at the next date. r is the node's one-period rate.
- Calibration condition
- Tree value of the par bond = 100
- Use the benchmark coupon equal to the par rate. Adjust the lowest rate on the date until this holds.
- Branch probability
- P(up) = P(down) = 0.5
- These are risk-neutral probabilities. They are fixed, so only the rates change.
- Node value in the tree
- V = [0.5 × (V_up + C) + 0.5 × (V_down + C)] ÷ (1 + r)
- V_up and V_down are next-period values at the up and down nodes. C is the coupon paid at that next date. r is the one-period rate at the current node. Probabilities are 0.5 each.
- Callable bond value
- V_callable = V_straight − V_call
- The investor is short the call, so the call value is subtracted.
- Putable bond value
- V_putable = V_straight + V_put
- The investor is long the put, so the put value is added.
- Embedded option value from bond values
- V_call = V_straight − V_callable; V_put = V_putable − V_straight
- Build the straight-bond tree and the option-bond tree on the same rates, then subtract.
- Exercise rule at a node (callable)
- Value used = min(computed value, call price)
- Apply on call dates, using the value before that date's coupon is added.
- Exercise rule at a node (putable)
- Value used = max(computed value, put price)
- Apply on put dates, using the value before that date's coupon is added.
- Effect of volatility
- Higher volatility: V_call ↑, V_put ↑, V_callable ↓, V_putable ↑
- The straight bond's value is roughly unaffected in a tree calibrated to the same curve.
- Path value
- Path value = Σ [ CFt ÷ ((1 + r0)(1 + r1)...(1 + rt-1)) ], where r0, r1, ... are the one-period rates on that path
- Use only the rates on that path. The rate for each period is the one at the node you are in at the start of that period.
- Pathwise bond value
- Value = (1 ÷ N) × Σ path values, over N equally likely paths
- With equal probabilities this equals the backward-induction value from the same tree. If paths have unequal probabilities, use a probability-weighted average.
- Number of paths in a binomial tree
- Number of paths = 2^(n − 1) for a bond with n annual cash flow dates
- A 3-year bond has rates at dates 0, 1, 2, so 2² = 4 paths.
- Monte Carlo sampling error
- Standard error ∝ 1 ÷ √(number of paths)
- Four times as many paths roughly halves the error. This is a proportionality rule, not an exact figure.
- Option-adjusted spread (OAS)
- OAS is the constant spread added to every rate on every path so that average path value = market price
- If the model value exceeds the market price, the OAS is positive.
- Vasicek model
- dr = a(b − r)dt + σ dz
- Equilibrium, one factor. a = speed of mean reversion, b = long-run mean rate, σ = constant volatility. Rates can turn negative.
- Cox-Ingersoll-Ross (CIR) model
- dr = a(b − r)dt + σ√r dz
- Equilibrium, one factor. Same mean reversion as Vasicek but volatility is σ√r, so it falls when rates are low. Rates do not go negative.
- Ho-Lee model
- dr = θ dt + σ dz
- Arbitrage-free. θ is a time-dependent drift chosen to fit the observed curve. No mean reversion. Constant volatility, so negative rates are possible.
- Kalotay-Williams-Fabozzi (KWF) model
- d ln(r) = θ dt + σ dz
- Arbitrage-free, lognormal version of Ho-Lee. Rates stay positive. No mean reversion.
- Expected change from mean reversion
- Expected change in r ≈ a(b − r) × dt
- Positive if r < b, negative if r > b. This ignores the random shock, whose expected value is zero.
- CIR shock size
- Volatility of rate change = σ√r per √(unit time)
- If r falls to one quarter of its level, the volatility halves.
Quick revision
- Law of one price: assets with identical cash flows must have the same price, or arbitrage exists.
- An arbitrage-free bond value equals the sum of cash flows discounted at the matching spot rates.
- Forward rates are implied by spot rates, and the forward rate model prices bonds by discounting at forward rates.
- A binomial tree is calibrated so that its option-free bond value equals the market price from the curve.
- Work backward through the tree: node value = average of the two next-period values (including coupon) discounted at that node's rate.
- Callable bond: on call dates only, node value = min(computed value, call price).
- Putable bond: on put dates only, node value = max(computed value, put price).
- Call option value = option-free value − callable value; put option value = putable value − option-free value.
- Monte Carlo averages discounted cash flows over many simulated rate paths and is used for path-dependent cash flows.
- Vasicek and CIR are equilibrium models with mean reversion that do not fit the current curve exactly. Vasicek can give negative rates; CIR has volatility that scales with the square root of the rate level, which keeps rates non-negative when the Feller condition holds.
- Ho-Lee is an arbitrage-free model that fits the current curve exactly, with constant volatility and no mean reversion.
- Attempt every question: there is no penalty for wrong answers.
Common mistakes
- Discounting every cash flow at the bond's YTM when asked for the arbitrage-free value. Fix: Whenever a spot curve is given, discount each cash flow at its own spot rate. Use YTM only if told or if the curve is flat.
- Using par rates or forward rates as if they were spot rates. Fix: Read the exhibit heading. Only spot (zero) rates discount a single cash flow directly. Convert par or forward rates first.
- Using the wrong periods, for example using the 4-year and 2-year spot rates but taking a 1/4 root. Fix: The exponent on the long spot is A+B, the exponent on the short spot is A, and the root is 1/B only.
- Finding a forward rate by subtracting spot rates, or averaging them. Fix: Always divide growth factors. The forward rate is a geometric result, not an arithmetic one.
- Using e^σ instead of e^(2σ) for the spacing between adjacent nodes. Fix: Write r_H = r_L × e^(2σ) at the top of your working. The exponent has the factor 2 for adjacent nodes.
- Adding the coupon at the wrong place in backward induction. Fix: Add the next date's coupon to each next-date value before averaging. Then discount by the current node's rate.
- Adding the call option value to the straight bond value for a callable bond. Fix: The issuer holds the call, so the investor's bond is worth less. Callable = straight − call. Putable = straight + put.
- Applying the call price cap to the wrong value, such as after adding that date's coupon. Fix: Compute the node value, apply min or max with the exercise price, then add the coupon when you step back to the previous node. Follow the convention in the vignette if it states one.
- Discounting every cash flow at the same path rate, such as the date 1 rate, for all periods. Fix: Discount each period with its own rate. The date t cash flow uses the product of (1 + rate) for all periods up to t.
- Using the rate from a different path or node when discounting. Fix: Write each path as a sequence of rates first, then discount along that sequence only.
Exam tips
- Check the exhibit label first: spot, par or forward. Many wrong answers come from using the wrong curve.
- Keep discount factors to 5 decimals so rounding does not push you to a wrong option.
- For arbitrage questions, work out value first, then compare. The direction of the trade follows from which side is cheap.
- YTM is the correct rate for each individual cash flow only when the spot curve is flat. Discounting at YTM reproduces the bond's price by construction, but it does not give the right value for each separate cash flow.
- There is no penalty for wrong answers, so answer every question. Move on if a vignette's cash flow table is long, and return later.
- Write the timeline first. Mark A, A+B and the period B. This prevents the most common error, which is mixing up the exponents.
- Keep at least five decimals in growth factors. Rounding early can push your answer onto a wrong option when the options are close.
- If the vignette gives forward rates and asks for a spot rate, multiply the growth factors and take the root. Do not average the forward rates.