Home > Requirements > Market Data > Yield Curves > Bootstrapping Yield Curve
Report generated 11-04-2023 10:42

Feature: Bootstrapping Yield Curve

Short-term spot rates can be derived directly from various short-term securities, such as zero-coupon bonds, T-bills, notes, and Eurodollar deposits.
However, longer term spot rates are typically derived from the prices of long-term bonds through a process called bootstrapping, taking into account the
spot rates of maturities corresponding to the coupon payment date. After obtaining short-term and long-term spot rates, the yield curve can then be constructed.

Before going into details regarding the bootstrapping algorithm, we should explain the difference between yield curve and spot rate curve.

By definition, the yield curve shows several bond yields to maturity across different bond contract lengths, or times to maturity. Yield to maturity is an overall
discount rate which equalizes principal and coupon payments to the initial investment value, assuming reinvestability of all cash flows.

in contrast to the yield curve, a spot rate curve represents spot rates used to discount individual cash flows of the bond.
Hence, a whole range of different spot rates is typically used when equalizing bond's future cash flows to its present value.

\[ \frac{C}{\left(1 + r\right)^1} + \frac{C}{\left(1 + r\right)^2} + ... + \frac{1+C}{\left(1 + r\right)^n}= 100 \]

given the par value is \(100\) and coupon rate \(C\)

Starting from the annual coupon bond which matures in one year, we will gradually derive all spot rates by forward substitution of the previously calculated ones.

Choice of market instruments to construct the yield curve
There are various ways to construct a market consistent yield curve piecewise construction given a mixture of market instruments (i.e.deposit rates, FRA/Future rates, swap rates).
For example, deposit rates can be used for maturities up to 1 year. Forward Rate Agreements can be used for the construction of the yield curve between 1 and 2 years.
Swap rates can be used for the residual maturities. The final result is a single curve which is consistent with all quotes.

Here is wiki link for more details.

Scenarios

Given the following bond instruments with the trade date 2021-05-06

bond typeface valueinterest periodicitysettlement daysmaturitycoupon rateprice
zero_coupon1000D03M097.5
zero_coupon1000D06M094.9
zero_coupon1000D01Y090.0
fixed_rate1006M01Y6M0.0896.0
fixed_rate1006M02Y0.12101.6

When the bootstrapping method is used to build the zero curve "curveName"

Then the computed zero-coupons by maturity date should be

maturity datezero coupon
2021-08-060.10127123
2021-11-060.10469296
2022-05-060.10536052
2022-11-060.10680926
2023-05-060.10808028

Given the following deposit instruments with the trade date 2021-05-06

instrument namecurrency codesettlement daysmaturityrate
Deposit1DEUR01D0.0440
Deposit1MEUR01M0.0450
Deposit2MEUR02M0.0460
Deposit3MEUR03M0.0470
Deposit6MEUR06M0.0490
Deposit9MEUR09M0.0500
Deposit1YEUR01Y0.0520

When the bootstrapping method is used to build the zero curve "curveName"

Then the computed zero-coupons by maturity date should be

maturity datezero coupon
2021-05-070.04399731
2021-06-060.04641014
2021-07-060.04658535
2021-08-060.0477582
2021-11-060.04947194
2022-02-060.05015582
2022-05-060.0513794

Given the following deposit instruments with the trade date 2021-05-06

instrument namerate
Eonia0.0440
Euribor1M0.0450
Euribor2M0.0460
Euribor3M0.0470
Euribor6M0.0490
Euribor9M0.0500
Euribor1Y0.0520

When the bootstrapping method is used to build the zero curve "curveName"

Then the computed zero-coupons by maturity date with "Actual360" as day count convention and "Simple" compounding should be

maturity datezero coupon
2021-05-070.0440
2021-06-100.0450
2021-07-120.0460
2021-08-100.0470
2021-11-100.0490
2022-02-100.0500
2022-05-100.0520

Given the following swap instruments with the trade date 2021-05-06

currency codematurityrateinterest periodicityfixed_leg.day_count_conventionfloating_leg.index_name
EUR1Y0.0034676MActual360Euribor6M
EUR1Y6M0.0035256MActual360Euribor6M
EUR2Y0.0036416MActual360Euribor6M
EUR3Y0.0037976MActual360Euribor6M
EUR4Y0.004966MActual360Euribor6M
EUR5Y0.0064476MActual360Euribor6M
EUR6Y0.0084956MActual360Euribor6M
EUR7Y0.0106736MActual360Euribor6M
EUR8Y0.0126756MActual360Euribor6M
EUR9Y0.0145056MActual360Euribor6M
EUR10Y0.0161776MActual360Euribor6M

When the bootstrapping method is used to build the zero curve "curveName"

Then the computed zero-coupons by maturity date with "Actual360" as day count convention and "Continuous" compounding should be

maturity datezero coupon
2022-05-100.003464
2022-11-100.003522
2023-05-100.003638
2024-05-100.003794
2025-05-120.004953
2026-05-110.006457
2027-05-100.008547
2028-05-100.0108
2029-05-100.01289
2030-05-100.01482
2031-05-120.01661

Given the following fra instruments with the trade date 2021-05-06

