Skip to content
All library documents

Defining Swap Coupon Schedules with Rolls, Stubs, and Calendars

Article Quant Q&A · Author: Oliver Mohr Bonometti

Summary

The document explains how to define a regular swap coupon schedule before applying business-day adjustments. It identifies the effective and termination dates, optional front or back stub dates, payment frequency, roll convention, date modifier, and calendar as the inputs that can fully specify a schedule when no inference is required. Regular periods align to the chosen roll, which can be a day of the month or a systematic convention such as month-end or IMM dates.

The described construction advances from the initial date by the frequency, producing unadjusted dates; a business-day modifier and calendar then determine adjusted dates. A quarterly IMM example illustrates a short front stub and adjusted accrual and payment dates. The answer also cautions that inferring missing schedule terms, including stubs from incomplete date or tenor information, creates a more complex combinatorial problem. It offers a practical definition and example rather than an exhaustive account of official market standards.

Key ideas

  • A fully specified schedule includes dates, frequency, roll, business-day modifier, and calendar.
  • Regular periods align with the selected roll convention.
  • Optional front and back stub dates define irregular periods at the ends of a schedule.
  • Generate unadjusted coupon dates first, then apply the calendar and business-day modifier.
  • Inferring omitted schedule details can create a complex set of choices.

Tags

Full text
# Roll-adjustment definition for swaps schedule generation


# Roll-adjustment definition for swaps schedule generation












To my understanding, when generating swap coupon schedules, first you define an effective date which is kind of straight forward. Then, you generate your coupons: roll-adjusted but not coupon-adjusted (by coupon-adjusted I mean Following, Preceding, MF, MP) then apply your coupon-adjustment.

> Then, you generate your coupons: roll-adjusted

This is the part I don't understand how it's done. So far, I know there are 4 major implementations: Forwards, Forwards(EOM), Backwards, Backwards(EOM).

What is the definition adjustments? Are there any official documents that define them?

## Answer by Attack68 (score 2)

https://quant.stackexchange.com/a/79894

If you do not permit any form of inference (e.g. if a user gave some dates which did not define a regular swap schedule and needed to infer stubs, or if dates were supplied with tenors like '1y1y') then I would consider a schedule to be fully defined by the following parameters:

```
effective: datetime,
front_stub: Optional[datetime],
back_stub: Optional[datetime],
termination: datetime,
frequency: str,
roll: int | str,
modifier: str,
calendar: list
```

There must be a regular schedule defined between the following dates. A regular schedule is one which has correct and fully qualified periods in every period, aligning with the roll:

- effective and termination (if there are no stubs)

- effective and back_stub (if there is no front_stub)

- front_stub and termination (if there is no back_stub)

- front_stub and back_stub (if both are given)

For the regular schedule it should be constructed by progressing forwards fron the initial date by the set number of months according to schedule and setting the date in the month according to the roll which may be numeric or something systematically defined like end-of-month or IMM date.

Once these dates have been determined (effectively unadjusted dates), they must be adjusted using a modifier and a business day calendar. This produces all values associated with a Schedule.

This is how rateslib determines schedules:

```
# PYTHON
from rateslib.scheduling import Schedule

s = Schedule(
    effective=dt(2015, 3, 18),
    termination=dt(2016, 3, 16),
    frequency="q",
    roll="imm",
    modifier="mf",
    calendar="ldn",
    payment_lag=0,
)
###
freq: Q,  stub: SHORTFRONT,  roll: imm,  pay lag: 0,  modifier: mf
    Period Unadj Acc Start Unadj Acc End  Acc Start    Acc End    Payment
0  Regular      2015-03-18    2015-06-17 2015-03-18 2015-06-17 2015-06-17
1  Regular      2015-06-17    2015-09-16 2015-06-17 2015-09-16 2015-09-16
2  Regular      2015-09-16    2015-12-16 2015-09-16 2015-12-16 2015-12-16
3  Regular      2015-12-16    2016-03-16 2015-12-16 2016-03-16 2016-03-16
```

This page has some more info: Schedule Docs

When you start to get into inference, when the user does not supply all the necessary fields and they should be inferred from the most common options it becomes quite complex combinatorially. I try to discuss some of the choices in the chapter on Scheduling in this book: Coding Interest Rates

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.