Skip to main content

Linear Rates Quantitative Library package for Python

Project description

linerapy

A quantitative libary for linear interest rates - LineRaPy (Pronunciation: /ˈlɪniər paɪ/). The package introduces two types related to the linear rates: YieldCurve and IRS. The YieldCurve can be constructed using the key rates, e.g. tenors and values. The IRS is constructed from the dictionary. The object of type YieldCurve can be queries for dates and zero rates. The object of type IRS can be queries for price and cash flows. The library currently supports US, USGS calendars and a vanilla IRS paying compounded SOFR vs fixed rate.

The library supports USD, EUR, GBP, SGD, JPY and CHF currencies. The corresponding generators are:

  • USD SOFR SW
  • GBP SONIA SW
  • EUR ESTR SW
  • SGD SORA SW
  • JPY TONA SW
  • CHF SARON SW

The valid calendars are US, USSG, EN, TG, SG, JP and CH. Here TG is the TARGET2 calendar. Supported day count conventions are

  • ACT/360
  • ACT/365F
  • ACT/ACT
  • 30/360
  • 30E/360

To price the swap where the coupon already had started compounding, the user needs to provide the fixings. The user should first check the swap object for required fixing dates and provide the rate fixings for those dates.

Requirements

  • Python 3.12+
  • Windows / Linux

Installation

pip install linerapy

Usage

import linerapy
import datetime
import pandas as pd

if __name__ == '__main__':
    obj_dict = {
        'id': 'USD SOFR',
        'value date': datetime.date(2026, 3, 20),
        'currency': 'USD',
        'instruments': {
            'generator': ['USD SOFR SW', 'USD SOFR SW', 'USD SOFR SW', 'USD SOFR SW'],
            'tenor': ['1M', '1Y', '5Y', '10Y'],
            'quote': [3.65, 3.65, 3.65, 3.65],
            'in use': [True, True, True, True]
        }
    }

    yield_curve = linerapy.YieldCurve(obj_dict)

    print('Discount Factor:', yield_curve.df(datetime.date(2027, 3, 20)))

    df = pd.DataFrame.from_dict({
        'Date': yield_curve.dates(),
        'Zero Rate': yield_curve.rates(),
        'Discount Factor': [yield_curve.df(d) for d in yield_curve.dates()]})
    print(df)

The IRS can be created from the dictionary by providing the necessary input.

    obj_dict = {
        'id': 'IRS_001',
        'effective date': datetime.date(2026, 3, 24),
        'termination date': datetime.date(2031, 3, 24),
        'schedule roll': 'Backward',
        'leg1': {
            'currency': 'USD',
            'notional': 10000,
            'is fixed': True,
            'is paid': True,
            'rate': 0.0365,
            'calendar': 'US',
            'frequency': '6M',
            'day count convention': 'ACT/360',
            'pay lag': 2,
            'accrual adjustment': 'Modified Following',
            'accrual calendar': 'US',
            'pay adjustment': 'Modified Following',
            'pay calendar': 'US'
        },
        'leg2': {
            'currency': 'USD',
            'notional': 10000,
            'is fixed': False,
            'is paid': False,
            'index': 'SOFR',
            'margin': 0.0025,
            'calendar': 'USD',
            'frequency': '3M',
            'day count convention': 'ACT/360',
            'pay lag': 2,
            'accrual adjustment': 'Modified Following',
            'accrual calendar': 'US',
            'pay adjustment': 'Modified Following',
            'pay calendar': 'US'
        }
    }

    irs = linerapy.IRS(obj_dict)
    npv = irs.price(yield_curve)
    print(npv)

    pd.set_option('display.max_columns', None)
    pd.set_option('display.width', None)

    cf = irs.cashflows(yield_curve)

    df = pd.DataFrame.from_dict(cf['Leg1'])
    print(df)
    df = pd.DataFrame.from_dict(cf['Leg2'])
    print(df)

First request the fixing dates from the swap. Note that the valuation date is to be passed to the method.

    fixings = irs.required_fixings(datetime.date(2026, 4, 10))

Then pass the fixings to the price or cashflow method of the the swap.

    fixings_data = { 'SOFR':
                         {
                             'dates': fixings['SOFR'],
                             'values': [0.02 for d in fixings['SOFR']]
                         }
    }

    cf = irs.cashflows(yield_curve2, fixings_data)
    pvs = irs.price(yield_curve2, fixings_data)

API Reference

dates()

Returns the yield curve's dates.

Returns:

  • list: List of dates.

Example:

>>> yield_curve_.dates()
[datetime.date(2026, 4, 28), datetime.date(2026, 9, 28), datetime.date(2027, 3, 26), datetime.date(2028, 3, 28)]

rates()

Returns the zero rates corresponding to the yield curve's dates.

Returns:

  • list: List of zero rates.

Example:

>>> yield_curve_.rates()
[0.03694890857811573, 0.0366704955510695, 0.03634333943914385, 0.03634104468177242]

cashflows(yc, fixings)

Returns leg-wise cash flows. If the yield curve argument provided, the forward rates are estimated and the cash flows are projected.

Parameters:

  • yc (YieldCurve): An optional yield curve argument.
  • fixings (dict): An optional argument for fixings. If the trade has no past compounding dates, this argument is not required.

