aboutsummaryrefslogtreecommitdiffstats
path: root/python/quote_parsing
diff options
context:
space:
mode:
Diffstat (limited to 'python/quote_parsing')
-rw-r--r--python/quote_parsing/parse_emails.py35
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: