aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/option.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/option.py')
-rw-r--r--python/analytics/option.py25
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