aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/portfolio.py18
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")