Creating a Swaps Dashboard using Python

  • Clarus Microservices make it easy to get Swaps data
  • Swap volumes can be retrieved from SDRs using simple Python
  • This data can be displayed in Tables and Charts
  • Our Sandbox allows you to try quickly in your Browser

Introduction

Under the Dodd-Frank Act, all swaps, whether cleared or uncleared, that are executed by US persons, need to be reported to a Swap Data Repository (SDR).

The SDR data is available via the Clarus Microservices API. It can be easily retrieved using simple Python programming language.

In this blog, I will demonstrate a few of the SDR functions available in the Clarus API.  The functions take BBG tickers and return values such as notional and dv01, which can then be presented in charts and tables.

Volume and DV01 of Outright Trades

To start, I specify the BBG tickers for outright trades on six major tenors and then use the function sdr.volume to get notional and dv01 for each.

bbg_tickers = 'USSW2, USSW3, USSW5, USSW7, USSW10, USSW30'

notional = clarus.sdr.volume(ticker=bbg_tickers, volumeType='notional')
dv01 = clarus.sdr.volume(ticker=bbg_tickers, volumeType='dv01')

The output from the above two API calls is shown below:

Ticker     Period Start    Period End    Volume Type        Volume
USSW10       2018-08-03    2018-08-03       NOTIONAL    3231600000
USSW2        2018-08-03    2018-08-03       NOTIONAL    2768000000
USSW3        2018-08-03    2018-08-03       NOTIONAL     633000000
USSW30       2018-08-03    2018-08-03       NOTIONAL     973000000
USSW5        2018-08-03    2018-08-03       NOTIONAL    3104000000
USSW7        2018-08-03    2018-08-03       NOTIONAL     891000000

Ticker     Period Start    Period End    Volume Type     Volume
USSW10       2018-08-03    2018-08-03           DV01    2758311
USSW2        2018-08-03    2018-08-03           DV01     474617
USSW3        2018-08-03    2018-08-03           DV01     168557
USSW30       2018-08-03    2018-08-03           DV01    2013724
USSW5        2018-08-03    2018-08-03           DV01    1388505
USSW7        2018-08-03    2018-08-03           DV01     551946

In just a few lines of basic Python code I was able to get Notional and DV01 volumes for today , August 3, 2018 for these major tenors.

To collate the data in a table, I will use a popular data manipulation library in Python called Pandas.

From the above output data,Tickers, Notional, and DV01 are loaded into a new Pandas dataframe.

import pandas as pd

df = pd.DataFrame({'Ticker': notional['Ticker'], 'Notional': notional['Volume'], 'DV01': dv01['Volume']})

Next, I want to append more data to the above dataframe, which would include the Tenor, the Average DV01 for the prior 30 days, and its difference from the daily DV01.

df['Tenor'] = [int(i[4:]) for i in df['Ticker']]
df['Avg DV01'] = [clarus.sdr.volumeadv(ticker=i, volumeType='dv01').get_value(0,'ADV') for i in df['Ticker']]
df['%Deviation'] = df['DV01'].astype(float)/df['Avg DV01'].astype(float)*100

df = df[['Ticker', 'Tenor', 'Notional', 'DV01', 'Avg DV01', '%Deviation']].sort_values(by='Tenor', ascending=True)

In the above block of code, I first strip the Tenors from the Ticker symbols.

Next I call the clarus sdr.volumeadv API function to get the Average DV01 volumes for the prior 30 days for each Ticker independently.

I then calculate the difference between the daily DV01 with the Average DV01 for the last 30 days to get the %Deviation.

Lastly, I set the columns in order and the Tenors in ascending order to get the dataframe below:

   Ticker  Tenor    Notional     DV01    Avg DV01  %Deviation
1   USSW2      2  2768000000   474617   779729.23   60.869464
2   USSW3      3   633000000   168557   405415.54   41.576354
4   USSW5      5  3104000000  1388505  1560210.18   88.994740
5   USSW7      7   891000000   551946   469480.20  117.565341
0  USSW10     10  3231600000  2758311  2894384.05   95.298722
3  USSW30     30   973000000  2013724  1785639.48  112.773268

Creating a Dashboard

Next I will show you how to convert the above Dataframe into Tables and charts in a Dashboard in just a few lines of python code using the clarusui python library.

table = ui.Table(df, cssClass='table-inverse', headerColour='green')

bar_chart = ui.BarChart(df, colFilter='DV01')
line_chart = ui.LineChart(df, colFilter='Avg DV01')
combo_chart = ui.ComboChart(bar_chart, line_chart, yaxis='Tenor', xaxis='DV01 Volume', title='DV01 and Average DV01 by Tenor')

dashboard = ui.Dashboard(table, combo_chart, style=ui.DarkStyle(), header='IRS Volumes and DV01')
print(dashboard)

All I do is pass in the dataframe (df) to the Table, Bar chart and Line chart.

To best display the relationship between the daily DV01 and Average DV01, I pass the Bar and Line chart to a Combo chart.

I then input the Table and Combo chart to my dark themed dashboard to get the below:

Hovering on the Bars and points in the Line chart displays the exact values at that point.

Once the dataframe was created, with a few lines of python code, all I had to do was pass it into the table and charts to get the above engaging Dashboard.

Try it Yourself

It is really easy for you to try the above examples yourself.

We provide Clarus python packages to make it convenient to call the Clarus API.

First you need to register for a free trial account here.

(Only for potential customers, no vendors please).

When you have been authorised, login and try out the examples above.

The Clarus API Reference Page allows you to try out the examples within a Browser Sandbox environment , before installing on your computer.

What could be easier?

Stay informed with our FREE newsletter, subscribe here.