diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/exploration/curve_trades.py | 14 | ||||
| -rw-r--r-- | python/exploration/portfolio_example.py | 46 |
2 files changed, 41 insertions, 19 deletions
diff --git a/python/exploration/curve_trades.py b/python/exploration/curve_trades.py index 1169f215..6a8c6cce 100644 --- a/python/exploration/curve_trades.py +++ b/python/exploration/curve_trades.py @@ -11,3 +11,17 @@ spreads_diff = spreads.diff(axis=1) spreads_diff = spreads_diff.filter([5, 7, 10]) spreads_diff.columns = ['3-5', '5-7', '7-10'] spreads_diff.plot() + +## look at returns +df = index_returns(index='IG', series=[24, 25, 26, 27, 28], tenor=['3yr', '5yr', '7yr', '10yr']) +## on-the-run returns +returns = df.price_return.unstack(-1).dropna().groupby(level='date').nth(-1) +strategy510 = returns['5yr'] - 0.56 * returns['10yr'] +strategy710 = returns['5yr'] - 0.75 * returns['10yr'] +strategy3510 = -2*returns['3yr']+3*returns['5yr'] - returns['10yr'] +monthly_returns510 = strategy510.groupby(pd.TimeGrouper(freq='M')).agg(lambda df:(1+df).prod()-1) +monthly_returns710 = strategy710.groupby(pd.TimeGrouper(freq='M')).agg(lambda df:(1+df).prod()-1) + +sharpe510 = strategy510.mean()/strategy510.std()*math.sqrt(252) +sharpe710 = strategy710.mean()/strategy710.std()*math.sqrt(252) +sharpe3510 = strategy3510.mean()/strategy3510.std()*math.sqrt(252) diff --git a/python/exploration/portfolio_example.py b/python/exploration/portfolio_example.py index d39032d5..ebaa6b3b 100644 --- a/python/exploration/portfolio_example.py +++ b/python/exploration/portfolio_example.py @@ -1,30 +1,38 @@ -from analytics import Portfolio, BlackSwaption, Index, VolatilitySurface, Swaption +from analytics import (Portfolio, BlackSwaption, Index, + VolatilitySurface, Swaption) +from analytics.scenarios import run_portfolio_scenarios import pandas as pd from pandas.tseries.offsets import BDay import numpy as np import datetime -option_delta = Index.from_tradeid(874) -option1 = BlackSwaption.from_tradeid(7, option_delta) -option2 = BlackSwaption.from_tradeid(8, option_delta) - -portf = Portfolio([option1, option2, option_delta]) -date_range = pd.bdate_range(option_delta.trade_date, - pd.Timestamp('2017-04-28'), freq = 'B') -pnl = [] -for date in date_range: - portf.trade_date = date.date() - portf.mark(source_list=["BAML", "GS"], model="black") - pnl.append(portf.pnl) -df = pd.DataFrame({'pnl': pnl}, index=date_range) - -# option_delta = Index.from_tradeid(870) -# option1 = BlackSwaption.from_tradeid(5, option_delta) -# option2 = BlackSwaption.from_tradeid(6, option_delta) +# option_delta = Index.from_tradeid(874) +# option1 = BlackSwaption.from_tradeid(7, option_delta) +# option2 = BlackSwaption.from_tradeid(8, option_delta) # portf = Portfolio([option1, option2, option_delta]) # date_range = pd.bdate_range(option_delta.trade_date, -# pd.Timestamp('2017-04-19'), freq = 'B') +# pd.Timestamp('2017-05-01'), freq = 'B') +# pnl = [] +# for date in date_range: +# portf.trade_date = date.date() +# portf.mark(source_list=["BAML", "GS"], model="black") +# pnl.append(portf.pnl) +# df = pd.DataFrame({'pnl': pnl}, index=date_range) + +option_delta = Index.from_tradeid(870) +option1 = BlackSwaption.from_tradeid(5, option_delta) +option2 = BlackSwaption.from_tradeid(6, option_delta) + +portf = Portfolio([option1, option2, option_delta]) +date_range = pd.bdate_range(option_delta.trade_date, + pd.Timestamp('2017-04-19'), freq = 'W') +vol_shock = np.arange(-0.15, 0.3, 0.01) +spread_shock = np.arange(-0.2, 0.3, 0.01) +vs = VolatilitySurface("IG", 27, trade_date=option_delta.trade_date) +vol_surface = vs[vs.list(model="black")[-1]] +df = run_portfolio_scenarios(portf, date_range, spread_shock, vol_shock, vol_surface, + ['pv', 'delta']) # pnl = [] # for date in date_range: |
