aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/portfolio.py36
1 files changed, 29 insertions, 7 deletions
diff --git a/python/analytics/portfolio.py b/python/analytics/portfolio.py
index 00ab09b1..3d89ae11 100644
--- a/python/analytics/portfolio.py
+++ b/python/analytics/portfolio.py
@@ -1,23 +1,45 @@
+from .index import Index
+
class Portfolio:
def __init__(self, trades):
self.trades = trades
+ self.index = next(t for t in trades if isinstance(t, Index))
+ self.swaptions = (t for t in trades if isinstance(t, BlackSwaption))
@property
def pnl(self):
return sum(t.pnl for t in self.trades)
- def make_original(self):
+ def set_original_pv(self):
for t in self.trades:
- t.make_original()
+ t.set_original_pv()
+
+ @property
+ def trade_date(self):
+ return self.index.trade_date
+
+ @trade_date.setter
+ def trade_date(self, d):
+ print("pomme")
+ self.index.trade_date = d
@property
def ref(self):
- return self.trades[0].ref
+ return self.index.ref
@ref.setter
def ref(self, val):
- for t in self.trades:
- t.ref = val
+ self.index.ref = val
- def delta(self, val):
- sum([getattr(t, 'delta', 1) * t.notional for t in self.trades])
+ @property
+ def delta(self):
+ """returns the equivalent protection notional"""
+ return sum([getattr(t, 'delta', -t._direction) * t.notional for t in self.trades])
+
+ @property
+ def gamma(self):
+ return sum([getattr(t, 'gamma', 0) * t.notional for t in self.trades])
+
+ @property
+ def dv01(self):
+ return sum(t.dv01 for t in self.trades)