# cpndatepq

Previous quasi coupon date for fixed income security

## Syntax

```PreviousQuasiCouponDate = cpndatepq(Settle, Maturity, Period,Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate)
```

## Arguments

 `Settle` Settlement date. A vector of serial date numbers or date strings. `Settle` must be earlier than `Maturity`. `Maturity ` Maturity date. A vector of serial date numbers or date strings. `Period` (Optional) Coupons per year of the bond. A vector of integers. Allowed values are `0`, `1`, `2` (default), `3`, `4`, `6`, and `12`. `Basis` (Optional) Day-count basis of the instrument. A vector of integers. 0 = actual/actual (default)1 = 30/360 (SIA)2 = actual/3603 = actual/3654 = 30/360 (PSA)5 = 30/360 (ISDA)6 = 30/360 (European)7 = actual/365 (Japanese)8 = actual/actual (ICMA)9 = actual/360 (ICMA)10 = actual/365 (ICMA)11 = 30/360E (ICMA) 12 = actual/365 (ISDA)13 = BUS/252For more information, see basis. `EndMonthRule` (Optional) End-of-month rule. A vector. This rule applies only when `Maturity` is an end-of-month date for a month having 30 or fewer days. `0` = ignore rule, meaning that a bond's coupon payment date is always the same numerical day of the month. `1` = set rule on (default), meaning that a bond's coupon payment date is always the last actual day of the month. `IssueDate` (Optional) Date when a bond was issued. `FirstCouponDate` (Optional) Date when a bond makes its first coupon payment; used when bond has an irregular first coupon period. When `FirstCouponDate` and `LastCouponDate` are both specified, `FirstCouponDate` takes precedence in determining the coupon payment structure. If you do not specify a `FirstCouponDate`, the cash flow payment dates are determined from other inputs. `LastCouponDate` (Optional) Last coupon date of a bond before the maturity date; used when bond has an irregular last coupon period. In the absence of a specified `FirstCouponDate`, a specified `LastCouponDate` determines the coupon structure of the bond. The coupon structure of a bond is truncated at the `LastCouponDate`, regardless of where it falls, and is followed only by the bond's maturity cash flow date. If you do not specify a `LastCouponDate`, the cash flow payment dates are determined from other inputs.

Required arguments must be number of bonds, `NUMBONDS`-by-`1` or `1`-by-`NUMBONDS`, conforming vectors or scalars. Optional arguments must be either `NUMBONDS`-by-`1` or `1`-by-`NUMBONDS` conforming vectors, scalars, or empty matrices. Fill in unspecified entries for input vectors with the value `NaN`. Dates can be serial date numbers or date strings.

## Description

```PreviousQuasiCouponDate = cpndatepq(Settle, Maturity, Period, Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate)``` determines the previous quasi coupon date on or before settlement for a set of `NUMBONDS` fixed income securities. This function finds the previous quasi coupon date for a bond with a coupon structure in which the first or last period is either normal, short, or long (whether or not the coupon structure is synchronized to maturity). For zero coupon bonds this function returns quasi coupon dates as if the bond had a semiannual coupon structure.

The term "previous quasi coupon date" refers to the previous coupon date for a bond calculated as if no issue date were specified. Although the issue date is not actually a coupon date, when issue date is specified, the previous actual coupon date for a bond is normally calculated as being either the previous coupon date or the issue date, whichever is greater. This function always returns the previous quasi coupon date regardless of issue date. If the settlement date is a coupon date, this function returns the settlement date.

`PreviousQuasiCouponDate` is returned as a serial date number. The function `datestr` converts a serial date number to a formatted date string.

## Examples

collapse all

### Determine the Previous Quasi Coupon Date for a Portfolio of Fixed-Income Securities

Given a pair of bonds with the following characteristics:

```Settle = char('30-May-1997','10-Dec-1997'); Maturity = char('30-Nov-2002','10-Jun-2004'); ```

With no `FirstCouponDate` explicitly supplied, compute the `PreviousCouponDate` for this pair of bonds.

```PreviousCouponDate = cpndatep(Settle, Maturity); datestr(PreviousCouponDate) ```
```ans = 30-Nov-1996 10-Dec-1997 ```

Note that since the settlement date for the second bond is also a coupon date, `cpndatep` returns this date as the previous coupon date.

Now establish a `FirstCouponDate` and `IssueDate` for this pair of bonds.

```FirstCouponDate = char('30-Nov-1997','10-Dec-1998'); IssueDate = char('30-May-1996', '10-Dec-1996'); ```

Recompute the `PreviousCouponDate` for this pair of bonds.

```PreviousCouponDate = cpndatep(Settle, Maturity, 2, 0, 1, ... IssueDate, FirstCouponDate); datestr(PreviousCouponDate) ```
```ans = 30-May-1996 10-Dec-1996 ```

Since both of these bonds settled before the first coupon had been paid, `cpndatep` returns the `IssueDate` as the `PreviousCouponDate`.

Using the same data, compute `PreviousQuasiCouponDate`.

```PreviousQuasiCouponDate = cpndatepq(Settle, Maturity, 2, 0, 1,... IssueDate, FirstCouponDate); datestr(PreviousQuasiCouponDate) ```
```ans = 30-Nov-1996 10-Dec-1997 ```

For the first bond the settlement date is not a normal coupon date. The `PreviousQuasiCouponDate` is the coupon date before or on the settlement date. Since the coupon structure is synchronized to `FirstCouponDate`, the previous quasi coupon date is `30-Nov-1996`. `PreviousQuasiCouponDate` disregards `IssueDate` and `FirstCouponDate` in this case. For the second bond the settlement date (10-Dec-1997) occurs on a date when a coupon would normally be paid in the absence of an explicit `FirstCouponDate`. `cpndatepq` returns this date as `PreviousQuasiCouponDate`.

## See Also

#### Introduced before R2006a

Was this topic helpful?

Get trial now