aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/tranche_basket.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/tranche_basket.py')
-rw-r--r--python/analytics/tranche_basket.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py
index de1ba315..5a2289e5 100644
--- a/python/analytics/tranche_basket.py
+++ b/python/analytics/tranche_basket.py
@@ -4,7 +4,7 @@ from .tranche_functions import (
BCloss_recov_trunc, tranche_cl, tranche_pl, tranche_pl_trunc,
tranche_cl_trunc)
from .index_data import get_tranche_quotes
-from .utils import memoize, build_table
+from .utils import memoize, build_table, bus_day
from collections import namedtuple
from .db import dawn_engine, serenitas_engine, serenitas_pool
from copy import deepcopy
@@ -16,10 +16,12 @@ from scipy.interpolate import CubicSpline, PchipInterpolator
from scipy.special import logit, expit
import datetime
+import logging
import pandas as pd
import numpy as np
import analytics
+logger = logging.getLogger(__name__)
class Skew():
_cache = LRU(64)
@@ -379,7 +381,7 @@ class DualCorrTranche():
try:
ref, = c.fetchone()
except TypeError:
- raise ValueError("No quote for that date")
+ raise ValueError(f"No quote for date {self.value_date}")
try:
self._index.tweak([ref])
except NameError:
@@ -388,9 +390,23 @@ class DualCorrTranche():
if 'skew' in args:
self._skew = el, skew_fun = args['skew']
else:
- self._skew = el, skew_fun = Skew.from_desc(self.index_type, self.series, self.tenor,
- value_date=self.value_date)
- K_index_eq = np.clip(el/self.expected_loss() * self.K, None, .999)
+ d = self.value_date
+ i = 0
+ while i < 5:
+ try:
+ self._skew = el, skew_fun = (Skew.
+ from_desc(self.index_type,
+ self.series,
+ self.tenor,
+ value_date=d))
+ except ValueError as e:
+ logger.error(str(e))
+ d -= bus_day
+ logger.info(f"trying {d}")
+ i += 1
+ else:
+ break
+ K_index_eq = self.K / self.expected_loss()
self.rho = self._skew(K_index_eq)
def jump_to_default(self, skew):