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