1
$\begingroup$

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?

$\endgroup$
2
  • $\begingroup$ who has written this? I do not necessarily agree with it. $\endgroup$
    – Attack68
    Commented 2 days ago
  • $\begingroup$ @Attack68 That is according to my understanding. I'll add that to be clear. $\endgroup$ Commented 2 days ago

1 Answer 1

2
$\begingroup$

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

$\endgroup$
3
  • $\begingroup$ Thank you very much. Are you the author? I bought Pricing and Trading Interest Rate Derivatives: A Practical Guide to Swaps a few months ago $\endgroup$ Commented 2 days ago
  • $\begingroup$ Just to confirm what I understood. Backward or forward determine if add coupons from frist to last or last to first (considering special case of stub). And then, the roll determines how I adjust the day (day-of-month) of each date. Finally I adjust with Following, Preceding, MF or MP if it applies. $\endgroup$ Commented 2 days ago
  • 1
    $\begingroup$ I only made reference to 'forward' because I stipulated that all key dates were known and a regular schedule was defined between dates so you can start at the front side progress to the back side and know you will arrive correctly. If you want to infer a single stub from effective and termination then going 'backwards' would possibly arrive at a front stub, whilst going 'forwards' would possibly arrive at a back stub. If the stubs align with the effective/termination then there is, essentially, no inferred stub. You cannot infer two stubs, it is fundamentally ambiguous. Yes, Im author. $\endgroup$
    – Attack68
    Commented 2 days ago

Not the answer you're looking for? Browse other questions tagged or ask your own question.