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