aboutsummaryrefslogtreecommitdiffstats
path: root/python/yieldcurve.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/yieldcurve.py')
-rw-r--r--python/yieldcurve.py26
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):