diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/option.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py index 148e0e34..9adbed8b 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -554,13 +554,19 @@ class ProbSurface(QuoteSurface): rec_mid=quotes[['rec_bid','rec_offer']].mean(1), forward_annuity=quotes.expiry.apply(_forward_annuity, args=(self._index,))) - quotes.pay_mid /= quotes.forward_annuity - quotes.rec_mid /= quotes.forward_annuity quotes = quotes.sort_values(['expiry', 'strike']) - prob_pay = np.concatenate([-np.gradient(df.pay_mid, df.strike) - for _, df in quotes.groupby('expiry')]) - prob_rec = np.concatenate([1 - np.gradient(df.rec_mid, df.strike) - for _, df in quotes.groupby('expiry')]) + if 'HY' in self._index.name: + quotes.pay_mid = quotes.pay_mid/100 + quotes.rec_mid = quotes.rec_mid/100 + sign = 1. + else: + quotes.pay_mid /= quotes.forward_annuity + quotes.rec_mid /= quotes.forward_annuity + sign = -1. + prob_pay = np.concatenate([sign * np.gradient(df.pay_mid, df.strike) + for _, df in quotes.groupby('expiry')]) + prob_rec = np.concatenate([1 + sign * np.gradient(df.rec_mid, df.strike) + for _, df in quotes.groupby('expiry')]) prob = bn.nanmean(np.stack([prob_pay, prob_rec]), axis=0) prob = np.clip(prob, 1e-10, None, out=prob) f = SmoothBivariateSpline(quotes.time.values[~np.isnan(prob)], |