Returns:

  • dict: Dictionary of leg-wise cash flows.

Example:

>>> irs.cashflows(yield_curve)
Accrual Start Date Accrual End Date Payment Date  Day Count Fraction    Rate  Notional   Cash Flow  Discount Factor  Cash Flow PV
0         2026-03-24       2026-09-24   2026-09-28            0.511111  0.0365   10000.0  186.555556         0.981029    183.016423
1         2026-09-24       2027-03-24   2027-03-26            0.502778  0.0365   10000.0  183.513889         0.963732    176.858158
2         2027-03-24       2027-09-24   2027-09-28            0.511111  0.0365   10000.0  186.555556         0.946050    176.490961
3         2027-09-24       2028-03-24   2028-03-28            0.505556  0.0365   10000.0  184.527778         0.929063    171.438002
4         2028-03-24       2028-09-25   2028-09-27            0.513889  0.0365   10000.0  187.569444         0.912291    171.117831
5         2028-09-25       2029-03-26   2029-03-28            0.505556  0.0365   10000.0  184.527778         0.895910    165.320226
6         2029-03-26       2029-09-24   2029-09-26            0.505556  0.0365   10000.0  184.527778         0.879823    162.351780
7         2029-09-24       2030-03-25   2030-03-27            0.505556  0.0365   10000.0  184.527778         0.864025    159.436635
8         2030-03-25       2030-09-24   2030-09-26            0.508333  0.0365   10000.0  185.541667         0.848426    157.418456
9         2030-09-24       2031-03-24   2031-03-26            0.502778  0.0365   10000.0  183.513889         0.833275    152.917586

price(yc, fixings)

Values the IRS using the yield curve.

Parameters:

  • yc (YieldCurve): A yield curve argument.
  • fixings (dict): An optional fixings argument. It is only required if the swap has past dates on which it compounds the coupon.

Returns:

  • dict: Dictionary of leg-wise PV and the total NPV.

Example:

>>> npv = irs.price(yield_curve)
{'Leg1 PV': -1676.3660572375327, 'Leg2 PV': 1776.4412024912517, 'NPV': 100.07514525371903}

License

MIT License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

linerapy-0.2.0-cp314-cp314-win_amd64.whl (261.8 kB view details)

Uploaded CPython 3.14Windows x86-64

linerapy-0.2.0-cp314-cp314-manylinux_2_39_x86_64.whl (333.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

linerapy-0.2.0-cp313-cp313-win_amd64.whl (255.2 kB view details)

Uploaded CPython 3.13Windows x86-64

linerapy-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl (333.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

linerapy-0.2.0-cp312-cp312-win_amd64.whl (255.2 kB view details)

Uploaded CPython 3.12Windows x86-64

linerapy-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl (333.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

File details

Details for the file linerapy-0.2.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: linerapy-0.2.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 261.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for linerapy-0.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 066d3540fb272e5fe251136477c162585d337544031dbc55d89a46c5be458a75
MD5 55f036b20f6312d4b988391fde0f460a
BLAKE2b-256 a96aa3a20166aba4bb6fd1b84b87d77224b887b1fc70014a412b629b3ca88a27

See more details on using hashes here.

File details

Details for the file linerapy-0.2.0-cp314-cp314-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for linerapy-0.2.0-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8ea8d7b9e02af0d588175ba57642c7660f2a44c6bd76ee495efa87b9c02bbf34
MD5 69cbef9af7a968b8c688f407715b3a25
BLAKE2b-256 6e9f6c5ea3a06ccc4853edae0d18507622d2c9913cdd82156f94c499cd2c9c55

See more details on using hashes here.

File details

Details for the file linerapy-0.2.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: linerapy-0.2.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 255.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for linerapy-0.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e1c810c63389322f3ca1e393442937ec2e28f28712f14f0685a370c8596e4e3a
MD5 636404f719657b5d08942c84546c4e95
BLAKE2b-256 f22cff7ce849ac908ce64293eb0911ac0b8578d7e3233c476829902f0a4de27c

See more details on using hashes here.

File details

Details for the file linerapy-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for linerapy-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 a4550db3f0a2a1b44508939d2b2736b920ba0ee5e20953b437df2a96d42d1d9e
MD5 628036bf16cf9e39a961422272f7cd99
BLAKE2b-256 90e2e37a54793609ef197f1c00660057d300185e9e1e8868537ac17070574e22

See more details on using hashes here.

File details

Details for the file linerapy-0.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: linerapy-0.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 255.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for linerapy-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4225c9f9f699e1f1d4f10055ad2b756f91dba6198dd7b61902825f0d334706b3
MD5 b7c09a55ca9dd8ac405ed80a64cf1f19
BLAKE2b-256 63af70d9e633860af73fb48bff7d0f596ba7f8e3d425e26229a6e2286e1d7a8c

See more details on using hashes here.

File details

Details for the file linerapy-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for linerapy-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 a1f80107fc81cdac9d7e3040d735d776a14debe3f5193a02859692a3456ad3e8
MD5 725bb482835bdf18459131c0bf1374fd
BLAKE2b-256 f685fd61687f72fb2ecd66b23318a9a9e9b14be1affbb80a151da291a3ba8c56

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page