aboutsummaryrefslogtreecommitdiffstats
path: root/python/trade_dataclasses.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/trade_dataclasses.py')
-rw-r--r--python/trade_dataclasses.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py
index 63d9f426..26149c32 100644
--- a/python/trade_dataclasses.py
+++ b/python/trade_dataclasses.py
@@ -811,7 +811,7 @@ class SwaptionDeal(
Deal,
deal_type=DealType.Swaption,
table_name="swaptions",
- insert_ignore=("id", "dealid"),
+ insert_ignore=("id", "dealid", "factor"),
):
buysell: bool
fund: Fund = field(metadata={"mtm": "Account Abbreviation", "citco": "Fund"})
@@ -849,10 +849,25 @@ class SwaptionDeal(
default=None,
metadata={"insert": False, "mtm": "Swap ID", "citco": "ClientOrderID"},
)
+ factor: float = field(default=1.0, init=False, metadata={"insert": False})
+
+ def __post_init__(self):
+ # will need to filter a bit better, for now, just CDX index swaptions
+ if self.security_desc:
+ with self._conn.cursor() as c:
+ c.execute(
+ "SELECT indexfactor / 100 FROM index_version WHERE redindexcode=%s",
+ (self.security_id,),
+ )
+ (self.factor,) = c.fetchone()
+ self.tenor = self.security_desc.rsplit(" ", 1)[1].removesuffix("Y")
+ self.redcode = "_".join((self.security_id, self.tenor))
def to_markit(self):
obj = self.serialize("mtm")
- obj["Initial Payment"] = round(obj["price"] * obj["1st Leg Notional"] * 0.01, 2)
+ obj["Initial Payment"] = (
+ round(obj["price"] * obj["1st Leg Notional"] * 0.01, 2) * self.factor
+ )
obj["Trade ID"] = obj["Swap ID"]
obj["Product Type"] = self.product_type
obj["Transaction Type"] = "NEW"