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.py51
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):