diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/cms_spread.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/python/analytics/cms_spread.py b/python/analytics/cms_spread.py index 9ee63e8e..ee26373a 100644 --- a/python/analytics/cms_spread.py +++ b/python/analytics/cms_spread.py @@ -1,6 +1,7 @@ from .tranche_functions import GHquad from math import exp, sqrt, log from .black import cnd_erf +from bbg_helpers import BBG_IP, retrieve_data, init_bbg_session def CMS_spread(T_alpha, X, beta, gamma): Z, w = GHquad(100) @@ -21,3 +22,26 @@ def h(v, X, S_alpha_beta, mu_beta, sigma_alpha_beta, T_alpha): r = (mu_beta - 0.5 * sigma_alpha_beta * sigma_alpha_beta) * T_alpha + \ sigma_alpha_beta * sqrt(T_alpha) * v return X + S_alpha_beta * exp(r) + +def get_fixings(tenor1, tenor2): + securities = [f"USISDA{t:02} Index" for t in [tenor1, tenor2]] + with init_bbg_session(BBG_IP) as session: + field = "PX_LAST" + fixings = retrieve_data(session, securities, field) + return fixings + +def get_forward(tenor1, tenor2, maturity): + yc = YC() + yc.extrapolation = True + + USISDA1 = UsdLiborSwapIsdaFixAm(Period(tenor1, Years), forwarding=yc, discounting=yc) + USISDA1.add_fixing(Date(25, 1, 2018), 0.02781) + USISDA2 = UsdLiborSwapIsdaFixAm(Period(tenor2, Years), forwarding=yc, discounting=yc) + USISDA2.add_fixing(Date(25, 1, 2018), 0.02283) + USFS1 = USISDA1.underlying_swap(maturity) + USFS2 = USISDA2.underlying_swap(maturity) + return USFS1.fair_rate - USFS2.fair_rate + +def globeop_model(sigma0202, sigma0230, rho, forward, strike, maturity): + vol_spread = sqrt(sigma0202**2 + sigma0230**2 - 2 * rho * sigma02 * sigma0230) + return black(forward, strike, T, False) |
