Calculates the present value of individual bonds: their coupons and principal discounted with the Treasury zero-coupon curve of the price date, next to the price they trade at. For a Treasury the two differ by how far the issue trades off the curve; for a corporate bond the present value is the price it would have without any credit or liquidity risk, and the gap with its price is what the Z-spread (get_z_spread) measures.

The formula is as follows:

\[\text{Dirty Price} = \operatorname{SUM}(C / (1 + s(t_{i}) / 2) ^{2 t_{i}}) + F / (1 + s(t_{n}) / 2) ^{2 t_{n}},\;\; \text{over} \;\; \text{the remaining coupons}\; i = 1,\;\; \text{...},\;\; \text{n}\] \[\text{Accrued Interest} = C \cdot a\] \[\text{Present Value} = \text{Dirty Price} - \text{Accrued Interest},\;\; \text{the clean price}\]

where:

\[C = \text{Coupon payment per half year},\;\; 100 \cdot \text{Coupon} / 2\] \[s(t) = \text{Treasury zero-coupon rate at}\; t \;\text{years} (\text{get\_zero\_coupon\_curve}),\;\; \text{restated from annual to semi-annual compounding and interpolated linearly between its maturities}\] \[a = \text{Elapsed fraction of the current coupon period},\;\; \text{0 on a coupon date}\] \[t_{i} = \text{Time of the i-th cash flow in years},\;\; \text{on the bond's actual coupon dates}\] \[F = \text{Face value of}\; 100\]

The bonds are selected as in collect_bond_statistics: Treasuries by CUSIP from FedInvest, other bonds from the bond ETF holdings and, without bonds or an issuer, the benchmark Treasuries. TIPS have no present value on the nominal curve. To price terms of your own, use bond_model.get_bond_price (at one yield) or bond_model.get_bond_price_from_curve (on a curve).

Also known as: PV, bond pricing, discounted cash flows, theoretical price.

Present Value in Python or via the MCP

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_present_value as shown below.

from financetoolkit import FixedIncome

fixedincome = FixedIncome()

present_values = fixedincome.get_present_value(date="2026-11-05")

present_values[["Coupon", "Maturity", "Price", "Present Value"]]

Or, after setting up the Finance Toolkit MCP, ask:

What were the benchmark 2- to 30-year US Treasuries worth on the Treasury zero-coupon curve on 5 November 2026, next to their market prices?

Which returns:

  Coupon Maturity Price Present Value
91282CRU7 0.0462 2028-10-31 100.312 100.315
91282CLR0 0.0412 2029-10-31 98.875 98.8811
91282CRT0 0.0475 2031-10-31 100.688 100.708
91282CRV5 0.0488 2033-10-31 101.062 101.039
91282CRF0 0.0462 2036-08-15 98.4375 98.4008
912810RU4 0.0288 2046-11-15 70.0312 69.9175
912810UW6 0.0512 2056-08-15 98.125 98.028

Parameters

get_present_value accepts the following parameters.

ParameterTypeDescriptionExample
bondslist[str] | str | NoneCUSIPs or ISINs, see collect_bond_statistics. Defaults to None.None
issuerlist[str] | str | NonePart of an issuer’s name, such as “Apple”. Defaults to None.None
etfslist[str] | str | NoneThe bond ETFs to select bonds from, see get_bond_universe. Defaults to None.None
maturity_startstr | NoneThe earliest maturity (YYYY-MM-DD). Defaults to None.None
maturity_endstr | NoneThe latest maturity (YYYY-MM-DD). Defaults to None.None
datestr | NoneThe day of the Treasury prices (YYYY-MM-DD). Defaults to None, the latest day with prices."2025-03-31"
roundingint | NoneThe number of decimals to round the results to. Defaults to None, which uses the rounding of the class.2
Share