diff options
| -rw-r--r-- | python/quote_parsing/parse_emails.py | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/python/quote_parsing/parse_emails.py b/python/quote_parsing/parse_emails.py index ddad9e27..1d353ef5 100644 --- a/python/quote_parsing/parse_emails.py +++ b/python/quote_parsing/parse_emails.py @@ -22,7 +22,7 @@ def list_imm_dates(date): return r -def makedf(r, indextype, quote_source, region="US"): +def makedf(r, indextype, quote_source): if indextype in ["IG", "EU", "XO"]: cols = [ "strike", @@ -48,7 +48,7 @@ def makedf(r, indextype, quote_source, region="US"): ] if quote_source == "BAML": cols.append("gamma") - if quote_source == "GS" and region == "US": + if quote_source == "GS" and indextype in ("IG", "HY"): cols.append("tail") df = pd.DataFrame.from_records(r, columns=cols) for col in ["delta_rec", "delta_pay", "vol", "price_vol", "gamma", "tail"]: @@ -713,7 +713,7 @@ def parse_gs_eu_block(fh, indextype): vol, ] ) - return makedf(r, indextype, "GS", "EU"), line + return makedf(r, indextype, "GS"), line def parse_gs_eu(fh, index_desc): @@ -754,39 +754,34 @@ def parse_gs_eu(fh, index_desc): regex_dict = { re.compile(r"(?:Fwd:){0,2}(?:BofA )?(\D{2})(\d{1,2}).*Ref[^\d]*([\d.]+)"): ( "BAML", - "US", parse_baml, ), re.compile( r"[^$]*\${1,2} MS CDX OPTIONS: (IG|HY)(\d{2})[^-]*- REF[^\d]*([\d.]+)" - ): ("MS", "US", parse_ms), + ): ("MS", parse_ms), re.compile(r"(?:Fwd:)?CDX (IG|HY)(\d{2}).*- REF:[^\d]*([\d.]+)"): ( "NOM", - "US", parse_nom, ), re.compile(r"(?:FW: |Fwd: )?GS (IG|HY)(\d{2}) 5y.*- Ref [^\d]*([\d.]+)"): ( "GS", - "US", parse_gs, ), re.compile(r"SG OPTIONS - CDX (IG|HY) S(\d{2}).* REF[^\d]*([\d.]+)"): ( "SG", - "US", parse_sg, ), - re.compile(r"(?:Fwd:)?Citi Options: (IG|HY)(\d{2}) 5Y"): ("CITI", "US", parse_citi), + re.compile(r"(?:Fwd:)?Citi Options: (IG|HY)(\d{2}) 5Y"): ("CITI", parse_citi), 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]*" - ): ("CS", "US", parse_cs), - re.compile(r"CDX OPTIONS RUN: (IG|HY)(\d{2}).*"): ("BNP", "US", parse_bnp), - # JPM works on both europe and us so we won't need to make changes + r"CS CDX (IG|HY)(\d{2})_?v?(\d)? Options -\s+(?:\d{2}/\d{2}/\d{2}\s+)?Ref = ([\d.]+)[^\d]*" + ): ("CS", parse_cs), + re.compile(r"CDX OPTIONS RUN: (IG|HY)(\d{2}).*"): ("BNP", parse_bnp), re.compile( r"JPM (?:CDX|iTrx) Options: (?:CDX|ITRAXX).(IG|HY|XOVER|MAIN) S(\d+) 5Y (?:V2&V1 )?\S+-\S+ \[ref ([\d.]*)\]" - ): ("JPM", "USEU", parse_jpm), + ): ("JPM", parse_jpm), re.compile( r"GS Options - iTraxx ([A-Za-z]+)(\d+) 5Y V(\d+) Options Run - Ref ([\d.]+)" - ): ("GS", "EU", parse_gs_eu), + ): ("GS", parse_gs_eu), } @@ -806,18 +801,12 @@ def parse_email(email: Path, date_received: datetime.date, conn): with email.open("rt") as fh: subject = fh.readline().lstrip() - for regex, (source, region, parse_fun) in regex_dict.items(): + for regex, (source, parse_fun) in regex_dict.items(): if (m := regex.match(subject)) : version = None if source in ["CITI", "BNP"]: indextype, series = m.groups() - elif source == "CS": - d = m.groupdict() - version = d.get("version") - indextype = d["index"] - series = d["series"] - ref = float(d["ref"]) - elif source == "GS" and region == "EU": + elif source in ("GS", "CS") and len(m.groups()) == 4: indextype, series, version, ref = m.groups() indextype = "XO" if indextype.upper() == "XOVER" else indextype else: |
