For FINCAD Analytics Suite pricing and cash flow functions that rely on the date generation function to determine cash flow dates, download the latest trial version of FINCAD Analytics Suite.
With the increasing number of market participants turning to FINCAD Analytics Suite for industry standard financial analytics, many new users are presently riding the FINCAD learning curve. With this particular group in mind, this article addresses how to specify payments timing from which a valuation is derived. Breaking down a security into its component cash flows is the first step for many types of analysis. Cash flow generation involves assessing the size of individual coupon payments and determining the timing of these payments. FINCAD Analytics Suite use some basic rules and parameters to automate the cash flow generation process. This article explains the timing rules and how to set up your parameters to accurately specify the actual occurrence of cash flows.
Specifying Cycling Dates
Cash flow table dates are built through functions that generate dates backwards from the terminating date, based on the user-defined frequency. The effective and terminating dates should be unadjusted; internally the functions will adjust for holidays and weekends if applicable and specified. The cash flow frequency is usually specified in the contract along with any special adjustments to take place. The date parameters should reflect the effective and maturity dates, the first interest payment date and the next to last payment date.
Specifying Stub Periods
When using either of the optional "date of first" and/or "next to last coupon" arguments, they must be cycle dates (the cycle is defined by the chosen frequency) as follows (see Figure 1 below):
(1) Stub Last Period/Regular First Period - d_l_cpn is a cycle date of the effective date
(2) Stub First Period/Regular Last Period - d_f_cpn is a cycle date of the terminating date
(3) Stub Both Periods - d_f_cpn and d_l_cpn must be cycle dates of each other
(1) Stub Last Period/Regular First Period - d_l_cpn
For some instruments, the last coupon period does not end on a regular cycle date. To correctly describe these instruments, the last coupon date prior to maturity (date of last coupon prior to maturity - d_last) is included in the instrument description. All the coupons that are of standard length ( i.e. the year fraction specified by the coupon frequency) are calculated exactly like a regular coupon. The only coupon that is different is the last one.
(2) Stub First Period/Regular Last Period - d_f_cpn
For instruments with an odd first coupon, coupon dates are generated backwards from the last coupon date using the frequency specified. The first coupon period is of non-standard length and has to be specified using a start date (dated date - d_dated) and an end date (first coupon date after dated date - d_first).
(3) Stub Both Periods - d_f_cpn and d_l_cpn
Instruments with odd first and last dates have all regular coupons generated in a standard way except for the first and last coupons. The odd first and last coupon are calculated as discussed for each separate case above. The contract details for this bond require the specification of the d_dated, d_first and the d_last. See the table below for examples of the different specifications for the 3 stubs periods possibility:
Related FINCADAnalytics Suite Functions
aaDateGen2(d_s, d_t, d_e, d_f_cpn, d_l_cpn, freq, hl, d_rul, weekend, table_type)
- Generate a one or two column table of dates (for example bond or swap coupon dates). Weekends can be defined to include Saturdays and Sundays, or Sundays only. The sequence may have odd first and / or odd last periods, and the frequency may be annual, semi-annual, quarterly, monthly, biweekly, weekly, 35 day, 28 day, 21 day, 42 day, market days, calendar days.
aaDateGen(d_s, d_t, d_e, d_f_cpn, d_l_cpn, freq, hl, d_rul, table_type)
- Generate a one or two column table of dates (for example bond or swap coupon dates). The sequence may have odd first or / and odd last periods, and the frequency may be annual, semi-annual, quarterly, monthly, biweekly, weekly, 35 day, 28 day, 21 day, 42 day.
aaDateGen_daily(d_e, d_t, freq, hl, table_type)
- Generate a one (or two) column table of market of calendar dates.
aaSamplingDates2(sam_freq, d_exp, d_e, hl)
- Generates the sampling dates for a given frequency. This function exposes the internal sampling dates used in many path dependent option functions (e.g. Super Asian option).
aaSamplingDates(sam_freq, d_exp, d_aver)
- Generates the sampling dates for a given frequency. This function exposes the internal sampling dates used in many path dependent option functions (e.g. Asian, discrete lookback, average strike, double average).
aaDateAdjust2(d_to_adj, num_units, adj_units, d_rul, weekend, hl)
- Adjust a base date a specified number of market days, calendar days, weeks, months, years, Mondays, … Sundays. Weekends can be defined to include Saturdays and Sundays, or Sundays only.
aaDateAdjust(d_to_adj, num_units, adj_units, d_rul, hl)
- Adjust a base date a specified number of market days, calendar days, weeks, months, years, Mondays, … Sundays.
aaMaturity_date2(d_to_adj, jump_by, jump_fwd, d_rul, hl)
- Adjust a base date a specified number of days or months using the specified business day convention.
aaDateSettle(d_to_adj, days_adj, hl)
- Adjust a base date by a specified number of business days.
Your use of the information in this article is at your own risk. The information in this article is provided on an "as is" basis and without any representation, obligation, or warranty from FINCAD of any kind, whether express or implied. We hope that such information will assist you, but it should not be used or relied upon as a substitute for your own independent research.
For more information or a customized demonstration of the software, contact a FINCAD Representative.