aboutsummaryrefslogtreecommitdiffstats
path: root/python/globeop_reports.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/globeop_reports.py')
-rw-r--r--python/globeop_reports.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/python/globeop_reports.py b/python/globeop_reports.py
new file mode 100644
index 00000000..bf9e627b
--- /dev/null
+++ b/python/globeop_reports.py
@@ -0,0 +1,68 @@
+from glob import iglob
+import os
+import pandas as pd
+import datetime
+from db import dbengine
+import load_globeop_report as load_globeop
+
+def get_monthly_pnl():
+ sql_string = "SELECT * FROM pnl_reports"
+ df_pnl = pd.read_sql_query(sql_string, dbengine('dawndb'), parse_dates=['date'])
+ df_pnl = df_pnl.set_index('date')
+ zero_factor = df_pnl[df_pnl.invid.str.match('^.{9}_A$')]['invid'].unique()
+ df_pnl.invid = df_pnl.invid.apply(lambda x: x[:9] if x in zero_factor.tolist() else x)
+ pnl_cols = ['bookunrealmtm', 'bookrealmtm', 'bookrealincome', 'bookunrealincome', 'totalbookpl']
+ df_pnl = df_pnl.reset_index().groupby(['date','invid']).sum().reset_index('invid')
+ df_pnl = df_pnl.groupby('invid').resample('M').last()[['mtd'+col for col in pnl_cols]]
+ df_pnl.index.names = ['identifier','date']
+ return df_pnl.reset_index()
+
+def curr_port_PNL(date = datetime.date.today(), asset_class='Subprime'):
+ sql_string = "SELECT * FROM risk_positions(%s, %s) WHERE notional > 0"
+ df_positions = pd.read_sql_query(sql_string, dbengine('dawndb'),params = [date, asset_class])
+ df_pnl = get_monthly_pnl()
+ df_all = df_positions.merge(df_pnl.groupby('identifier').sum().reset_index(), on=['identifier'])
+ return df_all
+
+def check_valuation():
+ sql_string = "SELECT * FROM valuation_reports"
+ df_val = pd.read_sql_query(sql_string, dbengine('dawndb'), parse_dates=['periodenddate'])
+ nav = df_val[df_val.fund == 'SERCGMAST'].groupby('periodenddate')['endbooknav'].sum()
+ return nav.resample('M').last()
+
+def trade_performance():
+ sql_string = "SELECT * FROM bonds"
+ df_trades = pd.read_sql_query(sql_string, dbengine('dawndb'), parse_dates= ['lastupdate', 'trade_date','settle_date'])
+ df_trades = df_trades[df_trades.asset_class == 'Subprime']
+ df_pnl = get_monthly_pnl()
+
+ df_sell = df_trades[df_trades.buysell == False].groupby('identifier').last().reset_index()
+ df_sell.identifier = df_sell.identifier.str[:9]
+ df_buy = df_trades[df_trades.buysell == True].groupby('identifier').last().reset_index()
+
+ df_all = df_sell.merge(df_pnl.groupby('identifier').sum().reset_index(), on=['identifier'])
+
+ #now build up the table
+ g = df_buy.groupby('identifier').sum()
+ init_inv = g.principal_payment + g.accrued_payment
+ init_inv.name = 'initialinvestment'
+
+ first_buy_date = df_buy.groupby('identifier').first().trade_date
+ first_buy_date.name = 'firstbuydate'
+
+ df_all = df_all.join(init_inv, on='identifier')
+ df_all = df_all.join(first_buy_date, on='identifier')
+ df_all['percent_gain'] = df_all.mtdtotalbookpl / df_all.initialinvestment
+ df_all['days_held'] = df_all.trade_date - df_all.firstbuydate
+
+ df_all = df_all.sort_values('trade_date', ascending=False)
+
+ table = pd.DataFrame()
+ #table['average_days_held'] = df_all.days_held.mean()
+
+ return df_all
+
+if __name__=='__main__':
+ nav = check_valuation()
+ df_pnl = trade_performance()
+