aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/trade_dataclasses.py72
1 files changed, 26 insertions, 46 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py
index 93df61d7..6e4ed9f6 100644
--- a/python/trade_dataclasses.py
+++ b/python/trade_dataclasses.py
@@ -489,11 +489,28 @@ class CitcoProduct(Citco):
if results := c.fetchone():
(self.id, self.dealid, self.committed) = results
+ @classmethod
+ def _base_attrs(cls, obj):
+ obj["Birth_date"] = obj["Birth_date"].strftime("%Y%m%d")
+ obj["Death_date"] = obj["Death_date"].strftime("%Y%m%d")
+ return obj
+
class CitcoTrade(Citco):
_citco_queue: ClassVar[list] = []
_citco_headers = GTL
+ @classmethod
+ def _base_attrs(cls, obj):
+ obj["FillID"] = obj["ClientOrderID"]
+ obj["Trader"] = "DFLT"
+ obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}"
+ obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d")
+ obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d")
+ obj["FillQty"] = obj["OrderQty"]
+ obj["FillPrice"] = obj["AvgPrice"]
+ return obj
+
@dataclass
class CDSDeal(
@@ -576,16 +593,10 @@ class CDSDeal(
def to_citco(self):
obj = self.serialize("citco")
- obj["FillID"] = obj["ClientOrderID"]
obj["SecurityType"] = "CDS"
obj["BuySellShortCover"] = "B" if obj["protection"] == "Buy" else "S"
obj["Trader"] = "DFLT"
- obj["FillQty"] = obj["OrderQty"]
- obj["FillPrice"] = obj["AvgPrice"]
- obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}"
obj["SettleCurrency"] = obj["SecurityCurrency"]
- obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d")
- obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d")
if obj["orig_attach"]:
# tranche process
obj["IDSource"] = "USERID"
@@ -615,7 +626,7 @@ class CDSDeal(
obj[
"ClearingAgent"
] = "BOA_FC" # We need to query DB via accounts table here
-
+ obj = self._base_attrs(obj)
return obj
@classmethod
@@ -786,13 +797,8 @@ class SwaptionDeal(
obj = self.serialize("citco")
obj["ExecutionBroker"] = _citco_cp_isda[obj["ExecutionBroker"]]
obj["ClearingAgent"] = obj["ExecutionBroker"]
- obj["FillID"] = obj["ClientOrderID"]
obj["SecurityType"] = "BNDOPT"
obj["BuySellShortCover"] = "B" if obj["buysell"] == "Buy" else "S"
- obj["Trader"] = "DFLT"
- obj["FillQty"] = obj["OrderQty"]
- obj["FillPrice"] = obj["AvgPrice"]
- obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}"
obj["SettleCurrency"] = obj["SecurityCurrency"]
obj["IDSource"] = "USERID"
obj["ClearingAgent"] = obj["ExecutionBroker"]
@@ -810,8 +816,7 @@ class SwaptionDeal(
)
instrument.citco_stage()
obj["SecurityID"] = instrument.dealid
- obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d")
- obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d")
+ obj = self._base_attrs(obj)
return obj
@@ -1004,22 +1009,16 @@ class SpotDeal(
key1, key2 = "buy", "sell"
obj["SecurityCurrency"] = obj[f"{key1}_currency"]
obj["OrderQty"] = obj[f"{key1}_amount"]
- obj["FillID"] = obj["ClientOrderID"]
obj["SecurityType"] = "FX"
- obj["Trader"] = "DFLT"
- obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}"
- obj["FillPrice"] = obj["AvgPrice"]
obj["BuySellShortCover"] = "S" if obj["buy_currency"] == "USD" else "B"
- obj["FillQty"] = obj["OrderQty"]
obj["IDSource"] = "BLOOMBERG"
_citco_currency_mapping = {"EUR": "EURUSD CURNCY"}
obj["SecurityID"] = _citco_currency_mapping[obj["SecurityCurrency"]]
obj["ClearingAgent"] = "NT"
- obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d")
- obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d")
obj["FillFXSettleAmount"] = obj[f"{key2}_amount"]
obj["SettleCurrency"] = "USD"
obj["FXRate"] = 1
+ obj = self._base_attrs(obj)
return obj
@@ -1119,12 +1118,8 @@ class FxSwapDeal(
obj["SecurityCurrency"] = obj[f"far_{key1}_currency"]
obj["OrderQty"] = obj[f"far_{key1}_amount"]
obj["SecurityType"] = "FWDFX"
- obj["Trader"] = "DFLT"
- obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}"
obj["AvgPrice"] = obj["far_rate"]
- obj["FillPrice"] = obj["AvgPrice"]
obj["BuySellShortCover"] = "B" if obj["near_buy_currency"] == "USD" else "S"
- obj["FillQty"] = obj["OrderQty"]
obj["IDSource"] = "BLOOMBERG"
_citco_currency_mapping = {"EUR": "EURUSD CURNCY"}
obj["SecurityID"] = _citco_currency_mapping[obj["SecurityCurrency"]]
@@ -1148,11 +1143,9 @@ class FxSwapDeal(
)
near_trade.citco_stage()
obj["ClientOrderID"] = obj["ClientOrderID"] + "_F"
- obj["FillID"] = obj["ClientOrderID"]
- obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d")
- obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d")
obj["SettleCurrency"] = "USD"
obj["FXRate"] = 1
+ obj = self._base_attrs(obj)
return obj
@@ -1298,13 +1291,8 @@ class TRSDeal(
obj = self.serialize("citco")
obj["ExecutionBroker"] = _citco_cp_isda[obj["ExecutionBroker"]]
obj["ClearingAgent"] = obj["ExecutionBroker"]
- obj["FillID"] = obj["ClientOrderID"]
obj["SecurityType"] = "TRS"
- obj["Trader"] = "DFLT"
- obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}"
- obj["FillPrice"] = obj["AvgPrice"]
obj["BuySellShortCover"] = "B" if obj["buysell"] else "S"
- obj["FillQty"] = obj["OrderQty"]
obj["SettleCurrency"] = obj["SecurityCurrency"]
obj["IDSource"] = "USERID"
product = TRSProduct(
@@ -1315,8 +1303,7 @@ class TRSDeal(
)
product.citco_stage()
obj["SecurityID"] = product.dealid
- obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d")
- obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d")
+ obj = obj._base_attrs(obj)
return obj
@@ -1430,13 +1417,10 @@ class IRSDeal(
def to_citco(self):
obj = self.serialize("citco")
obj["ExecutionBroker"] = _citco_cp_cdea[obj["ExecutionBroker"]]
- obj["FillID"] = obj["ClientOrderID"]
obj["SecurityType"] = "IRS"
- obj["Trader"] = "DFLT"
obj["StrategyCode"] = f"{obj['portfolio']}/{obj['folder']}"
obj["FillPrice"] = obj["AvgPrice"]
obj["BuySellShortCover"] = "B" if obj["payreceive"] else "S"
- obj["FillQty"] = obj["OrderQty"]
obj["SettleCurrency"] = obj["SecurityCurrency"]
obj["IDSource"] = "USERID"
product = IRSProduct(
@@ -1448,8 +1432,7 @@ class IRSDeal(
product.citco_stage()
obj["SecurityID"] = product.dealid
obj["ClearingAgent"] = "BOA_FC"
- obj["TradeDate"] = obj["TradeDate"].strftime("%Y%m%d")
- obj["SettlementDate"] = obj["SettlementDate"].strftime("%Y%m%d")
+ obj = self._base_attrs(obj)
return obj
@@ -1528,11 +1511,10 @@ class TrancheProduct(
obj = self.serialize("citco")
obj["Command"] = "N"
obj["Active"] = "Y"
- obj["Birth_date"] = obj["Birth_date"].strftime("%Y%m%d")
- obj["Death_date"] = obj["Death_date"].strftime("%Y%m%d")
obj["CouponRate"] = obj["CouponRate"] / 100
obj["SettleDays"] = 3
obj["AccruStartDate"] = obj["Birth_date"]
+ obj = self._base_attrs(obj)
return obj
@@ -1615,11 +1597,10 @@ class SwaptionProduct(
obj["UnderlyingSecurityId"] = irs.dealid
obj["Command"] = "N"
obj["Active"] = "Y"
- obj["Birth_date"] = obj["Birth_date"].strftime("%Y%m%d")
- obj["Death_date"] = obj["Death_date"].strftime("%Y%m%d")
obj["ExpirationDate"] = obj["ExpirationDate"].strftime("%Y%m%d")
obj["Put/CallFlag"] = "C" if obj["callput"] else "P"
obj["OptionType"] = "Vanilla European"
+ obj = self._base_attrs(obj)
return obj
@@ -1788,7 +1769,6 @@ class TRSProduct(
obj["Active"] = "Y" if obj["Active"] else "N"
obj["GeneralDirection"] = "F"
obj["PrincipalExchTypeID"] = 3
- obj["Birth_date"] = obj["Birth_date"].strftime("%Y%m%d")
- obj["Death_date"] = obj["Death_date"].strftime("%Y%m%d")
obj["UnderlyingIDSource"] = "RED"
+ obj = self._base_attrs(obj)
return obj