diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/calibrate_swaption.py | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/python/calibrate_swaption.py b/python/calibrate_swaption.py index b04b223f..41210a26 100644 --- a/python/calibrate_swaption.py +++ b/python/calibrate_swaption.py @@ -21,14 +21,17 @@ def calib(d, option, expiry): option.strike = d['strike'] option.ref = d['ref'] r = [] - for option_type in ['pay', 'rec']: - option.option_type = 'payer' if option_type == 'pay' else 'receiver' - mid = (d['{}_bid'.format(option_type)] + d['{}_offer'.format(option_type)])/2 * 1e-4 - option.pv = mid - sigma = option.sigma - option.pv_black = mid - sigma_black = option.sigma - r += [sigma, sigma_black] + for pv_type in ['pv', 'pv_black']: + for option_type in ['pay', 'rec']: + mid = (d['{}_bid'.format(option_type)] + d['{}_offer'.format(option_type)])/2 * 1e-4 + option.option_type = 'payer' if option_type == 'pay' else 'receiver' + try: + setattr(option, pv_type, mid) + except ValueError: + r.append(None) + print(d['ref'], d['strike'], mid, option.intrinsic_value) + else: + r.append(option.sigma) return [d['quotedate'], "IG", 27, expiry, d['strike']] + r for k, v in data.groupby([data['quotedate'].dt.date, 'expiry']): |
