Python for Finance: Analyze Big Financial Data

(Elle) #1
            get_discount_factors    :
get discount factors given a list/array of datetime objects
or year fractions
”’

def init(self, name, short_rate):
self.name = name
self.short_rate = short_rate
if short_rate < 0 :
raise ValueError(‘Short rate negative.’)


def get_discount_factors(self, date_list, dtobjects=True):
if dtobjects is True:
dlist = get_year_deltas(date_list)
else:
dlist = np.array(date_list)
dflist = np.exp(self.short_rate * np.sort(-dlist))
return np.array((date_list, dflist)).T


The application of the class constant_short_rate is best illustrated by a simple, concrete


example. We stick to the same list of datetime objects as before:


In  [ 1 ]:  import datetime as dt

In  [ 2 ]:  dates   =   [dt.datetime( 2015 ,     1 ,     1 ),   dt.datetime( 2015 ,  7 ,     1 ),
...: dt.datetime( 2016 , 1 , 1 )]

In  [ 3 ]:  from constant_short_rate import *

In  [ 4 ]:  csr =   constant_short_rate(‘csr’,  0.05)

In  [ 5 ]:  csr.get_discount_factors(dates)
Out[ 5 ]:
array([[datetime.datetime( 2015 , 1 , 1 , 0 , 0 ), 0.95122942450071402],
[datetime.datetime( 2015 , 7 , 1 , 0 , 0 ), 0.9755103387657228],
[datetime.datetime( 2016 , 1 , 1 , 0 , 0 ), 1.0]], dtype=object)

The main result is a two-dimensional ndarray object containing pairs of a datetime


object and the relevant discount factor. The class in general and the object csr in


particular work with year fractions as well:


In  [ 7 ]:  deltas  =   get_year_deltas(dates)

In  [ 8 ]:  csr.get_discount_factors(deltas,    dtobjects=False)
Out[ 8 ]:
array([[ 0. , 0.95122942],
[ 0.49589041, 0.97551034],
[ 1. , 1. ]])

This class will take care of all discounting operations needed in other classes.

Free download pdf