<!--
This file is generated by a tool. Do not edit directly.
For open-source contributions the docs will be updated automatically.
-->

*Last updated: 2023-03-16.*

<div itemscope itemtype="http://developers.google.com/ReferenceObject">
<meta itemprop="name" content="tf_quant_finance.rates.analytics.cashflows.pv_from_yields" />
<meta itemprop="path" content="Stable" />
</div>

# tf_quant_finance.rates.analytics.cashflows.pv_from_yields

<!-- Insert buttons and diff -->

<table class="tfo-notebook-buttons tfo-api" align="left">
</table>

<a target="_blank" href="https://github.com/paolodelia99/tf-quant-finance/blob/main/tf_quant_finance/rates/analytics/cashflows.py">View source</a>



Computes present value of cashflows given yields.

```python
tf_quant_finance.rates.analytics.cashflows.pv_from_yields(
    cashflows, times, yields, groups=None, dtype=None, name=None
)
```



<!-- Placeholder for "Used in" -->

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.

```python
  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:


* <b>`cashflows`</b>: Real rank 1 `Tensor` of size `n`. The set of cashflows underlying
  the bonds.
* <b>`times`</b>: Real positive rank 1 `Tensor` of size `n`. The set of times at which
  the corresponding cashflows occur quoted in years.
* <b>`yields`</b>: Real rank 1 `Tensor` of size `1` if `groups` is None or of size `k`
  if the maximum value in the `groups` is of `k-1`. The continuously
  compounded yields to maturity/internal rate of returns corresponding to
  each of the cashflow groups. The `i`th component is the yield to apply to
  all the cashflows with group label `i` if `groups` is not None. If
  `groups` is None, then this is a `Tensor` of size `[1]` and the only
  component is the yield that applies to all the cashflows.
* <b>`groups`</b>: Optional int `Tensor` of size `n` containing values between 0 and
  `k-1` where `k` is the number of related cashflows.
  Default value: None. This implies that all the cashflows are treated as a
    single group.
* <b>`dtype`</b>: `tf.Dtype`. If supplied the dtype for the input and output `Tensor`s.
  Default value: None which maps to the default dtype inferred from
  `cashflows`.
* <b>`name`</b>: 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 `i`th component is the present
  value of the cashflows in group `i` or to the entirety of the cashflows
  if `groups` is None.
