diff options
Diffstat (limited to 'python/analytics/tranche_basket.py')
| -rw-r--r-- | python/analytics/tranche_basket.py | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py index fce6cfe6..9640dc81 100644 --- a/python/analytics/tranche_basket.py +++ b/python/analytics/tranche_basket.py @@ -168,6 +168,7 @@ class DualCorrTranche: maturity: datetime.date = None, value_date: pd.Timestamp = pd.Timestamp.today().normalize(), use_trunc=False, + trade_id=None, ): if all((redcode, maturity)): @@ -206,7 +207,7 @@ class DualCorrTranche: value_date, 1.0, self._index.yc, self._index.maturities[0], rule=rule ) self.use_trunc = use_trunc - self._tranche_id = None + self.trade_id = trade_id self._ignore_hash = set(["_Z", "_w", "cs", "_cache", "_Legs", "_ignore_hash"]) @property @@ -274,7 +275,7 @@ class DualCorrTranche: if rec.index_ref is not None: instance._index.tweak([rec.index_ref]) instance._trade_date = rec.trade_date - instance._trade_id = trade_id + instance.trade_id = trade_id try: instance.reset_pv() except ValueError: @@ -581,7 +582,7 @@ class DualCorrTranche: if kwargs.pop("use_external", False): try: _pv = get_external_nav( - dawn_engine, self._trade_id, self.value_date, "cds" + dawn_engine, self.trade_id, self.value_date, "cds" ) if analytics._local: _pv /= self._index._fx @@ -633,22 +634,26 @@ class DualCorrTranche: self._skew = kwargs["skew"] else: d = self.value_date - i = 0 - while i < 10: + retry = 0 + while retry < 5: try: self._skew = Skew.from_desc( self.index_type, self.series, self.tenor, value_date=d ) except MissingDataError as e: logger.warning(str(e)) - d -= bus_day - logger.info(f"trying {d.date()}") - i += 1 + d = (d - bus_day).date() + logger.info(f"trying {d}") + retry += 1 else: break else: - logger.error( - f"Could not find skew data for {self.index_type}{self.series}" + # we try skew from index one year newer + self._skew = Skew.from_desc( + self.index_type, + self.series + 2, + self.tenor, + value_date=self.value_date, ) moneyness_eq = self.K / self.expected_loss() self.rho = self._skew(moneyness_eq) |
