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.py43
1 files changed, 35 insertions, 8 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py
index 43d92da3..45fb7f79 100644
--- a/python/trade_dataclasses.py
+++ b/python/trade_dataclasses.py
@@ -398,6 +398,8 @@ class MTMDeal:
cls.product_type = "TRN"
elif deal_type == DealType.Termination:
cls.product_type = "TERM"
+ elif deal_type == DealType.TRS:
+ cls.product_type = "CDI"
@classmethod
def mtm_upload(cls):
@@ -920,7 +922,7 @@ class FxSwapDeal(
@dataclass
class TRSDeal(
- # MTMDeal,
+ MTMDeal,
Deal,
deal_type=DealType.TRS,
table_name="trs",
@@ -933,14 +935,18 @@ class TRSDeal(
folder: str = field(metadata={"globeop": "Folder"})
cash_account: str = field(metadata={"globeop": "Cash Account"})
cp_code: str = field(metadata={"globeop": "Counterparty"})
- trade_date: datetime.date = field(metadata={"globeop": "Trade Date"})
- effective_date: datetime.date
- maturity_date: datetime.date
+ trade_date: datetime.date = field(
+ metadata={"globeop": "Trade Date", "mtm": "Trade Date"}
+ )
+ effective_date: datetime.date = field(
+ init=False, metadata={"mtm": "Effective Date"}
+ )
+ maturity_date: datetime.date = field(metadata={"mtm": "Maturity Date"})
funding_index: str
buysell: bool
underlying_security: str
price: float
- accrued: float
+ accrued: float = field(metadata={"mtm": "Initial Payment"})
funding_freq: str
funding_daycount: str
funding_payment_roll_convention: str
@@ -949,10 +955,10 @@ class TRSDeal(
asset_daycount: str
asset_payment_roll_convention: str
initial_margin_percentage: float = field(
- metadata={"globeop": "InitialMarginPercent"}
+ metadata={"globeop": "InitialMarginPercent", "mtm": "Independent Amount (%)"}
)
- notional: float
- currency: str
+ notional: float = field(metadata={"mtm": "1st Leg Notional"})
+ currency: str = field(metadata={"mtm": "Currency Code"})
interest_calc_method: str
compound_avg_frequency: str
fixing_frequency: str
@@ -962,6 +968,27 @@ class TRSDeal(
default=None, metadata={"insert": False, "mtm": "Swap ID", "globeop": "Deal Id"}
)
+ def __post_init__(self):
+ self.effective_date = self.trade_date + datetime.timedelta(days=1)
+
+ def to_markit(self):
+ _trs_red = {"IBOXHY": "4J623JAA8"}
+ obj = self.serialize("mtm")
+ obj["Trade ID"] = obj["Swap ID"]
+ obj["Initial Payment Currency"] = obj["Currency Code"]
+ if obj["Initial Payment"] >= 0:
+ obj["Transaction Code"] = "Receive"
+ else:
+ obj["Transaction Code"] = "Pay"
+ obj["Initial Payment"] = round(abs(obj["Initial Payment"]), 2)
+ obj["Product Sub Type"] = "IBOXX" # Hardcoded for now
+ obj["RED"] = _trs_red[obj["underlying_security"]]
+ obj["Transaction Type"] = "New"
+ obj["Protection"] = "Buy" if obj["buysell"] else "Sell"
+ obj["Master Document Date"] = datetime.date(2020, 12, 18)
+ obj["Supplement Date"] = datetime.date(2015, 2, 18)
+ return obj
+
def to_admin(self):
obj = self.serialize("globeop")
if obj["buysell"]: