diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/quote_parsing/parse_emails.py | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/python/quote_parsing/parse_emails.py b/python/quote_parsing/parse_emails.py index 551db853..ad9052ee 100644 --- a/python/quote_parsing/parse_emails.py +++ b/python/quote_parsing/parse_emails.py @@ -539,7 +539,7 @@ def parse_gs(fh, index_desc): if line.startswith("Expiry"): if m := pat.match(line): expiry, fwdprice, fwdspread = m.groups() - expiry = pd.to_datetime(expiry, format="%d%b%y") + expiry = datetime.datetime.strptime(expiry, "%d%b%y") fwd_index.append( { **index_desc, @@ -680,12 +680,13 @@ def parse_jpm(fh, index_desc): return option_stack, fwd_index -def parse_gs_block_eu(fh, indextype): +def parse_gs_eu_block(fh, indextype): indextype = "XO" r = [] for line in fh: + print(line) line = line.strip() - if line == "" or "|" in line: + if line == "": break if "%" in line: line = line.replace("/", " ") @@ -693,26 +694,28 @@ def parse_gs_block_eu(fh, indextype): strike, pay_bid, pay_offer, - delta, + delta_pay, rec_bid, rec_offer, vol, _, _, ) = line.split() + delta_pay = float(delta_pay.rstrip("%")) + delta_rec = 100 + delta_pay r.append( [ strike, rec_bid, rec_offer, - 1 + delta_pay, + str(delta_rec), pay_bid, pay_offer, - delta_pay, + str(delta_pay), vol, ] ) - return makedf(r, indextype, "GS", "EU") + return makedf(r, indextype, "GS", "EU"), line def parse_gs_eu(fh, index_desc): @@ -722,14 +725,21 @@ def parse_gs_eu(fh, index_desc): pat = re.compile(r"(\w{3}\d{2})") line = next(fh).strip() while True: + print(line) if ("|" in line) and ("STK" not in line): - line = next(fh).strip() if m := pat.match(line): - expiry = m.groups() + expiry = m.group(1) expiry = pd.to_datetime(expiry, format="%b%y") - option_stack[(expiry, index_desc["version"])] = parse_gs_block_eu( - fh, indexdesc["index"] - ) + try: + ( + option_stack[(expiry, index_desc["version"])], + line, + ) = parse_gs_eu_block(fh, index_desc["index"]) + fwd_index.append({**index_desc, "expiry": expiry}) + except IndexError as e: + logger.debug(traceback.format_exc()) + logger.error(f"Something is wrong with file {Path(fh.name).stem}") + raise RuntimeError() else: logger.error("Can't parse expiry line:", line, "filename:", fh.name) elif line.startswith("Keywords"): @@ -739,7 +749,7 @@ def parse_gs_eu(fh, index_desc): line = next(fh).strip() except StopIteration: break - return options_stack, fwd_index + return option_stack, fwd_index # subject_baml = re.compile(r"(?:Fwd:){0,2}(?:BAML )?(\D{2})(\d{1,2})\s") @@ -811,7 +821,8 @@ def parse_email(email: Path, date_received: datetime.date, conn): series = d["series"] ref = float(d["ref"]) elif source == "GS" and region == "EU": - indextype, series, version, ref + indextype, series, version, ref = m.groups() + indextype = "XO" if indextype.upper() == "XOVER" else indextype else: indextype, series, ref = m.groups() indextype = "EU" if indextype == "MAIN" else indextype @@ -858,6 +869,7 @@ def parse_email(email: Path, date_received: datetime.date, conn): def write_todb(swaption_stack, index_data, conn): + breakpoint() sql_str = sql.SQL( "INSERT INTO swaption_ref_quotes({}) VALUES({}) " "ON CONFLICT DO NOTHING RETURNING ref_id" @@ -874,7 +886,9 @@ def write_todb(swaption_stack, index_data, conn): for t in index_data.itertuples(index=False): c.execute(sql_str, t) try: - (ref_id,) = next(c) + # debug, please remove after + ref_id = "9999999" + # (ref_id,) = next(c) except StopIteration: continue else: |
