Present Value
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.
| Parameter | Type | Description | Example |
|---|---|---|---|
bonds | list[str] | str | None | CUSIPs or ISINs, see collect_bond_statistics. Defaults to None. | None |
issuer | list[str] | str | None | Part of an issuer’s name, such as “Apple”. Defaults to None. | None |
etfs | list[str] | str | None | The bond ETFs to select bonds from, see get_bond_universe. Defaults to None. | None |
maturity_start | str | None | The earliest maturity (YYYY-MM-DD). Defaults to None. | None |
maturity_end | str | None | The latest maturity (YYYY-MM-DD). Defaults to None. | None |
date | str | None | The day of the Treasury prices (YYYY-MM-DD). Defaults to None, the latest day with prices. | "2025-03-31" |
rounding | int | None | The number of decimals to round the results to. Defaults to None, which uses the rounding of the class. | 2 |