diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/curve_trades.py | 4 | ||||
| -rw-r--r-- | python/analytics/index_data.py | 21 |
2 files changed, 16 insertions, 9 deletions
diff --git a/python/analytics/curve_trades.py b/python/analytics/curve_trades.py index 52589961..455d1422 100644 --- a/python/analytics/curve_trades.py +++ b/python/analytics/curve_trades.py @@ -89,8 +89,8 @@ def curve_returns(index='IG', rolling=6): df = index_returns(index=index, series=list(range(otr - rolling, otr + 1)), tenor=['3yr', '5yr', '7yr', '10yr']) # on-the-run returns - df = df.reset_index().set_index(['date', 'series', 'tenor']) - returns = df.price_return.dropna().unstack(-1).groupby(level='date').nth(-1) + df = df.reset_index('index', drop=True) + returns = df.price_return.dropna().unstack('tenor').groupby(level='date').nth(-1) strategies_return = pd.DataFrame( {'5-10': 1.78 * returns['5yr'] - returns['10yr'], diff --git a/python/analytics/index_data.py b/python/analytics/index_data.py index 6f0a5749..1b652b92 100644 --- a/python/analytics/index_data.py +++ b/python/analytics/index_data.py @@ -94,7 +94,7 @@ def get_index_quotes(index=None, series=None, tenor=None, from_date=None, def index_returns(df=None, index=None, series=None, tenor=None, from_date=None, years=3, per=1): - """computes daily spreads and price returns + """computes spreads and price returns Parameters ---------- @@ -114,11 +114,16 @@ def index_returns(df=None, index=None, series=None, tenor=None, from_date=None, """ if df is None: df = get_index_quotes(index, series, tenor, from_date, years) - df = (df. - groupby(level=['index', 'series', 'tenor', 'version']) - [['closespread', 'closeprice']]. - pct_change(periods=per)) - df.columns = ['spread_return', 'price_return'] + spread_return = (df. + groupby(level=['index', 'series', 'tenor', 'version']). + closespread. + pct_change(periods=per)) + price_return = (df. + groupby(level=['index', 'series', 'tenor', 'version']). + closeprice. + diff() / 100) + df = pd.concat([spread_return, price_return], axis=1, + keys=['spread_return', 'price_return']) df = df.groupby(level=['date', 'index', 'series', 'tenor']).nth(0) coupon_data = pd.read_sql_query("SELECT index, series, tenor, coupon * 1e-4 AS coupon, " "maturity FROM " @@ -126,8 +131,10 @@ def index_returns(df=None, index=None, series=None, tenor=None, from_date=None, _engine, index_col=['index', 'series', 'tenor']) df = df.reset_index('date').join(coupon_data).reset_index('tenor') + # for some reason pandas doesn't keep the categories, so we have to + # do this little dance df.tenor = df.tenor.astype(tenor_t) - df = df.set_index(['tenor'], append=True) + df = df.set_index('tenor', append=True) df['day_frac'] = (df.groupby(level=['index', 'series', 'tenor'])['date']. transform(lambda s: s. diff(). |
