diff options
| -rw-r--r-- | python/exploration/VaR.py | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/python/exploration/VaR.py b/python/exploration/VaR.py index 1e6a02a3..09446591 100644 --- a/python/exploration/VaR.py +++ b/python/exploration/VaR.py @@ -1,11 +1,7 @@ from analytics.curve_trades import on_the_run -from analytics.index_data import index_returns, get_index_quotes, index_returns -from analytics import Portfolio -from db import dbengine, dbconn -from pandas.tseries.offsets import BDay, BMonthEnd -from copy import deepcopy +from analytics.index_data import get_index_quotes, index_returns +from db import dbengine -import numpy as np import pandas as pd import math import datetime @@ -13,15 +9,16 @@ import datetime dawndb = dbengine('dawndb') serenitasdb = dbengine('serenitasdb') + def hist_var(portf, index_type='IG', quantile=.05, years=5): df = index_returns(index=index_type, years=years, - tenor=['3yr', '5yr', '7yr', '10yr']) + tenor=['3yr', '5yr', '7yr', '10yr']) df = (df.reset_index(['index'], drop=True). - reorder_levels(['date', 'series', 'tenor'])) + reorder_levels(['date', 'series', 'tenor'])) returns = df.spread_return.dropna().reset_index('series') returns['dist_on_the_run'] = (returns. - groupby('date')['series']. - transform(lambda x: x.max() - x)) + groupby('date')['series']. + transform(lambda x: x.max() - x)) del returns['series'] returns = returns.set_index('dist_on_the_run', append=True).unstack('tenor') returns.columns = returns.columns.droplevel(0) @@ -41,13 +38,14 @@ def hist_var(portf, index_type='IG', quantile=.05, years=5): pnl = pd.DataFrame.from_records(r, columns=['date', 'pnl'], index=['date']) return pnl.quantile(quantile) * math.sqrt(12) -def rel_spread_diff(report_date = datetime.date.today(), index='HY', rolling=10): + +def rel_spread_diff(report_date=datetime.date.today(), index='HY', rolling=10): otr = on_the_run(index) ## look at spreads df = get_index_quotes(index, list(range(otr - rolling, otr + 1)), tenor=['3yr', '5yr', '7yr', '10yr'], years=5) - duration = df.duration.xs((report_date,'5yr', otr), level = ['date','tenor', 'series'])[-1] + duration = df.duration.xs((report_date, '5yr', otr), level=['date', 'tenor', 'series'])[-1] df = df.xs('5yr', level='tenor')['closespread'].groupby(['date']).last() df = df.loc['2013-01-15':report_date] @@ -56,15 +54,14 @@ def rel_spread_diff(report_date = datetime.date.today(), index='HY', rolling=10) return df.groupby('date').last(), curr_spread, duration -def get_pos(report_date): - strats = ["HEDGE_CSO", "HEDGE_MBS", "HEDGE_CLO", "HEDGE_MAC", - "SER_IGINX", "SER_HYINX", "SER_IGCURVE", "SER_ITRXCURVE", - "IGOPTDEL", "HYOPTDEL"] - r = {} - for st in strats: - r[st] = pd.read_sql_query("SELECT * from list_cds_marks(%s, %s)", - dawndb, params=(report_date, st)) - return pd.concat(r, names=['strategy']).reset_index() + +def get_pos(report_date, strategy=None): + if strategy is None: + return pd.read_sql_query("SELECT * from list_cds_marks(%s)", + dawndb, params=(report_date,)) + else: + return pd.read_sql_query("SELECT * from list_cds_marks(%s, %s)", + dawndb, params=(report_date, strategy)) def cleared_cds_margins(report_date=datetime.date.today()): |
