diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/trade_dataclasses.py | 122 |
1 files changed, 97 insertions, 25 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py index 5ad8a325..664b3e80 100644 --- a/python/trade_dataclasses.py +++ b/python/trade_dataclasses.py @@ -703,14 +703,12 @@ class SwaptionDeal( fund: Fund = field(metadata={"mtm": "Account Abbreviation", "citco": "Fund"}) cp_code: str = field(metadata={"mtm": "Broker Id", "citco": "ExecutionBroker"}) security_id: str = field(metadata={"mtm": "RED"}) - security_desc: str = field(metadata={"citco": "ExecutionBroker"}) + security_desc: str = field(metadata={"citco": "SecurityDescription"}) maturity: datetime.date = field(metadata={"mtm": "Maturity Date"}) currency: Ccy = field( - metadata={"mtm": "Currency Code", "citco": "SecurityDescription"} - ) - notional: float = field( - metadata={"mtm": "1st Leg Notional", "citco": "SecurityCurrency"} + metadata={"mtm": "Currency Code", "citco": "SecurityCurrency"} ) + notional: float = field(metadata={"mtm": "1st Leg Notional", "citco": "OrderQty"}) fixed_rate: float = field(metadata={"mtm": "1st Leg Rate"}) strike: float = field(metadata={"mtm": "Strike Price"}) price: float = field(metadata={"citco": "AvgPrice"}) @@ -779,12 +777,12 @@ class SwaptionDeal( + "_" + obj["SecurityDescription"].split()[4].removesuffix("Y") ) - instrument = SwpationProduct( + instrument = SwaptionProduct( underlying_security_id=redcode, - instrument="SWPO", + instrument_type="BNDO", callput=obj["option_type"] == "RECEIVER", strike=obj["strike"], - death_date=obj["expiration_date"], + expiration=obj["expiration_date"], ) instrument.citco_stage() obj["SecurityID"] = instrument.dealid @@ -1088,18 +1086,24 @@ class TRSDeal( portfolio: str = field(metadata={"globeop": "Portfolio"}) folder: str = field(metadata={"globeop": "Folder"}) cash_account: str = field(metadata={"globeop": "Cash Account"}) - cp_code: str = field(metadata={"globeop": "Counterparty", "mtm": "Broker Id"}) + cp_code: str = field( + metadata={ + "globeop": "Counterparty", + "mtm": "Broker Id", + "citco": "ExecutionBroker", + } + ) trade_date: datetime.date = field( - metadata={"globeop": "Trade Date", "mtm": "Trade Date"} + metadata={"globeop": "Trade Date", "mtm": "Trade Date", "citco": "TradeDate"} ) effective_date: datetime.date = field( - init=False, metadata={"mtm": "Effective Date"} + init=False, metadata={"mtm": "Effective Date", "citco": "SettlementDate"} ) maturity_date: datetime.date = field(metadata={"mtm": "Maturity Date"}) funding_index: str buysell: bool underlying_security: str - price: float = field(metadata={"mtm": "Initial Fixing Amount"}) + price: float = field(metadata={"mtm": "Initial Fixing Amount", "citco": "AvgPrice"}) accrued: float = field(metadata={"mtm": "Initial Payment"}) funding_freq: str funding_daycount: str @@ -1111,15 +1115,23 @@ class TRSDeal( initial_margin_percentage: float = field( metadata={"globeop": "InitialMarginPercent", "mtm": "Independent Amount (%)"} ) - notional: float = field(metadata={"mtm": "1st Leg Notional"}) - currency: str = field(metadata={"mtm": "Currency Code"}) + notional: float = field(metadata={"mtm": "1st Leg Notional", "citco": "OrderQty"}) + currency: str = field( + metadata={"mtm": "Currency Code", "citco": "SecurityCurrency"} + ) interest_calc_method: str compound_avg_frequency: str fixing_frequency: str cpty_id: str id: int = field(default=None, metadata={"insert": False}) dealid: str = field( - default=None, metadata={"insert": False, "mtm": "Swap ID", "globeop": "Deal Id"} + default=None, + metadata={ + "insert": False, + "mtm": "Swap ID", + "globeop": "Deal Id", + "citco": "ClientOrderID", + }, ) def __post_init__(self): @@ -1197,6 +1209,30 @@ class TRSDeal( obj.update(d) return obj + def to_citco(self): + obj = self.serialize("citco") + obj["FillID"] = obj["ClientOrderID"] + obj["SecurityType"] = "TRS" + obj["Trader"] = "serenitas_trader" + obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}" + obj["FillPrice"] = obj["AvgPrice"] + obj["BuySellShortCover"] = "B" if obj["payreceive"] == "Buy" else "S" + obj["FillQty"] = obj["OrderQty"] + obj["SettleCurrency"] = obj["SecurityCurrency"] + obj["IDSource"] = "USERID" + product = TRSProduct( + birth_date=self.trade_date, + death_date=self.maturity_date, + underlying_security=self.underlying_security, + funding_index=self.funding_index, + ) + product.citco_stage() + obj["SecurityID"] = product.dealid + obj["ClearingAgent"] = obj["ExecutionBroker"] + obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d") + obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d") + return obj + @dataclass class IRSDeal( @@ -1211,16 +1247,20 @@ class IRSDeal( portfolio: str = field(metadata={"globeop": "Portfolio"}) folder: str = field(metadata={"globeop": "Folder"}) cash_account: str = field(metadata={"globeop": "Folder"}) - cp_code: str = field(metadata={"globeop": "GiveUpCounterparty"}) - trade_date: datetime.date = field(metadata={"globeop": "Trade Date"}) - effective_date: datetime.date + cp_code: str = field( + metadata={"globeop": "GiveUpCounterparty", "citco": "ExecutionBroker"} + ) + trade_date: datetime.date = field( + metadata={"globeop": "Trade Date", "citco": "TradeDate"} + ) + effective_date: datetime.date = field(metadata={"citco": "SettlementDate"}) maturity_date: datetime.date payreceive: bool - fixed_rate: float + fixed_rate: float = field(metadata={"citco": "AvgPrice"}) fixed_daycount: str fixed_payment_freq: str fixed_bdc: str - notional: float + notional: float = field(metadata={"citco": "OrderQty"}) float_index: str float_daycount: str float_payment_freq: str @@ -1237,7 +1277,13 @@ class IRSDeal( ) id: int = field(default=None, metadata={"insert": False}) dealid: str = field( - default=None, metadata={"insert": False, "mtm": "Swap ID", "globeop": "Deal Id"} + default=None, + metadata={ + "insert": False, + "mtm": "Swap ID", + "globeop": "Deal Id", + "citco": "ClientOrderID", + }, ) def __post_init__(self): @@ -1284,6 +1330,30 @@ class IRSDeal( obj.update(d) return obj + def to_citco(self): + obj = self.serialize("citco") + obj["FillID"] = obj["ClientOrderID"] + obj["SecurityType"] = "IRS" + obj["Trader"] = "serenitas_trader" + obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}" + obj["FillPrice"] = obj["AvgPrice"] + obj["BuySellShortCover"] = "B" if obj["payreceive"] == "Buy" else "S" + obj["FillQty"] = obj["OrderQty"] + obj["SettleCurrency"] = obj["SecurityCurrency"] + obj["IDSource"] = "USERID" + product = IRSProduct( + birth_date=self.trade_date, + death_date=self.maturity_date, + fixed_rate=self.fixed_rate, + float_index=self.float_index, + ) + product.citco_stage() + obj["SecurityID"] = product.dealid + obj["ClearingAgent"] = "BOAFC" + obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d") + obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d") + return obj + from enum import IntEnum @@ -1322,7 +1392,9 @@ class TrancheProduct( security_desc: str = field( init=False, metadata={"insert": False, "citco": "Sec_Desc"} ) - currency: str = field(init=False, default=None, metadata={"citco": "LocalCcy"}) + currency: str = field( + init=False, default=None, metadata={"citco": "LocalCcy", "insert": False} + ) instrument_type: str = field(default="CDS", metadata={"citco": "InstrumentType"}) underlying_id_source: str = field( default="RED", metadata={"citco": "UnderlyingIDSource"} @@ -1411,8 +1483,7 @@ class SwaptionProduct( ) def __post_init__(self): - self.get_productid() - if self.underlying_id_source == "BNDO": + if self.instrument_type == "BNDO": sql_str = "SELECT issue_date, maturity, coupon, index, series FROM index_desc WHERE tenor='5yr' AND redindexcode=%s" with self._conn.cursor() as c: c.execute(sql_str, (self.underlying_security_id.removesuffix("_5"),)) @@ -1425,8 +1496,9 @@ class SwaptionProduct( ) = c.fetchone() self.security_desc = f"{desc_str(index, series, '5')} {self.expiration}-{self.strike}-{'C' if self.callput else 'P'}-{self.birth_date}-{self.death_date}" self.currency = "EUR" if index in ("XO", "EU") else "USD" - elif self.underlying_id_source == "SWPO": + elif self.instrument_type == "SWPO": self.security_desc = "" + self.get_productid() def to_citco(self): if not self.id: |
