diff options
Diffstat (limited to 'python/calibrate_swaption.py')
| -rw-r--r-- | python/calibrate_swaption.py | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/python/calibrate_swaption.py b/python/calibrate_swaption.py index 6432c5cb..b04b223f 100644 --- a/python/calibrate_swaption.py +++ b/python/calibrate_swaption.py @@ -3,6 +3,7 @@ from analytics import Index, Swaption import pdb from db import dbconn from joblib import Parallel, delayed +from pickle import loads, dumps serenitasdb = dbconn('serenitasdb') data = pd.read_sql("SELECT * from swaption_ref_quotes JOIN swaption_quotes " \ @@ -16,29 +17,28 @@ sigma = {} sql_str = "INSERT INTO swaption_calib VALUES({}) ON CONFLICT DO NOTHING".format(",".join(["%s"] * 9)) -def calib(d, payer, receiver): - payer.strike = d['strike'] - receiver.strike = d['strike'] - payer.pv = (d['pay_bid'] + d['pay_offer'])/2 * 1e-4 - vol_payer = payer.sigma - receiver.pv = (d['rec_bid'] + d['rec_offer'])/2 * 1e-4 - vol_receiver = receiver.sigma - payer.pv_black = (d['pay_bid'] + d['pay_offer'])/2 * 1e-4 - vol_payer_black = payer.sigma - receiver.pv_black = (d['rec_bid'] + d['rec_offer'])/2 * 1e-4 - vol_receiver_black = receiver.sigma - return (d['quotedate'], "IG", 27, expiry, d['strike'], vol_payer, vol_receiver, - vol_payer_black, vol_receiver_black) +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] + return [d['quotedate'], "IG", 27, expiry, d['strike']] + r -for k, v in data.groupby([lambda x: data['quotedate'].loc[x].date(), 'expiry']): +for k, v in data.groupby([data['quotedate'].dt.date, 'expiry']): trade_date, expiry = k - print(trade_date) + print(trade_date, expiry.date()) ig27.trade_date = trade_date - ig27.spread = v['ref'].iat[0] - payer = Swaption(ig27, expiry.date(), 70) - receiver = Swaption(ig27, expiry.date(), 70, "receiver") - r = Parallel(n_jobs=4)(delayed(calib)(d, payer, receiver) for d in - v[['quotedate', 'strike', 'pay_bid', 'pay_offer', 'rec_bid', 'rec_offer']]. + option = Swaption(ig27, expiry.date(), 70) + r = Parallel(n_jobs=4)(delayed(calib)(d, option, expiry.date()) for d in + v[['ref', 'quotedate', 'strike', 'pay_bid', 'pay_offer', + 'rec_bid', 'rec_offer']]. to_dict(orient = 'records')) with serenitasdb.cursor() as c: c.executemany(sql_str, r) |
