Skip to content
All library documents

Callable Bond Valuation with Backward Induction

Article Quant Q&A · Author: Owe Jessen

Summary

The discussion corrects a proposed callable-bond valuation method that estimates call probabilities by comparing simulated yields with the bond coupon and then averages prices across call dates. The response explains that the issuer’s call decision depends on whether the value of continuing the bond exceeds its contractual call price. Yield-to-maturity versus coupon is not the appropriate decision test, and call prices may include a premium over par.

The outlined approach simulates interest-rate scenarios, values the bond along those scenarios, and applies backward induction from maturity toward the present. At each node, the valuation compares the option-free continuation value with the contractual call price; when calling is economically favorable to the issuer, the call value replaces the continuation value. The text recommends discounting at the rate applicable at each step. It names a binomial tree as a way to visualize the recursion, but supplies no complete implementation or calibration details, and its Monte Carlo/tree description is not fully specified.

Key ideas

  • The issuer’s call decision compares the bond’s continuation value with its contractual call price.
  • Comparing simulated yield with the coupon alone does not correctly determine whether a bond will be called.
  • Backward induction values the bond from maturity toward the present across interest-rate scenarios.
  • At each valuation node, use the call value when it is lower than the option-free continuation value to the issuer.
  • Discount cash flows using the rate applicable at each step of the valuation.

Tags

Full text
# Sanity check - How to price callables


# Sanity check - How to price callables












This question is meant as a sanity check whether i got the workflow right for pricing callable bonds. If anyone finds a mistake, or has a suggestion, please answer.

The workflow is:

- For every call date calculate: The probability that the bond is called The plain vanilla price of the bond as if it had a maturity to the call date

- Calculate the weighted average price of the bond with the following code

`

```
# Assume a callable with call dates t = 1...T-1 and normal maturity T
# CallProps - Vec of Probabilities that the bond is called at times t
# FullPrices - Vec of prices of a bond if it had maturity at t, T.
NoCallProps = 1-CallProps
CumNoCallProps = c(1,cumprod(NoCallProps))
WeightedPrice = 0

for(i in 1:length(FullPrices))
{
WeightedPrice = WeightedPrice + CumNoCallProps[i] * (CallProps[i] * FullPrices[i])
}
```

`

The call propabilities are calculated by Monte Carlo:

- take the current yield and simulate rate development between now and the call date with a CIR process (taken from the MATLAB library and adapted to R)

- compare the yield at the call date with the coupon of the bond, and call, if the yield is lower than the coupon

- Calculate the average of the calls for the number of replications.

## Answer by Ram Ahluwalia (score 7, accepted)

https://quant.stackexchange.com/a/3696

You have the right intuition but the approach is not quite right.

The issuer has the right to call back the bond at a pre-defined call price. So your decision criterion is "call when the value of the bond >= contractual call price". We are comparing prices in the decision rule, not the YTM of the callable bond with the coupon of the bond.

Note that typically the call price is above par value (reflecting a call premium).

So you need to value the bond under various interest rate scenarios according to your Monte Carlo simulation. After you simulate your interest rate paths, you will also need to use a recursive backward induction algorithm to value the callable bond at each node in a binomial tree. Take a weighted average of bond prices along each interest rate path to arrive at the value of the bond (first starting at the terminal nodes at maturity then working to back to the present day) remembering to use the discount rate prevailing at that point in time. Also, at any node you assign the call value in lieu of an otherwise option-free bond value wherever the option-free bond value is greater than the callable price (since these are the cases where it is rational for the issuer to call the bond). This is depicted in Node(D,D) below.

This is best visualized by a binomial tree:

Some examples are in the attached paper by Frank Fabozzi.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.