from .index import Index from .option import BlackSwaption 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 set_original_pv(self): for t in self.trades: t.set_original_pv() @property def trade_date(self): return self.index.trade_date @trade_date.setter def trade_date(self, d): self.index.trade_date = d @property def ref(self): return self.index.ref @ref.setter def ref(self, val): self.index.ref = val @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)