aboutsummaryrefslogtreecommitdiffstats
path: root/python/exploration/portfolio_example.py
blob: ebaa6b3b17981af00366760b104d80fb696c5660 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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-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:
#     portf.trade_date = date.date()
#     try:
#         portf.mark(source_list=["BAML", "GS"], model="black")
#     except ValueError:
#         pnl.append(None)
#         continue
#     else:
#         pnl.append(portf.pnl)
# df = pd.DataFrame({'pnl': pnl}, index=date_range)