Estimates the percentage change in a bond’s price for a given change in yield, using a second-order Taylor series expansion that combines modified duration and convexity.

Modified duration alone only captures the first-order (linear) relationship between a bond’s price and its yield, which understates the price increase for a yield decrease and overstates the price decrease for a yield increase because the true price-yield relationship is curved (convex), not linear. Adding a convexity term corrects for this and produces a substantially more accurate estimate, especially for larger yield changes.

This method calls get_modified_duration and get_convexity from bond_model.py directly rather than recomputing them.

The Taylor approximation is calculated using the following formula:

\[\%\Delta \text{Price} \approx - \text{Modified Duration} \cdot \Delta y + 0.5 \cdot \text{Convexity} \cdot \Delta y ^{2}\]

Also known as: duration-convexity approximation, second-order price approximation.

Taylor Series Price Change in Python

get_taylor_price_change is part of the Fixed Income module of the open-source Finance Toolkit. Install it with:

pip install financetoolkit -U

Then call get_taylor_price_change as shown below.

from financetoolkit import FixedIncome

fixedincome = FixedIncome()

fixedincome.get_taylor_price_change(
    coupon_rate=[0.03, 0.05, 0.07],
    years_to_maturity=[5, 10, 15],
    yield_to_maturity=0.08,
    yield_change=0.01,
    show_input_info=False,
)

Which returns:

Coupon Rate 5 10 15
0.03 -0.0421 -0.0744 -0.097
0.05 -0.0407 -0.0693 -0.088
0.07 -0.0394 -0.0656 -0.0824

Parameters

get_taylor_price_change accepts the following parameters:

  • par_value (float, optional): The par value (face value) of the bond. Defaults to 100.
  • coupon_rate (float, optional): The coupon rate of the bond. If not provided, a range of coupon rates will be used.
  • years_to_maturity (float, optional): The years to maturity of the bond in years. If not provided, a range of years to maturity will be used.
  • yield_to_maturity (float, optional): The current yield to maturity of the bond. Defaults to 0.08.
  • frequency (int, optional): The number of coupon payments per year. Defaults to 1.
  • yield_change (float, optional): The hypothetical change in yield to maturity, e.g. 0.01 for a 100 basis point increase. Defaults to 0.01.
  • show_input_info (bool, optional): Whether to display input information. Defaults to True.
Share