Rolling swap strategy#

Introduction#

The purpose of this primer is to show how to work with the building block RollingSwapStrategy.

A notebook containing all the code used in this page can be accessed in the research environment: Example notebooks.

Environment#

Setting up your environment takes three steps:

  • Import the relevant internal and external libraries

  • Configure the environment parameters

  • Initialise the environment

import sigtech.framework as sig

import datetime as dtm
import seaborn as sns

sns.set(rc={'figure.figsize': (18, 6)})
sig.config.init();

Learn more: setting up the environment.

Creating RollingSwapStrategy objects #

The RollingSwapStrategy object allows for automatic rolling of IMM Interest Rate Swaps.

An example of building a rolling IRS strategy is given below.

roll_swap = sig.RollingSwapStrategy(
    currency='EUR',
    swap_currency='EUR',
    forward_start_months=12,
    rolling_frequency_months=3 ,
    start_date=dtm.date(2020, 1, 4),
    tenor='5Y',
    roll_offset='-2',
    pv01_target=200e3, # optional
    pv01_target_type='Fixed' # optional
)

Python:

roll_swap.swap_pv01(dtm.datetime(2020, 5, 2))

Output:

201038.22420404755

Python:

roll_swap.history().tail()

Output:

2021-08-10    5.965495e+06
2021-08-11    6.198071e+06
2021-08-12    5.965723e+06
2021-08-13    6.241295e+06
2021-08-16             NaN
Name: (LastPrice, EOD, EUR D2BD8049 RSS STRATEGY), dtype: float64

Python:

roll_swap.history().plot() # returns PV history

Output:

Python:

roll_swap.roll_dates

Output:

[datetime.date(2017, 1, 5),
 datetime.date(2017, 6, 14),
 datetime.date(2017, 9, 13),
 datetime.date(2017, 12, 13),
 datetime.date(2018, 3, 14),
 datetime.date(2018, 6, 13),
 datetime.date(2018, 9, 12),
 datetime.date(2018, 12, 12),
 datetime.date(2019, 3, 13),
 datetime.date(2019, 6, 12),
 datetime.date(2019, 9, 11),
 datetime.date(2019, 12, 11),
 datetime.date(2020, 3, 11),
 datetime.date(2020, 6, 10),
 datetime.date(2020, 9, 9),
 datetime.date(2020, 12, 9),
 datetime.date(2021, 3, 10),
 datetime.date(2021, 6, 9),
 datetime.date(2021, 9, 8)]

The RollingSwapStrategy will create each individual swap throughout the life of the strategy. Each of which can be called and explored in more detail.

Python:

irs_positions = roll_swap.inspect.positions_df().columns.to_list()
irs = sig.obj.get(irs_positions[-1])
irs

Output:

EUR EURIBIMM A6M -0.001507 2021-06-14 M22X5Y IRS <class 'sigtech.framework.instruments.ir_otc.InterestRateSwap'>[140108985740752]

Python:

irs.carry_roll_down(d=dtm.date(2021, 6, 15),
                    dates=[dtm.date(2021, 6, 30),
                           dtm.date(2021, 12, 15),
                           dtm.date(2022, 6, 30)])

Output:

API Documentation#

For more information on the RollingBondStrategy class, see the API documentation.