aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/curve_trades.py4
-rw-r--r--python/analytics/index_data.py21
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().