aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/calibrate_swaption.py40
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)