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.py81
1 files changed, 50 insertions, 31 deletions
diff --git a/python/cds_curve.py b/python/cds_curve.py
index 2e0cf73f..5f8ff1cf 100644
--- a/python/cds_curve.py
+++ b/python/cds_curve.py
@@ -7,41 +7,52 @@ import pandas as pd
from utils.db import dbconn
-def all_curves_pv(curves, today_date, jp_yc, start_date, step_in_date, value_date, maturities):
+def all_curves_pv(
+ curves, today_date, jp_yc, start_date, step_in_date, value_date, maturities
+):
r = {}
for d in maturities:
tenor = {}
- coupon_leg = FeeLeg(start_date, d, True, 1., 1.)
+ coupon_leg = FeeLeg(start_date, d, True, 1.0, 1.0)
default_leg = ContingentLeg(start_date, d, True)
accrued = coupon_leg.accrued(step_in_date)
tickers = []
data = []
for sc in curves:
- coupon_leg_pv = coupon_leg.pv(today_date, step_in_date, value_date, jp_yc, sc, False)
- default_leg_pv = default_leg.pv(today_date, step_in_date, value_date,
- jp_yc, sc, 0.4)
+ coupon_leg_pv = coupon_leg.pv(
+ today_date, step_in_date, value_date, jp_yc, sc, False
+ )
+ default_leg_pv = default_leg.pv(
+ today_date, step_in_date, value_date, jp_yc, sc, 0.4
+ )
tickers.append(sc.ticker)
- data.append((coupon_leg_pv-accrued, default_leg_pv))
- r[pd.Timestamp(d)] = pd.DataFrame.from_records(data,
- index=tickers,
- columns=['duration', 'protection_pv'])
+ data.append((coupon_leg_pv - accrued, default_leg_pv))
+ r[pd.Timestamp(d)] = pd.DataFrame.from_records(
+ data, index=tickers, columns=["duration", "protection_pv"]
+ )
return pd.concat(r, axis=1).swaplevel(axis=1).sort_index(axis=1, level=0)
-def calibrate_portfolio(index_type, series, tenors=['3yr', '5yr', '7yr', '10yr'],
- start_date=None):
+def calibrate_portfolio(
+ index_type, series, tenors=["3yr", "5yr", "7yr", "10yr"], start_date=None
+):
try:
index = MarkitBasketIndex(index_type, series, tenors)
except ValueError:
return
if start_date:
index.index_quotes = index.index_quotes[start_date:]
- for value_date, v in index.index_quotes.groupby('date')['id']:
+ for value_date, v in index.index_quotes.groupby("date")["id"]:
index.value_date = value_date
index.tweak()
- df = pd.concat([index.theta(),
- index.duration(),
- pd.Series(index.tweaks, index=tenors, name='tweak')], axis=1)
+ df = pd.concat(
+ [
+ index.theta(),
+ index.duration(),
+ pd.Series(index.tweaks, index=tenors, name="tweak"),
+ ],
+ axis=1,
+ )
for (_, t), id in v.items():
yield (id, df.loc[t])
@@ -51,26 +62,33 @@ if __name__ == "__main__":
import argparse
import logging
import os
+
parser = argparse.ArgumentParser()
- parser.add_argument('index', help="index type (IG, HY, EU or XO)")
- parser.add_argument('series', help="series", type=int)
- parser.add_argument('--latest', required=False, action="store_true")
+ parser.add_argument("index", help="index type (IG, HY, EU or XO)")
+ parser.add_argument("series", help="series", type=int)
+ parser.add_argument("--latest", required=False, action="store_true")
args = parser.parse_args()
index, series = args.index, args.series
- conn = dbconn('serenitasdb')
+ conn = dbconn("serenitasdb")
if args.latest:
with conn.cursor() as c:
- c.execute("SELECT max(date) FROM index_quotes_pre "
- "RIGHT JOIN index_risk2 USING (id) "
- "WHERE index=%s AND series=%s "
- "AND tenor in ('3yr', '5yr', '7yr', '10yr')",
- (index, series))
+ c.execute(
+ "SELECT max(date) FROM index_quotes_pre "
+ "RIGHT JOIN index_risk2 USING (id) "
+ "WHERE index=%s AND series=%s "
+ "AND tenor in ('3yr', '5yr', '7yr', '10yr')",
+ (index, series),
+ )
start_date, = c.fetchone()
else:
start_date = None
- fh = logging.FileHandler(filename=os.path.join(os.getenv("LOG_DIR"), "index_curves.log"))
- formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
+ fh = logging.FileHandler(
+ filename=os.path.join(os.getenv("LOG_DIR"), "index_curves.log")
+ )
+ formatter = logging.Formatter(
+ "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
+ )
fh.setFormatter(formatter)
loggers = [logging.getLogger("analytics"), logging.getLogger("index_curves")]
for logger in loggers:
@@ -78,12 +96,13 @@ if __name__ == "__main__":
logger.addHandler(fh)
loggers[1].info(f"filling {index} {series}")
- g = calibrate_portfolio(index, series, ['3yr', '5yr', '7yr', '10yr'],
- start_date)
+ g = calibrate_portfolio(index, series, ["3yr", "5yr", "7yr", "10yr"], start_date)
with conn.cursor() as c:
for id, t in g:
- c.execute("INSERT INTO index_risk2 VALUES(%s, %s, %s, %s) ON CONFLICT (id) "
- "DO UPDATE SET theta=%s, duration=%s, tweak=%s",
- (id,) + tuple(t) + tuple(t))
+ c.execute(
+ "INSERT INTO index_risk2 VALUES(%s, %s, %s, %s) ON CONFLICT (id) "
+ "DO UPDATE SET theta=%s, duration=%s, tweak=%s",
+ (id,) + tuple(t) + tuple(t),
+ )
conn.commit()
conn.close()