aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/credit_default_swap.py36
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):