diff options
Diffstat (limited to 'python/yieldcurve.py')
| -rw-r--r-- | python/yieldcurve.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py index dea4036b..3a209f1e 100644 --- a/python/yieldcurve.py +++ b/python/yieldcurve.py @@ -1,8 +1,10 @@ from common import root from contextlib import closing +from itertools import islice import datetime import lz4 import os +import pandas as pd from quantlib.settings import Settings from quantlib.time.api import (WeekendsOnly, Date, Period, Days, Schedule, Annual, Semiannual, today, Actual360, Months, Years, @@ -164,23 +166,29 @@ def ql_to_jp(ql_yc): else: raise RuntimeErrror('QuantLib curve needs to use Discount trait') -def build_curves(): +def build_curves(currency="USD"): settings = Settings() calendar = WeekendsOnly() - isda_ibor = IborIndex("IsdaIbor", Period(3, Months), 2, USDCurrency(), calendar, - ModifiedFollowing, False, Actual360()) - fix_freq = Semiannual - - quotes = [SimpleQuote() for c in USD_rates.columns] - gen = zip(quotes, USD_rates.columns) + if currency == "USD": + isda_ibor = IborIndex("IsdaIbor", Period(3, Months), 2, USDCurrency(), calendar, + ModifiedFollowing, False, Actual360()) + fix_freq = Semiannual + elif currency == "EUR": + isda_ibor = IborIndex("IsdaIbor", Period(6, Months), 2, EURCurrency(), calendar, + ModifiedFollowing, False, Actual360()) + fix_freq = Annual + engine = dbengine('serenitasdb') + rates = pd.read_sql_table('{}_rates'.format(currency.lower()), engine, index_col='effective_date') + quotes = [SimpleQuote() for c in rates.columns] + gen = zip(quotes, rates.columns) deps = [DepositRateHelper(q, Period(t), 2, calendar, ModifiedFollowing, False, Actual360()) for q, t in islice(gen, 6)] swaps = [SwapRateHelper.from_tenor(q, Period(t), calendar, fix_freq, ModifiedFollowing, Thirty360(), isda_ibor) for q, t in gen] - sql_str = "INSERT INTO USD_curves VALUES(%s, %s) ON CONFLICT DO NOTHING" + sql_str = "INSERT INTO {}_curves VALUES(%s, %s) ON CONFLICT DO NOTHING".format(currency) conn = dbconn('serenitasdb') - for effective_date, curve_data in USD_rates.iterrows(): + for effective_date, curve_data in rates.iterrows(): print(effective_date) settings.evaluation_date = Date.from_datetime(effective_date) for q, val in zip(quotes, curve_data): |