day count conventionmonths to startmonths to endratecalendarbusiness day conventionend of month
Actual360140.0300TargetModifiedFollowingfalse
Actual360250.0310TargetModifiedFollowingfalse
Actual360360.0320TargetModifiedFollowingfalse
Actual360690.0330TargetModifiedFollowingfalse
Actual3609120.0340TargetModifiedFollowingfalse

When the bootstrapping method is used to build the zero curve "curveName"

Then the computed zero-coupons by maturity date with "Actual360" as day count convention and "Continuous" compounding should be

maturity datezero coupon
2021-09-100.02989
2021-10-120.03046
2021-11-100.03086
2022-02-100.03152
2022-05-100.03209

Given the following deposit instruments with the trade date 2021-05-06

instrument namerate
Euribor1M0.0450
Euribor2M0.0460

And the following bond instruments

bond typeface valueinterest periodicitysettlement daysmaturitycoupon rateprice
zero_coupon1000D03M097.5
zero_coupon1000D06M094.9
zero_coupon1000D01Y090.0
fixed_rate1006M01Y6M0.0896.0
fixed_rate1006M02Y0.12101.6

When the bootstrapping method is used to build the zero curve "curveName"

Then the computed zero-coupons by maturity date with "Actual360" as day count convention and "Continuous" compounding should be

maturity datezero coupon
2021-06-100.04492
2021-07-120.04577
2021-08-060.09907
2021-11-060.1025
2022-05-060.104
2022-11-060.1051
2023-05-060.1066

Given the following deposit instruments with the trade date 2021-05-06

instrument namerate
Eonia0.0030
Euribor1M0.0031
Euribor2M0.0032
Euribor3M0.0033
Euribor6M0.0034
Euribor9M0.0035
Euribor1Y0.0036

And the following fra instruments

day count conventionmonths to startmonths to endratecalendarbusiness day conventionend of month
Actual36012150.0040TargetModifiedFollowingfalse
Actual36013160.0041TargetModifiedFollowingfalse
Actual36014170.0042TargetModifiedFollowingfalse
Actual36017200.0043TargetModifiedFollowingfalse
Actual36020230.0044TargetModifiedFollowingfalse

And the following swap instruments

currency codematurityrateinterest periodicityfixed_leg.day_count_conventionfloating_leg.index_name
EUR2Y0.00506MActual360Euribor6M
EUR2Y6M0.00516MActual360Euribor6M
EUR3Y0.00526MActual360Euribor6M
EUR4Y0.00536MActual360Euribor6M
EUR5Y0.00546MActual360Euribor6M
EUR6Y0.00556MActual360Euribor6M
EUR7Y0.00566MActual360Euribor6M
EUR8Y0.00576MActual360Euribor6M
EUR9Y0.00586MActual360Euribor6M
EUR10Y0.00596MActual360Euribor6M

When the bootstrapping method is used to build the zero curve "curveName"

Then the computed zero-coupons by maturity date with "Actual360" as day count convention and "Continuous" compounding should be

maturity datezero coupon
2021-05-070.003000
2021-06-100.003089
2021-07-120.003188
2021-08-100.003286
2021-11-100.003389
2022-02-100.003488
2022-05-100.003587
2022-08-100.003669
2022-09-120.003707
2022-10-110.003740
2023-01-100.003823
2023-04-110.003897
2023-05-100.004988
2023-11-100.005089
2024-05-100.005190
2025-05-120.005284
2026-05-110.005389
2027-05-100.005493
2028-05-100.005594
2029-05-100.005696
2030-05-100.005798
2031-05-120.005896

Feature Coverage By Scenario

Test Outcomes

Test Performance

Key Statistics

Number of Scenarios 7 Total Duration 304ms
Total Number of Test Cases 7 Fastest Test 24ms
Number of Manual Test Cases 0 Slowest Test 91ms
Tests Started Apr 11, 2023 10:42:17 Average Execution Time 38ms
Tests Finished Apr 11, 2023 10:42:18 Total Execution Time 271ms

Automated Tests

feature Scenario Context Steps Started Total Duration Result
Bootstrapping yield curve Yield curve construction with bonds without calendar windows 3 10:42:17 091ms SUCCESS
Bootstrapping yield curve Yield curve construction with deposits without calendar windows 3 10:42:17 027ms SUCCESS
Bootstrapping yield curve Yield curve construction with Eonia and Euribor windows 3 10:42:17 029ms SUCCESS
Bootstrapping yield curve Yield curve construction with swaps windows 3 10:42:17 034ms SUCCESS
Bootstrapping yield curve Yield curve construction with Forward Rate Agreements windows 3 10:42:17 026ms SUCCESS
Bootstrapping yield curve Yield curve construction with deposit and bond instruments windows 4 10:42:18 024ms SUCCESS
Bootstrapping yield curve Yield curve construction with euribor and fra and swap instruments windows 5 10:42:18 040ms SUCCESS

Manual Tests

No manual tests were recorded

Evidence

Scenario Title Details
Yield curve construction with bonds without calendar Calculation details  Download Evidence
Yield curve construction with deposits without calendar Calculation details  Download Evidence
Yield curve construction with Eonia and Euribor Calculation details  Download Evidence
Yield curve construction with swaps Calculation details  Download Evidence
Yield curve construction with Forward Rate Agreements Calculation details  Download Evidence
Yield curve construction with euribor and fra and swap instruments Calculation details  Download Evidence
Serenity BDD version 3.6.22