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.py55
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,
+ )