Last updated: 2023-03-16.
tf_quant_finance.experimental.instruments.FixedCashflowStream#
Represents a batch of fixed stream of cashflows.
tf_quant_finance.experimental.instruments.FixedCashflowStream(
start_date, end_date, coupon_spec, first_coupon_date=None,
penultimate_coupon_date=None, dtype=None, name=None
)
Example:#
The following example illustrates the construction of an FixedCashflowStream and calculating its present value.
import numpy as np
import tensorflow as tf
import tf_quant_finance as tff
dates = tff.datetime
instruments = tff.experimental.instruments
rc = tff.experimental.instruments.rates_common
dtype = np.float64
start_date = dates.convert_to_date_tensor([(2020, 2, 2)])
maturity_date = dates.convert_to_date_tensor([(2023, 2, 2)])
valuation_date = dates.convert_to_date_tensor([(2020, 2, 2)])
period_6m = dates.periods.months(6)
fix_spec = instruments.FixedCouponSpecs(
coupon_frequency=period_6m, currency='usd',
notional=1.e6, coupon_rate=0.03134,
daycount_convention=rc.DayCountConvention.ACTUAL_365,
businessday_rule=dates.BusinessDayConvention.NONE)
cf_stream = instruments.FixedCashflowStream([start_date], [maturity_date],
[fix_spec], dtype=dtype)
curve_dates = valuation_date + dates.periods.years([1, 2, 3, 5, 7, 10, 30])
reference_curve = instruments.RateCurve(
curve_dates,
np.array([
0.02834814, 0.03077457, 0.03113739, 0.03130794, 0.03160892,
0.03213901, 0.03257991
], dtype=dtype),
dtype=dtype)
market = instruments.InterestRateMarket(
reference_curve=reference_curve, discount_curve=reference_curve)
price = cf_stream.price(valuation_date, market)
# Expected result: 89259.267853547
Args:#
start_date: A rank 1DateTensorspecifying the starting dates of the accrual of the first coupon of the cashflow stream. The shape of the input correspond to the numbercof streams being created.end_date: A rank 1DateTensorspecifying the end dates for accrual of the last coupon in each cashflow stream. The shape of the input should be the same as that ofstart_date.coupon_spec: A scalar or a list ofFixedCouponSpecsspecifying the details of the coupon payment for the cashflow stream. If specified as a list then the length of the list should be the same as the number of streams being created and each coupon within the list must have the same daycount_convention and businessday_rule. If specified as a scalar, then the elements of the namedtuple must be of the same shape as (or compatible to) the shape ofstart_date.first_coupon_date: An optional rank 1DateTensorspecifying the payment dates of the first coupon of the cashflow stream. Use this input for cashflows with irregular first coupon. Default value: None which implies regular first coupon.penultimate_coupon_date: An optional rank 1DateTensorspecifying the payment date of the penultimate (next to last) coupon of the cashflow stream. Use this input for cashflows with irregular last coupon. Default value: None which implies regular last coupon.dtype:tf.Dtype. If supplied the dtype for the real variables or ops either supplied to the FixedCashflowStream object or created by the object. Default value: None which maps to the default dtype inferred by TensorFlow.name: Python str. The name to give to the ops created by this class. Default value:Nonewhich maps to ‘fixed_cashflow_stream’.
Attributes:#
contract_indexdaycount_fractionsfixed_ratenotionalpayment_dates
Methods#
price
price(
valuation_date, market, model=None, pricing_context=None, name=None
)
Returns the present value of the stream on the valuation date.
Args:#
valuation_date: A scalarDateTensorspecifying the date on which valuation is being desired.market: A namedtuple of typeInterestRateMarketwhich contains the necessary information for pricing the cashflow stream.model: Reserved for future use.pricing_context: Additional context relevant for pricing.name: Python str. The name to give to the ops created by this function. Default value:Nonewhich maps to ‘price’.
Returns:#
A Rank 1 Tensor of real type containing the modeled price of each stream
based on the input market data.