Rolling bond strategy

Primer on the RollingBondStrategy class.

Introduction

The purpose of this primer is to show how the building block RollingBondStrategy works.

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
from sigtech.framework.schedules.roll_schedules.bond_schedule import otr_series

import datetime as dtm
import pandas as pd
import seaborn as sns

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

Creating RollingBondStrategy objects

The RollingBondStrategy continually rolls on-the-run or off-the-run bonds for different tenors and issuers.

Here we define a helper function to generate the rolling bond strategies we will consider.

def get_rb(tenor, run_type):
    return sig.RollingBondStrategy(
        country='US',
        currency='USD',
        run_type=run_type,
        # 'ON_THE_RUN', 'FIRST_OFF_THE_RUN', 'SECOND_OFF_THE_RUN'
        start_date=dtm.date(2017, 1, 5),
        tenor=tenor,  # e.g. '2y', '5Y', '10Y', '30y'
    )
on_the_run_10y_st = get_rb('10Y', 'ON_THE_RUN')
first_off_the_run_10y_st = get_rb('10Y', 'FIRST_OFF_THE_RUN')

Examples of on-the-run and off-the-run rolling strategies is given below, together with one roll schedule.

on_the_run_10y_st.history().plot(label='on_the_run', legend=True);
first_off_the_run_10y_st.history().plot(label='first_off_the_run', legend=True);
on_the_run_10y_st.roll_schedule.tail()

On-the-run (OTR) schedules

An alternative way of creating on-the-run RollingBondStrategy strategies, is to use the pre-built OTR schedules which can be access via the otr_series function as per below.

def get_schedules(country, tenor):
    return otr_series(
        group_name=f'{country} GOVT BOND GROUP', 
        tenor=tenor,
        start=dtm.date(2005,1,5)
    )

dict_otr = {}
TENORS = ['5Y']
COUNTRIES = ['ES']
for country in COUNTRIES:
    for tenor in TENORS:
        dict_otr[f'{country}_{tenor}'] = get_schedules(country, tenor)
dict_otr['ES_5Y'].head()

API Documentation

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

Last updated

© 2023 SIG Technologies Limited