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.py25
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)