diff options
| -rw-r--r-- | python/cds_curve.py | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/python/cds_curve.py b/python/cds_curve.py index ac4ba8e7..7408e0e1 100644 --- a/python/cds_curve.py +++ b/python/cds_curve.py @@ -8,6 +8,7 @@ import math import numpy as np import pandas as pd +from dateutil.relativedelta import relativedelta from yieldcurve import YC, ql_to_jp, _USD_curves from quantlib.settings import Settings from quantlib.time.api import Date @@ -64,7 +65,7 @@ def get_singlenames_curves(index_type, series, trade_date): step_in_date = trade_date + datetime.timedelta(days=1) value_date = pd.Timestamp(trade_date) + 3* BDay() args = (trade_date, jp_yc, start_date, step_in_date, value_date, end_dates) - curves = build_curves(sn_quotes, args) + curves = build_curves_dist(sn_quotes, args) return curves, args def all_curves_pv(curves, today_date, jp_yc, start_date, step_in_date, value_date, maturities): @@ -150,8 +151,11 @@ def calibrate_portfolio(index_type, series, tenors=['3yr', '5yr', '7yr', '10yr'] #tweak the curves in place index.tweak_portfolio(eps, m) duration.append(index.duration(step_in_date, value_date, m, jp_yc)) - theta.append(index.theta(step_in_date, value_date, - m, jp_yc, recovery, coupon)) + if step_in_date > m - relativedelta(years=1): + theta.append(np.NaN) + else: + theta.append(index.theta(step_in_date, value_date, + m, jp_yc, recovery, coupon, index_quote)) tweak.append(eps) r[trade_date] = pd.DataFrame({'duration': duration, 'theta': theta, @@ -160,12 +164,13 @@ def calibrate_portfolio(index_type, series, tenors=['3yr', '5yr', '7yr', '10yr'] if __name__=="__main__": enable_logging() - df = calibrate_portfolio("HY", 25, ['3yr', '5yr', '7yr', '10yr']) - # conn = dbconn('serenitasdb') - # with conn.cursor() as c: - # for k, s in df.iterrows(): - # c.execute("UPDATE index_quotes SET duration2=%s, theta2=%s "\ - # "WHERE date=%s AND tenor=%s AND index=%s AND series=%s", - # (s.duration, s.theta, k[0], k[1], "IG", 22)) - # conn.commit() - # conn.close() + index, series = "IG", 23 + df = calibrate_portfolio(index, series, ['3yr', '5yr', '7yr', '10yr']) + conn = dbconn('serenitasdb') + with conn.cursor() as c: + for k, s in df.iterrows(): + c.execute("UPDATE index_quotes SET duration2=%s, theta2=%s "\ + "WHERE date=%s AND tenor=%s AND index=%s AND series=%s", + (s.duration, s.theta, k[0], k[1], index, series)) + conn.commit() + conn.close() |
