diff options
Diffstat (limited to 'python/trade_dataclasses.py')
| -rw-r--r-- | python/trade_dataclasses.py | 19 |
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" |
