diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/headers.py | 1 | ||||
| -rw-r--r-- | python/trade_dataclasses.py | 77 |
2 files changed, 78 insertions, 0 deletions
diff --git a/python/headers.py b/python/headers.py index 85aebcae..6fb4a41f 100644 --- a/python/headers.py +++ b/python/headers.py @@ -11,6 +11,7 @@ class DealType(Enum): FxSwap = "FXSWAP" Fx = "FX" TRS = "TRS" + IRS = "IRS" HEADERS_PRE = [ diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py index e80e40d4..713e9775 100644 --- a/python/trade_dataclasses.py +++ b/python/trade_dataclasses.py @@ -913,3 +913,80 @@ class TRSDeal( obj["Custodian"] = "BAC" obj.update(d) return obj + + +@dataclass +class IRSDeal( + # MTMDeal, + Deal, + deal_type=DealType.IRS, + table_name="irs", + insert_ignore=("id", "dealid", "orig_cp", "product_type"), +): + fund: str = field( + metadata={"mtm": "Account Abbreviation"}, + ) + portfolio: str = field(metadata={"globeop": "Portfolio"}) + folder: str = field(metadata={"globeop": "Strategy"}) + cash_account: str + cp_code: str = field(metadata={"globeop": "Counterparty"}) + trade_date: datetime.date = field(metadata={"globeop": "TradeDate"}) + effective_date: datetime.date + maturity_date: datetime.date + payreceive: bool + fixed_rate: float + fixed_daycount: str + fixed_payment_freq: str + fixed_bdc: str + notional: float + float_index: str + float_daycount: str + float_payment_freq: str + float_bdc: str + float_arrears: bool + float_fixing_freq: str + pay_interest_calc_method: str + clearing_facility: str + swap_type: str + cleared_trade_id: str + id: int = field(default=None, metadata={"insert": False}) + dealid: str = field(default=None, metadata={"insert": False, "mtm": "Swap ID"}) + + def to_globeop(self): + obj = self.serialize("globeop") + if obj["payreceive"]: + key1, key2 = "Receive", "Pay" + else: + key1, key2 = "Pay", "Receive" + d = { + f"{key1}LegRateType": "Floating", + f"{key1}FloatRate": obj["float_index"], + f"{key1}Daycount": obj["float_daycount"], + f"{key1}Frequency": obj["float_payment_freq"], + f"{key1}PaymentBDC": obj["float_bdc"], + f"{key1}EffectiveDate": obj["effective_date"], + f"{key1}MaturityDate": obj["maturity_date"], + f"{key1}Notional": obj["notional"], + f"{key1}ResetArrears": "Y" if obj["float_arrears"] else "N", + f"{key1}Currency": obj["currency"], + f"{key1}FixingFrequency": obj["float_fixing_freq"], + f"{key1}InterestCalcMethod": obj["pay_interest_calc_method"], + f"{key1}LegRateType": "Fixed", + f"{key1}FixedRate": obj["fixed_rate"], + f"{key1}Daycount": obj["fixed_daycount"], + f"{key1}Frequency": obj["fixed_payment_freq"], + f"{key1}PaymentBDC": obj["fixed_bdc"], + f"{key1}EffectiveDate": obj["effective_date"], + f"{key1}MaturityDate": obj["maturity_date"], + f"{key1}Notional": obj["notional"], + f"{key1}Currency": obj["currency"], + } + obj["SwapType"] = "OIS_SWAP" + obj["DealType"] = "InterestRateSwapDeal" + obj["Action"] = "NEW" # Need to figure this out + obj["Client"] = "Serenitas" + obj["State"] = "Valid" + obj["Custodian"] = "BOMLCM" + obj["ClearingFacility"] = "LCH_LTD" + obj.update(d) + return obj |
