diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/portfolio.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/python/analytics/portfolio.py b/python/analytics/portfolio.py index 71a42947..0ba7d55a 100644 --- a/python/analytics/portfolio.py +++ b/python/analytics/portfolio.py @@ -10,7 +10,7 @@ logger = logging.getLogger(__name__) def portf_repr(method): def f(*args): - obj = args[0] + portf = args[0] thousands = "{:,.2f}".format def percent(x): @@ -19,7 +19,7 @@ def portf_repr(method): else: return f"{100*x:.2f}%" - header = f"Portfolio {obj.value_date}\n\n" + header = f"Portfolio {portf.value_date}\n\n" kwargs = { "formatters": { "Notional": thousands, @@ -41,7 +41,7 @@ def portf_repr(method): } if method == "string": kwargs["line_width"] = 100 - s = getattr(obj._todf().dropna(axis=1, how="all"), "to_" + method)(**kwargs) + s = getattr(portf._todf().dropna(axis=1, how="all"), "to_" + method)(**kwargs) return header + s return f @@ -50,7 +50,10 @@ def portf_repr(method): class Portfolio: def __init__(self, trades, trade_ids=None): self.trades = trades - self.trade_ids = trade_ids + if trade_ids is not None: + self.trade_ids = trade_ids + else: + self.trade_ids = (None,) * len(trades) if trades: value_dates = set(t.value_date for t in self.trades) self._value_date = value_dates.pop() @@ -125,9 +128,10 @@ class Portfolio: self._value_date = d def mark(self, **kwargs): - for t in self.trades: + for tid, t in self.items(): try: t.mark(**kwargs) + logger.debug(f"marking {tid} to {t.pv}") except Exception as e: raise @@ -321,7 +325,9 @@ class Portfolio: index = [tid[1] for tid in self.trade_ids] else: index = self.trade_ids - return pd.DataFrame.from_records(rec, columns=headers, index=index) + df = pd.DataFrame.from_records(rec, columns=headers, index=index) + df.index.name = "ids" + return df __repr__ = portf_repr("string") |
