aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/exploration/curve_trades.py14
-rw-r--r--python/exploration/portfolio_example.py46
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: