diff options
Diffstat (limited to 'python/analytics/tranche_basket.py')
| -rw-r--r-- | python/analytics/tranche_basket.py | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py index 25e3f4c9..35efac81 100644 --- a/python/analytics/tranche_basket.py +++ b/python/analytics/tranche_basket.py @@ -14,7 +14,14 @@ from .tranche_functions import ( ) from .exceptions import MissingDataError from .index_data import get_tranche_quotes -from .utils import memoize, build_table, bus_day, next_twentieth +from .utils import ( + memoize, + build_table, + bus_day, + next_twentieth, + get_external_nav, + run_local, +) from collections import namedtuple from . import dawn_engine, serenitas_engine, serenitas_pool from copy import deepcopy @@ -243,6 +250,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 try: instance.reset_pv() except ValueError: @@ -353,12 +361,23 @@ class DualCorrTranche: @property def pv(self): pl, cl = self._pv() - _pv = -self.notional * self.tranche_factor * (pl + cl) - return _pv + if not analytics._local: + return -self.notional * self.tranche_factor * (pl + cl) * self._index._fx + else: + return -self.notional * self.tranche_factor * (pl + cl) + + @property + def accrued(self): + if not analytics._local: + return ( + -self.notional * self.tranche_factor * self._accrued * self._index._fx + ) + else: + return -self.notional * self.tranche_factor * self._accrued @property def clean_pv(self): - return self.pv + self.notional * self._accrued + return self.pv - self.accrued def _pv(self, epsilon=0.0): """ computes coupon leg, protection leg and bond price. @@ -386,7 +405,10 @@ class DualCorrTranche: def upfront(self): """returns protection upfront in points""" pl, cl = self._pv() - return -100 * (pl + cl - self._accrued) + if not analytics._local: + return -100 * (pl + cl - self._accrued) * self._index._fx + else: + return -100 * (pl + cl - self._accrued) @property def price(self): @@ -403,7 +425,10 @@ class DualCorrTranche: print(r.converged) def reset_pv(self): - self._original_clean_pv = self.clean_pv + with run_local(): + _pv = self.clean_pv + self._original_local_clean_pv = _pv + self._original_clean_pv = _pv * self._index._fx self._trade_date = self.value_date def singlename_spreads(self): |
