Pricing Callable Bonds

Introduction:

Bonds (fixed income) are an important asset class in the market. Bonds are used by market participants for various reasons, to name a few:

a. Trading

b. Risk Management

c. Regulatory requirement for banks

d. Safer investments

e. Asset Liability Management

f. Source of Capital for the firm etc.

Talking of the funding part, companies raise capital in the form of both: equity and debt. These two components define the capital structure of a company. Bonds are comparatively a cheaper way to raise capital, considering the tax shield they provide. Thus, companies may find it cheaper to raise capital at the same time keeping their firm’s total cost of capital (i.e., WACC) under check. Of course, the company needs to balance the potential risk from rising cost of bankruptcy which are a function of the amount of debt capital raised.

In the market, the volume of plain vanilla bonds is the highest. They are the most popular fixed income products used by market participants. However, there are structured bond varieties which may be used by bond Issuers from time to time. An example of this structured variety is a Callable Bond. One can visualize this product as a combination of the below:

Callable Bond = Bond + Issuer Call option

In this post, we will attempt to understand the economic rationale and the structure of the callable bond. Subsequently, we will build a pricing model for a Callable Bond using Python programming.

Rationale for using callable bonds:

Callable bonds provide a flexibility to the issuers that plain vanilla bonds cannot. These bonds carry a Call Schedule which defines the time points and the prices at which the Issuer has the right to call back the bond issue if they deem fit. Naturally, the bond Issuer has to pay for this added flexibility. Callable bonds would have to be issued at a price lower than an equivalent plain vanilla bond (all other things remaining equal) in order for them to be accepted by the market. The reason being, market participants are taking a risk of the bond being called back prior to the pre-defined maturity date, that’s why they would expect these bonds to be available at a price lower than a plain vanilla bond.

Valuation technique:

a. Bond component

Valuation of the bond component is straightforward. Its simply the present value of the discounted cash flows on the bond (periodic interest and principal) to be received in the future.

b. Option component

Valuation of the option component is a bit tricky and as a result interesting! To begin with, we need a model for generating the paths for interest rates. In our model we have used the Hull and White model for interest rates path generation. Once, the rates are simulated, we have used the tree structure for pricing of the option component.

Finally, when we have both the pricing of the aforesaid components ready, we can arrive at the MTM (or pricing) of the Callable Bond by combining the two component MTMs. Below is the implementation of the callable bond pricer using Python programming.

Below are the steps for implementing this algorithm using Python:

  1. Input the bond details. I have used a hypothetical bond for this example. However, all the below inputs can be found in a bond prospectus.

2) Yield Curve input. We have assumed a Flat Yield curve for ease of demonstration. In practical scenarios, you will have to replace it with market quoted yields

3) Defining the Call Schedule for the bond

4) Defining and calling the bond pricing function

The price calculated above is the MTM / present value of the Callable bond and can be used for various purposes including reporting, risk calculations, capital charge etc.

There may be certain bonds which may also have an Investor Put option embedded in them. The above code may be modified a bit to accommodate this requirement easily.

This is one of the approaches to arrive at the pricing for a Callable Bond. We have leveraged the libraries available in Python for achieving our end objective. Doing this the hard way (without using ready libraries for say Hull White), would have taken a considerably longer time to develop this model. But thanks to scripting tools like Python, our activity of building prototype models happens with ease!

--

--

--

Founder: FinQuest Institute | Ekspert Consulting; www.finquestinstitute.com; www.ekspertconsulting.com

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Creating a Plugin for Corridor Ordering on QGIS

State of App Development in 2018

Why the /proc rocks

7 Free Google Certifications For Self-Taught Developers

How to move large-scale React UI-components codebase to TypeScript

Static Libraries

Message to the BossDoge community

Open Source — Company — Programmer (EN)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Ameya Abhyankar

Ameya Abhyankar

Founder: FinQuest Institute | Ekspert Consulting; www.finquestinstitute.com; www.ekspertconsulting.com

More from Medium

An Empirical Article That Wasn’t Immediately Stale

Managing A TSLA Options Butterfly Paid By A Credit Structure by Josip Causic

Revisiting the market efficiency theory after years of learning & trading

CAC 40 french index correlation analysis

CAC40, french index, trading, investing, quant, strategies, financial data, financial indicators, financial analytics, python , api, data