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())