diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/quote_parsing/parse_emails.py | 51 |
1 files changed, 38 insertions, 13 deletions
diff --git a/python/quote_parsing/parse_emails.py b/python/quote_parsing/parse_emails.py index 1188bc5b..926384c3 100644 --- a/python/quote_parsing/parse_emails.py +++ b/python/quote_parsing/parse_emails.py @@ -436,24 +436,41 @@ def parse_jpm_block(fh, indextype): if "|" in line: if line.startswith("K"): continue - rec_strike, rec_data, pay_strike, pay_data = [item.strip() for item in line.split('|')] + rec_strike, rec_data, pay_strike, pay_data = [ + item.strip() for item in line.split("|") + ] rec_data = rec_data.replace("/", " ") - if rec_strike != '-': + if rec_strike != "-": receivers[rec_strike] = rec_data.split()[:-2] pay_data = pay_data.replace("/", " ") - if pay_strike != '-': + if pay_strike != "-": payers[pay_strike] = pay_data.split()[:-2] - cols = ['bid', 'offer', 'delta', 'vol'] - pay = pd.DataFrame.from_dict(payers, orient='index', columns=cols).add_prefix('pay_') - rec = pd.DataFrame.from_dict(receivers, orient='index', columns=cols).add_prefix('rec_') + cols = ["bid", "offer", "delta", "vol"] + pay = pd.DataFrame.from_dict(payers, orient="index", columns=cols).add_prefix( + "pay_" + ) + rec = pd.DataFrame.from_dict(receivers, orient="index", columns=cols).add_prefix( + "rec_" + ) df = pd.concat([rec, pay], axis=1) - df['vol'] = df['rec_vol'].fillna(df['pay_vol']) - df = df.reset_index().drop(['rec_vol', "pay_vol"], axis=1).rename(columns={'index':'strike', 'pay_vol':'vol', "rec_delta": "delta_rec", "pay_delta": "delta_pay"}) + df["vol"] = df["rec_vol"].fillna(df["pay_vol"]) + df = ( + df.reset_index() + .drop(["rec_vol", "pay_vol"], axis=1) + .rename( + columns={ + "index": "strike", + "pay_vol": "vol", + "rec_delta": "delta_rec", + "pay_delta": "delta_pay", + } + ) + ) # No price vol - if indextype == 'HY': - df['price_vol'] = None + if indextype == "HY": + df["price_vol"] = None return makedf(df, indextype, "JPM"), line @@ -619,10 +636,13 @@ def parse_bnp(fh, index_desc): logger.error(f"Can't parse expiry line: {line} for filename: {fh.name}") return option_stack, fwd_index + def parse_jpm(fh, index_desc): option_stack = {} fwd_index = [] - pat = re.compile(r"JPM CDX Options: (IG|HY) [(]([\w\d]*)[)] (?P<expiry>[\d]+-[\w]+-[\d]+) [*]{2} Fwd @(?P<fwdspread>[\d.]+), Delta @([\d]+)") + pat = re.compile( + r"JPM CDX Options: (IG|HY) [(]([\w\d]*)[)] (?P<expiry>[\d]+-[\w]+-[\d]+) [*]{2} Fwd @(?P<fwdspread>[\d.]+), Delta @([\d]+)" + ) line = next(fh).strip() while True: if "**" in line: @@ -632,7 +652,9 @@ def parse_jpm(fh, index_desc): fwd_index.append({**index_desc, **d}) try: - option_stack[d['expiry']], line = parse_jpm_block(fh, index_desc["index"]) + option_stack[d["expiry"]], line = parse_jpm_block( + fh, index_desc["index"] + ) except IndexError as e: logger.debug(traceback.format_exc()) logger.error(f"Something is wrong with file {Path(fh.name).stem}") @@ -648,6 +670,7 @@ def parse_jpm(fh, index_desc): break return option_stack, fwd_index + # subject_baml = re.compile(r"(?:Fwd:){0,2}(?:BAML )?(\D{2})(\d{1,2})\s") subject_baml = re.compile(r"(?:Fwd:){0,2}(?:BofA )?(\D{2})(\d{1,2}).*Ref[^\d]*([\d.]+)") subject_ms = re.compile( @@ -661,7 +684,9 @@ subject_cs = re.compile( r"CS CDX (?P<index>IG|HY)(?P<series>\d{2})_?v?(?P<version>\d)? Options -\s+(?:\d{2}/\d{2}/\d{2}\s+)?Ref = (?P<ref>[\d.]+)[^\d]*" ) subject_bnp = re.compile(r"CDX OPTIONS RUN: (IG|HY)(\d{2}).*") -subject_jpm = re.compile(r"JPM CDX Options: CDX.([\w]+) S(\d+) \d\w \S+-\S+ \[ref ([\d.]*).*") +subject_jpm = re.compile( + r"JPM CDX Options: CDX.([\w]+) S(\d+) \d\w \S+-\S+ \[ref ([\d.]*).*" +) def get_current_version(index, series, d, conn): |
