Login  Register

Re: Python Saving Interest Rate Curve Objects to File

Posted by TSchulz85 on Oct 11, 2016; 3:11pm
URL: http://quantlib.414.s1.nabble.com/Python-Saving-Interest-Rate-Curve-Objects-to-File-tp17751p17796.html

Thanks!

Just for future reference if people are interested, here the main part of the discussed code:


#%% Creating the Database/bootstrapping and converting into pickle friendly Dict
EoniaDB = {}
EuriborDB = {}

for date in dates:
    [create helpers etc for date]
    eonia_curve = PiecewiseLogCubicDiscount(0, TARGET(), helpers, Actual365Fixed(), [] ,[] , 1e-8)
    euribor_curve = PiecewiseLogCubicDiscount(2, TARGET(), helpers+synth_helpers, Actual365Fixed())
   
    nodes = eonia_curve.nodes()
    dates = [dt.datetime(nodes[i][0].year(), nodes[i][0].month(), nodes[i][0].dayOfMonth()) for i in range(len(nodes))]
    rates = [nodes[i][1] for i in range(len(nodes))]
    EoniaDB[date] = zip(dates, rates)
   
    nodes = euribor_curve.nodes()
    dates = [dt.datetime(nodes[i][0].year(), nodes[i][0].month(), nodes[i][0].dayOfMonth()) for i in range(len(nodes))]
    rates = [nodes[i][1] for i in range(len(nodes))]    
    EuriborDB[date] = zip(dates, rates)

   
#%% Saving Database into pickle file

def save_obj(obj, name):
    with open('obj/'+ name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)

obj = EuriborDB
name = 'EuriborDB'
save_obj(obj, name)

obj = EoniaDB
name = 'EoniaDB'
save_obj(obj, name)


#%% Loading Database from pickle file

def load_obj(name):
    with open('obj/' + name + '.pkl', 'rb') as f:
        return pickle.load(f)

name = 'EuriborDB2'
LoadedEuriborDB = load_obj(name)

name = 'EoniaDB2'
LoadedEoniaDB = load_obj(name)


#%% Rebuilding Curve for a specific date
 LoadedPyNodes = LoadedEuriborDB[date]
 LoadedQDate = [Date(LoadedPyNodes[i][0].day, LoadedPyNodes[i][0].month, LoadedPyNodes[i][0].year) for i in range(len(LoadedPyNodes)) ]
 LoadedRates = [LoadedPyNodes[i][1] for i in range(len(LoadedPyNodes))]
 euribor_curve2 = LogCubicDiscountCurve(LoadedQDate, LoadedRates, Actual365Fixed(), TARGET())    
       
 LoadedPyNodes = LoadedEoniaDB[date]
 LoadedQDate = [Date(LoadedPyNodes[i][0].day, LoadedPyNodes[i][0].month, LoadedPyNodes[i][0].year) for i in range(len(LoadedPyNodes)) ]
 LoadedRates = [LoadedPyNodes[i][1] for i in range(len(LoadedPyNodes))]
 eonia_curve2 = LogCubicDiscountCurve(LoadedQDate, LoadedRates, Actual365Fixed(), TARGET())