From 4fbe1b89c68f6a4c6ab16de92728c0c1aca0e560 Mon Sep 17 00:00:00 2001 From: itsdeka Date: Thu, 26 Jan 2023 15:25:00 +0100 Subject: [PATCH] positions endpoint --- bfxapi/rest/BfxRestInterface.py | 8 +++++- bfxapi/rest/serializers.py | 40 ++++++++++++++++++++++++++ bfxapi/rest/types.py | 28 ++++++++++++++++++ examples/rest/get_positions.py | 23 +++++++++++++++ examples/rest/get_positions_history.py | 17 ----------- 5 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 examples/rest/get_positions.py delete mode 100644 examples/rest/get_positions_history.py diff --git a/bfxapi/rest/BfxRestInterface.py b/bfxapi/rest/BfxRestInterface.py index 84ca7f2..b1293e7 100644 --- a/bfxapi/rest/BfxRestInterface.py +++ b/bfxapi/rest/BfxRestInterface.py @@ -508,5 +508,11 @@ class _RestAuthenticatedEndpoints(_Requests): def increase_position(self, symbol: str, amount: Union[Decimal, float, str]) -> Notification[Increase]: return serializers._Notification[Increase](serializer=serializers.Increase).parse(*self._POST("auth/w/position/increase", data={ "symbol": symbol, "amount": amount })) - def get_position_history(self, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None) -> List[PositionHistory]: + def get_positions_history(self, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None) -> List[PositionHistory]: return [ serializers.PositionHistory.parse(*sub_data) for sub_data in self._POST("auth/r/positions/hist", data={ "start": start, "end": end, "limit": limit }) ] + + def get_positions_snapshot(self, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None) -> List[PositionSnapshot]: + return [ serializers.PositionSnapshot.parse(*sub_data) for sub_data in self._POST("auth/r/positions/snap", data={ "start": start, "end": end, "limit": limit }) ] + + def get_positions_audit(self, ids: Optional[List[int]] = None, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None) -> List[PositionAudit]: + return [ serializers.PositionAudit.parse(*sub_data) for sub_data in self._POST("auth/r/positions/audit", data={ "ids": ids, "start": start, "end": end, "limit": limit }) ] diff --git a/bfxapi/rest/serializers.py b/bfxapi/rest/serializers.py index 57ab4eb..95c7f63 100644 --- a/bfxapi/rest/serializers.py +++ b/bfxapi/rest/serializers.py @@ -554,4 +554,44 @@ PositionHistory = generate_labeler_serializer("PositionHistory", klass=types.Pos "MTS_UPDATE" ]) +PositionSnapshot = generate_labeler_serializer("PositionSnapshot", klass=types.PositionSnapshot, labels=[ + "SYMBOL", + "STATUS", + "AMOUNT", + "BASE_PRICE", + "FUNDING", + "FUNDING_TYPE", + "_PLACEHOLDER", + "_PLACEHOLDER", + "_PLACEHOLDER", + "_PLACEHOLDER", + "_PLACEHOLDER", + "POSITION_ID", + "MTS_CREATE", + "MTS_UPDATE" +]) + +PositionAudit = generate_labeler_serializer("PositionAudit", klass=types.PositionAudit, labels=[ + "SYMBOL", + "STATUS", + "AMOUNT", + "BASE_PRICE", + "FUNDING", + "FUNDING_TYPE", + "_PLACEHOLDER", + "_PLACEHOLDER", + "_PLACEHOLDER", + "_PLACEHOLDER", + "_PLACEHOLDER", + "POSITION_ID", + "MTS_CREATE", + "MTS_UPDATE", + "_PLACEHOLDER", + "TYPE", + "_PLACEHOLDER", + "COLLATERAL", + "COLLATERAL_MIN", + "META" +]) + #endregion \ No newline at end of file diff --git a/bfxapi/rest/types.py b/bfxapi/rest/types.py index 6f27c0c..0c47c53 100644 --- a/bfxapi/rest/types.py +++ b/bfxapi/rest/types.py @@ -437,4 +437,32 @@ class PositionHistory(_Type): MTS_CREATE: int MTS_UPDATE: int +@dataclass +class PositionSnapshot(_Type): + SYMBOL: str + STATUS: str + AMOUNT: float + BASE_PRICE: float + FUNDING: float + FUNDING_TYPE: int + POSITION_ID: int + MTS_CREATE: int + MTS_UPDATE: int + +@dataclass +class PositionAudit(_Type): + SYMBOL: str + STATUS: str + AMOUNT: float + BASE_PRICE: float + FUNDING: float + FUNDING_TYPE: int + POSITION_ID: int + MTS_CREATE: int + MTS_UPDATE: int + TYPE: int + COLLATERAL: float + COLLATERAL_MIN: float + META: JSON + #endregion \ No newline at end of file diff --git a/examples/rest/get_positions.py b/examples/rest/get_positions.py new file mode 100644 index 0000000..5b6cfca --- /dev/null +++ b/examples/rest/get_positions.py @@ -0,0 +1,23 @@ +# python -c "import examples.rest.get_positions_snapshot" + +import os +import time + +from bfxapi.client import Client, Constants + +bfx = Client( + REST_HOST=Constants.REST_HOST, + API_KEY=os.getenv("BFX_API_KEY"), + API_SECRET=os.getenv("BFX_API_SECRET") +) + +now = int(round(time.time() * 1000)) + +positions_snapshot = bfx.rest.auth.get_positions_snapshot(end=now, limit=50) +print(positions_snapshot) + +positions_history = bfx.rest.auth.get_positions_history(end=now, limit=50) +print(positions_history) + +positions_audit = bfx.rest.auth.get_positions_audit(end=now, limit=50) +print(positions_audit) \ No newline at end of file diff --git a/examples/rest/get_positions_history.py b/examples/rest/get_positions_history.py deleted file mode 100644 index 87a4b24..0000000 --- a/examples/rest/get_positions_history.py +++ /dev/null @@ -1,17 +0,0 @@ -# python -c "import examples.rest.get_positions_history" - -import os -import time - -from bfxapi.client import Client, Constants - -bfx = Client( - REST_HOST=Constants.REST_HOST, - API_KEY=os.getenv("BFX_API_KEY"), - API_SECRET=os.getenv("BFX_API_SECRET") -) - -now = int(round(time.time() * 1000)) - -positions_history = bfx.rest.auth.get_position_history(end=now, limit=50) -print(positions_history)