diff options
Diffstat (limited to 'python/trade_dataclasses.py')
| -rw-r--r-- | python/trade_dataclasses.py | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/python/trade_dataclasses.py b/python/trade_dataclasses.py index 2b87417e..2c72683a 100644 --- a/python/trade_dataclasses.py +++ b/python/trade_dataclasses.py @@ -294,7 +294,7 @@ class BbgDeal: cls._bbg_sql_insert = ( f"INSERT INTO cds_tickets VALUES({','.join(['%s'] * 22)})" ) - elif deal_type == DealType.FxSwap: + elif deal_type == DealType.FxSwap or deal_type == DealType.Spot: cls._bbg_sql_insert = ( f"INSERT INTO fx_tickets VALUES({','.join(['%s'] * 211)})" ) @@ -796,3 +796,56 @@ class FxSwapDeal( cash_account=_fx_accounts[line["ALOC Account 1"]], **d, ) + + +@dataclass +class SpotDeal( + BbgDeal, + Deal, + deal_type=DealType.Spot, + table_name="spots", + insert_ignore=("id", "dealid"), +): + folder: str + portfolio: str + trade_date: datetime.date + settle_date: datetime.date + spot_rate: float + buy_currency: str + buy_amount: float + sell_currency: str + sell_amount: float + fund: str + cp_code: str + cash_account: str + id: int = field(default=None, metadata={"insert": False}) + dealid: str = field(default=None, metadata={"insert": False}) + + @classmethod + def from_bbg_line(cls, line: dict): + cls._bbg_insert_queue.append(list(line.values())) + if line["Side"] == "S": + key1, key2 = "sell", "buy" + else: + key1, key2 = "buy", "sell" + + d = { + f"{key1}_currency": line["Currency 1"], + f"{key1}_amount": line["Amount Dealt"], + f"{key2}_currency": line["Currency 2"], + f"{key2}_amount": line["Counter Amount"], + } + cls._bbg_insert_queue.append(list(line.values())) + return cls( + folder="*", + portfolio="UNALLOCATED", + cp_code=_fx_cp[line["Counterparty Deal Code"]], + trade_date=datetime.datetime.strptime(line["Date Of Deal"], "%Y%m%d"), + settle_date=datetime.datetime.strptime( + line["Value Date Period 1 Currency 1"], "%Y%m%d" + ), + fund=_fx_funds[line["ALOC Account 1"]], + spot_rate=line["Spot Basis Rate"], + cash_account=_fx_accounts[line["ALOC Account 1"]], + **d, + ) |
