QuantLib
QuantLib copied to clipboard
An index derived from an overnight index (such as SOFR, SONIA or effective FF)
Discussion on users' list: https://sourceforge.net/p/quantlib/mailman/message/36923924/
Given undergoing libor replacement efforts, we’ll likely start seeing more overnight indexed swaps and floating rate notes that are behaving just like ois variable legs, i.e. resetting periodically to an index that’s either a simple or compound average of overnight index fixings. While it’s possible to replicate these explicitly (from overnight index fixings), it would be very convenient to be able to get fixing for these out of the box, and have quantlib taking care of various conventions (averaging, fixing delays, advance/arrears, etc.) It could also simplify the definition of overnight indexed swap and would potentially allow merging regular ois and arithmetic average ois implementations (in that common implementation, a floating leg is defined using an index - compound average in one case and simple average in the other).
The first pass of the functionality does not need to have any extra features other than those that already implemented in OIS (i.e. compounded average and fixing delay). It also simplifies testing - one has to compare old and new results, expecting them to be identical. Once this type of index is abstracted, additional features (please see below) could be added separately
- advance vs arrears; while current overnight indexed swaps are set up with “in arrears” convention, it is quite possible that FRN’s/loans (and perhaps derivatives to hedge those) will use “in advance” convention.
- Lockout or Suspension Period: Use the averaged SOFR over current interest period with last rates set at the rate fixed k days before the period ends (a 2-5 day lockout has been used in most SOFR FRNs).
- negative fixing period; o/n rate published today applies to the instrument period from yesterday to today (https://www.clarusft.com/ois-swap-nuances/)
- arithmetic average; it’s implemented as a swap in experimental section, but there is no corresponding index class. Perhaps, a flag (such as “nettingtype” that’s used in overnight futures) could be introduced to make the index support both conventions.