Last updated: 2023-03-16.
tf_quant_finance.rates.analytics.cashflows.pv_from_yields#
Computes present value of cashflows given yields.
tf_quant_finance.rates.analytics.cashflows.pv_from_yields(
cashflows, times, yields, groups=None, dtype=None, name=None
)
For a more complete description of the terminology as well as the mathematics
of pricing bonds, see Ref [1]. In particular, note that yields here refers
to the yield of the bond as defined in Section 4.4 of Ref [1]. This is
sometimes also referred to as the internal rate of return of a bond.
Example#
The following example demonstrates the present value computation for two bonds. Both bonds have 1000 face value with semi-annual coupons. The first bond has 4% coupon rate and 2 year expiry. The second has 6% coupon rate and 3 year expiry. The yields to maturity (ytm) are 7% and 5% respectively.
dtype = np.float64
# The first element is the ytm of the first bond and the second is the
# yield of the second bond.
yields_to_maturity = np.array([0.07, 0.05], dtype=dtype)
# 2 and 3 year bonds with 1000 face value and 4%, 6% semi-annual coupons.
# Note that the first four entries in the cashflows are the cashflows of
# the first bond (group=0) and the next six are the cashflows of the second
# bond (group=1).
cashflows = np.array([20, 20, 20, 1020, 30, 30, 30, 30, 30, 1030],
dtype=dtype)
# The times of the cashflows.
times = np.array([0.5, 1, 1.5, 2, 0.5, 1, 1.50, 2, 2.5, 3], dtype=dtype)
# Group entries take values between 0 and 1 (inclusive) as there are two
# bonds. One needs to assign each of the cashflow entries to one group or
# the other.
groups = np.array([0] * 4 + [1] * 6)
# Produces [942.712, 1025.778] as the values of the two bonds.
present_values = pv_from_yields(
cashflows, times, yields_to_maturity, groups=groups, dtype=dtype)
References:#
[1]: John C. Hull. Options, Futures and Other Derivatives. Ninth Edition. June 2006.
Args:#
cashflows: Real rank 1Tensorof sizen. The set of cashflows underlying the bonds.times: Real positive rank 1Tensorof sizen. The set of times at which the corresponding cashflows occur quoted in years.yields: Real rank 1Tensorof size1ifgroupsis None or of sizekif the maximum value in thegroupsis ofk-1. The continuously compounded yields to maturity/internal rate of returns corresponding to each of the cashflow groups. Theith component is the yield to apply to all the cashflows with group labeliifgroupsis not None. Ifgroupsis None, then this is aTensorof size[1]and the only component is the yield that applies to all the cashflows.groups: Optional intTensorof sizencontaining values between 0 andk-1wherekis the number of related cashflows. Default value: None. This implies that all the cashflows are treated as a single group.dtype:tf.Dtype. If supplied the dtype for the input and outputTensors. Default value: None which maps to the default dtype inferred fromcashflows.name: Python str. The name to give to the ops created by this function. Default value: None which maps to ‘pv_from_yields’.
Returns:#
Real rank 1 Tensor of size k if groups is not None else of size [1].
The present value of the cashflows. The ith component is the present
value of the cashflows in group i or to the entirety of the cashflows
if groups is None.