diff options
Diffstat (limited to 'python/analytics/credit_default_swap.py')
| -rw-r--r-- | python/analytics/credit_default_swap.py | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/python/analytics/credit_default_swap.py b/python/analytics/credit_default_swap.py index d2a4b2b0..20330365 100644 --- a/python/analytics/credit_default_swap.py +++ b/python/analytics/credit_default_swap.py @@ -230,6 +230,10 @@ class CreditDefaultSwap: return self.notional * self._factor * self._clean_pv @property + def local_clean_pv(self): + return self.clean_pv * get_fx(self.currency, self.value_date) + + @property def price(self): return self._price @@ -363,6 +367,9 @@ class CreditDefaultSwap: def reset_pv(self): self._original_clean_pv = self._clean_pv + self._original_local_clean_pv = self._clean_pv * get_fx( + self.currency, self.value_date + ) self._trade_date = self._value_date @property @@ -371,10 +378,31 @@ class CreditDefaultSwap: raise ValueError("original pv not set") else: days_accrued = (self.value_date - self._trade_date).days / 360 - return self.notional * self._factor * ( - self._clean_pv - - self._original_clean_pv - - days_accrued * self.fixed_rate * 1e-4 + return ( + self.notional + * self._factor + * ( + self._clean_pv + - self._original_clean_pv + - days_accrued * self.fixed_rate * 1e-4 + ) + ) + + @property + def local_pnl(self): + if self.currency == "USD": + return self.pnl + else: + days_accrued = (self.value_date - self._trade_date).days / 360 + return ( + self.notional + * self._factor + * ( + (self._clean_pv - days_accrued * self.fixed_rate * 1e-4) + * get_fx(self.currency, self.value_date) + - self._original_local_clean_pv + - days_accrued * self.fixed_rate * 1e-4 + ) ) def notify(self): |
