aboutsummaryrefslogtreecommitdiffstats
path: root/python/pnl_explain.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pnl_explain.py')
-rw-r--r--python/pnl_explain.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/python/pnl_explain.py b/python/pnl_explain.py
index 44325893..642fb175 100644
--- a/python/pnl_explain.py
+++ b/python/pnl_explain.py
@@ -13,7 +13,7 @@ def pnl_explain(identifier, start_date = None, end_date = None,
""" if start_date is None, pnl since inception"""
trades = pd.read_sql_query("SELECT * FROM bonds where identifier=%s", engine,
params=(identifier,), parse_dates=['trade_date', 'settle_date'],
- index_col=['settle_date'])
+ index_col=['trade_date'])
marks = pd.read_sql_query("SELECT * FROM marks where identifier=%s", engine,
params=(identifier,), parse_dates = ['date'], index_col='date')
factors = pd.read_sql_query("SELECT * FROM factors_history where identifier=%s", engine,
@@ -65,7 +65,7 @@ def pnl_explain_list(id_list, start_date = None, end_date = None, engine = dbeng
def cds_explain(index, series, tenor, attach = np.nan, detach = np.nan,
start_date = None, end_date = None, engine = dbengine('serenitasdb')):
if np.isnan(attach) or np.isnan(detach):
- quotes = pd.read_sql_query("SELECT date, (100-closeprice) AS upfront " \
+ quotes = pd.read_sql_query("SELECT date, (100-closeprice)/100 AS upfront " \
"FROM index_quotes WHERE index=%s AND series=%s " \
"AND tenor=%s ORDER BY date",
engine, parse_dates=['date'],
@@ -124,7 +124,7 @@ def cds_explain(index, series, tenor, attach = np.nan, detach = np.nan,
coupon = factors.coupon.iat[0]/10000
df.factor = df.factor.bfill()
df.loc[df.factor.isnull(), 'factor'] = factors.factor.iat[-1]
- df['clean_nav'] = df.upfront * df.factor/100
+ df['clean_nav'] = df.upfront * df.factor
df['accrued'] = - df.yearfrac * coupon*df.factor
df['unrealized_accrued'] = df.accrued.diff()
df['realized_accrued'] = -df.unrealized_accrued.where(df.unrealized_accrued.isnull() |
@@ -153,9 +153,12 @@ def cds_explain_strat(strat, start_date, end_date, engine = dbengine("dawndb")):
trade_df = cds_explain(r.index, r.series, r.tenor, r.attach, r.detach,
max(r.trade_date, pd.Timestamp(start_date)), end_date,
engine)
- trade_df.loc[r.upfront_settle_date, 'clean_nav'] +
- trade_df.loc[r.upfront_settle_date, 'realized_pnl'] trade_df.loc[r.upfront_settle_date, 'realized_pnl']
- df[key] = df.get(key, 0) + r.notional * trade_df
+ trade_df = r.notional*trade_df
+ if pd.Timestamp(start_date) <= r.trade_date:
+ extra_pnl = trade_df.clean_nav.iat[0]+trade_df.accrued.iat[2] + r.upfront
+ trade_df.unrealized_pnl.iat[2] = extra_pnl
+ trade_df = trade_df.iloc[2:]
+ df[key] = df.get(key, 0) + trade_df
return pd.concat(df)
if __name__=="__main__":
@@ -165,5 +168,5 @@ if __name__=="__main__":
df = pnl_explain_list(clo_list.identifier.tolist(), '2015-10-30', '2015-11-30', engine)
df = pd.concat(df)
df_agg = df.groupby(level=1).sum()
- cds_df = cds_explain_strat('SER_IGCURVE', '2015-09-01', '2015-12-08', engine)
+ cds_df = cds_explain_strat('SER_IGMEZ', '2014-09-18', '2015-12-08', engine)
#cds_df = cds_explain('HY', 21, '5yr', 25, 35, '2014-07-18')