aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/pnl_explain.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/python/pnl_explain.py b/python/pnl_explain.py
index 322d8ac4..83718e1c 100644
--- a/python/pnl_explain.py
+++ b/python/pnl_explain.py
@@ -324,10 +324,13 @@ def get_bond_pv(
positions[["usd_market_value", "int_acc"]] -= positions.groupby(level="identifier")[
["usd_market_value", "int_acc"]
].shift(fill_value=0.0)
- positions = positions.drop(start_date - bus_day)
+ positions = positions.drop(start_date - bus_day, level=0)
cashflows = pd.read_sql_query(
- "SELECT identifier, prev_cpn_date AS date, interest, principal "
- "FROM factors_history WHERE last_pay_date BETWEEN %s AND %s",
+ "SELECT b.identifier, prev_cpn_date AS date, interest, principal "
+ "FROM factors_history fh "
+ "left join (select identifier, figi from securities) b "
+ "on fh.identifier = b.figi "
+ "WHERE last_pay_date BETWEEN %s AND %s",
conn,
params=(start_date, end_date),
index_col=["date", "identifier"],
@@ -339,8 +342,8 @@ def get_bond_pv(
"sum(CASE WHEN buysell THEN -accrued_payment ELSE "
"accrued_payment END) as accrued_payment, "
"asset_class "
- "FROM bonds WHERE trade_date BETWEEN %s AND %s "
- "AND fund=%s "
+ "FROM bond_trades WHERE trade_date BETWEEN %s AND %s "
+ f"AND fund=%s "
"group by date, identifier, asset_class",
conn,
params=(start_date, end_date, fund),
@@ -350,6 +353,8 @@ def get_bond_pv(
trades = trades[trades.asset_class == asset_class]
trades.drop("asset_class", axis=1, inplace=True)
df = positions.join([cashflows, trades])
+ df = positions.join(cashflows)
+ df = df.join(trades)
df.interest *= df.notional / 100
df.principal *= df.notional / 100
return df
@@ -390,6 +395,7 @@ if __name__ == "__main__":
from serenitas.utils.db import dbconn
from itertools import chain
+ serenitas.analytics._local = False
dawndb = dbconn("dawndb")
parser = argparse.ArgumentParser()
parser.add_argument("start_date", type=datetime.datetime.fromisoformat)