diff options
Diffstat (limited to 'python/analytics/option.py')
| -rw-r--r-- | python/analytics/option.py | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py index 23680b5b..e7c87fbb 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -12,11 +12,6 @@ from .utils import GHquad, build_table from .index import g, ForwardIndex, Index, engine from yieldcurve import roll_yc from pandas.tseries.offsets import BDay -try: - import cPickle as pickle -except ImportError: - import pickle -from pickle import dumps from functools import wraps from pyisda.curve import SpreadCurve @@ -28,7 +23,8 @@ from scipy.interpolate import SmoothBivariateSpline from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt -from joblib import Parallel, delayed +from multiprocessing import Pool +from functools import partial from itertools import chain def calib(S0, fp, exercise_date, exercise_date_settle, @@ -381,7 +377,7 @@ class Swaption(BlackSwaption): def handle(x): self.sigma = x - return self.pv - val + return self._direction * (self.pv - val) eta = 1.1 a = self.sigma while True: @@ -483,15 +479,14 @@ class VolatilitySurface(ForwardIndex): quotes = quotes.assign(mid = quotes[['pay_bid','pay_offer']].mean(1) * 1e-4) else: quotes = quotes.assign(mid = quotes[['rec_bid','rec_offer']].mean(1) * 1e-4) - for expiry, df in quotes.groupby(['expiry']): - atm_strike = ATMstrike(self._index, expiry.date()) - option = swaption_class(self._index, expiry.date(), 100, option_type) + with Pool(4) as p: + for expiry, df in quotes.groupby(['expiry']): + atm_strike = ATMstrike(self._index, expiry.date()) + option = swaption_class(self._index, expiry.date(), 100, option_type) - T.append(option.T * np.ones(df.shape[0])) - moneyness.append(df.strike.values / atm_strike) - r.append(Parallel(n_jobs=4)( - delayed(compute_vol)(option, strike, mid) for strike, mid in - df[['strike', 'mid']].values)) + T.append(option.T * np.ones(df.shape[0])) + moneyness.append(df.strike.values / atm_strike) + r.append(p.starmap(partial(compute_vol, option), df[['strike', 'mid']].values)) r = np.fromiter(chain(*r), np.float, quotes.shape[0]) f = SmoothBivariateSpline(np.hstack(T), np.hstack(moneyness), r) self._surfaces[surface_id] = f |
