Discount factors and present value
Making time value an observable curve object rather than a single-rate shortcut
01Define a discount factor as the price of a unit zero-coupon payoff.
02Convert consistently between discount factors and continuously compounded zero rates.
03Value deterministic cash-flow schedules on one valuation date.
04Explain why discount factors—not rates—are the primitive linear pricing weights.
Separate the quote from the quantity inferred from it.
A curve is a collection of prices across dates. The discount factor P(0,T) is the time-zero price of one currency unit paid at T; every quoted rate is a convention-dependent transform of that price.
Present value is linear in cash flows but nonlinear in quoted rates.
P(0,0)=1 anchors the curve; positive discount factors are required even when rates are negative.
The valuation date, settlement calendar and collateral agreement determine which curve applies.
Start from executable inputs and conventions.
Every bond, swap, FRA, option and xVA exposure needs date-specific pricing weights. A flat rate can illustrate time value, but a desk marks and risks a full discount curve.
zero-coupon bonds
OIS-discounted cash flows
fixed-rate bonds
collateralised derivatives
Rates are decimal inputs. This track uses continuously compounded zero rates and ACT/365-like year fractions for educational examples; traded instruments retain their market-native conventions.
Transform quotes without losing units or arbitrage constraints.
Zero-coupon price
A zero rate is the constant continuous rate that reproduces one maturity-specific discount factor.
Open in AnalyticsCash-flow present value
Each dated cash flow receives its own linear pricing weight.
Open in AnalyticsShort derivation
From no-arbitrage unit payoffs to present value
Replicate each deterministic payment with its matching zero-coupon claim, then add the replicated positions.
- 01
Define the unit payoff
Let a zero-coupon claim pay exactly one currency unit at T. Its clean time-zero price is P(0,T).
- 02
Scale each maturity claim
A deterministic cash flow C_i at T_i is replicated by C_i units of that zero-coupon claim.
- 03
Use portfolio additivity
Summing the maturity-matched claims gives the value of the whole cash-flow schedule.
- 04
Transform only for reporting
Convert P(0,T) to a rate after valuation, using one explicit compounding and year-fraction convention.
Discount factors are the curve’s pricing coordinates; rate conventions are reversible views only when date, basis and compounding are retained.
Inputs
P(t,T): discount factor from t to Tr(0,T): continuously compounded zero rateC_i: cash flow at T_iV_0: present value on the curve date
Assumptions and limits
- A deterministic curve does not model future rate uncertainty.
- Credit, funding and collateral terms can require different curves.
- Calendar and settlement choices can move cash-flow dates and PV.
Discount-ratio return
Ratios of discount factors determine forward accumulation between dates.
Open in AnalyticsInvert, fit, and reprice the market instruments.
Value cash flows directly on discount factors, then report rate-space diagnostics. Preserve valuation date, settlement date, currency and collateral regime with the curve snapshot.
Infer discount factors from liquid collateral-consistent instruments. The direct exponential conversion in this lesson is educational, not an instrument bootstrap.
Implementation with current QuantLib
Use a YieldTermStructureHandle to pass discounting consistently into instruments and engines. Keep the evaluation date, settlement conventions and observer updates explicit; do not reconstruct discounting ad hoc inside each pricer.
API authority: upstream QuantLib reference pinned in the source registry.06PYTHON IMPLEMENTATIONOpen the implementation and checks.
- Parse dated market inputs and conventions at the boundary.
- Build deterministic curve objects in the framework-free quant layer.
- Return PV, repricing residuals and sensitivities together.
- Test inversion, par conditions, monotonic dates and invalid domains.
Discount-factor inversion and cash-flow PV
Implement the primitive price-rate transform and verify inversion.
from __future__ import annotations import math def discount(rate: float, time: float) -> float: if not math.isfinite(rate) or not math.isfinite(time) or time < 0: raise ValueError("finite rate and non-negative time required") return math.exp(-rate * time) def present_value(cashflows: list[tuple[float, float]], rate: float) -> float: return sum(amount * discount(rate, time) for time, amount in cashflows) r, t = 0.0375, 7.25p = discount(r, t)assert abs(-math.log(p) / t - r) < 1e-12pv = present_value([(1.0, 4.0), (2.0, 4.0), (3.0, 104.0)], r)assert 0.0 < pv < 112.0print(f"P(0,{t})={p:.8f} | PV={pv:.6f}")Move the quote and inspect every linked representation.
Discount geometry laboratory
Shift the curve regime and horizon; compare discount factors, zero rates and PV weights.
Normal curve: Positive upward zero curve.
- discount factor
- +25bp curve
Use Left/Right or Up/Down arrows to inspect values; Home and End jump to the bounds.
Where the model meets the book.
“The curve is a set of dated prices. Calling it ‘the rate’ hides the risk you actually own.”
valuation and settlement dates
currency and collateral regime
dated discount nodes
day-count basis
cash-flow schedule
Infer discount factors from liquid collateral-consistent instruments. The direct exponential conversion in this lesson is educational, not an instrument bootstrap.
RISKparallel DV01
curve-shape risk
collateral-basis risk
settlement mismatch
- freeze curve snapshot
- validate dates and factors
- map cash flows
- discount by date
- reconcile PV and sensitivities
Production failure modes
- stale evaluation date
- percent/decimal mismatch
- wrong collateral curve
- date moved without rebuilding schedule
09MACRO CONNECTIONOpen the transmission channel.
Policy transmission through discounting
Expected policy and term premia alter the price of future money, changing the present value of every distant cash flow.
transmitsreprices overnight expectations
transmitsmoves dated pricing weights
transmitsrevalues future cash flows
outputshifts duration demand
10COMMON PITFALLSOpen the failure checklist.
Using one scalar rate for a multi-date portfolio.
Assuming discount factors must be below one in negative-rate regimes.
Mixing compounding conventions during inversion.
Ignoring collateral and settlement state.
11SOURCES / FURTHER READINGOpen sources and continue the track.
Interest-rate products, term structures and short-rate lectures
Research map for the rates progression and numerical experiments; all platform prose and code are original.
- Source
- Financial Engineering: Interest Rates & xVA
- Author
- L. A. Grzelak
- Ref
- main
Stochastic processes, Monte Carlo and model-calibration lectures
Mathematical cross-reference for stochastic dynamics and implementation checks.
- Source
- Computational Finance Course
- Author
- L. A. Grzelak
- Ref
- main
Current term structures, indexes, rate helpers, instruments, engines and tests
Implementation authority for production abstractions; Academy derives the mathematics before introducing library objects.
- Source
- QuantLib upstream
- Author
- QuantLib contributors
- Ref
- v1.42.1