From 0ddbd6e76eac3f2976ca2ef613c1d60dad685bf8 Mon Sep 17 00:00:00 2001 From: Davide Casale Date: Mon, 30 Jan 2023 17:36:50 +0100 Subject: [PATCH] funding trades Co-Authored-By: itsdeka --- bfxapi/rest/_RestAuthenticatedEndpoints.py | 13 +++++++++++++ bfxapi/rest/serializers.py | 10 ++++++++++ bfxapi/rest/types.py | 10 ++++++++++ examples/rest/get_funding_trades_history.py | 13 +++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 examples/rest/get_funding_trades_history.py diff --git a/bfxapi/rest/_RestAuthenticatedEndpoints.py b/bfxapi/rest/_RestAuthenticatedEndpoints.py index b3a7453..d30d32f 100644 --- a/bfxapi/rest/_RestAuthenticatedEndpoints.py +++ b/bfxapi/rest/_RestAuthenticatedEndpoints.py @@ -99,6 +99,19 @@ class _RestAuthenticatedEndpoints(_Requests): return [ serializers.Trade.parse(*sub_data) for sub_data in self._POST(endpoint, data=data) ] + def get_funding_trades_history(self, symbol: Optional[str] = None, sort: Optional[Sort] = None, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None) -> List[FundingTrade]: + if symbol == None: + endpoint = "auth/r/funding/trades/hist" + else: endpoint = f"auth/r/funding/trades/{symbol}/hist" + + data = { + "sort": sort, + "start": start, "end": end, + "limit": limit + } + + return [ serializers.FundingTrade.parse(*sub_data) for sub_data in self._POST(endpoint, data=data) ] + def get_order_trades(self, symbol: str, id: int) -> List[OrderTrade]: return [ serializers.OrderTrade.parse(*sub_data) for sub_data in self._POST(f"auth/r/order/{symbol}:{id}/trades") ] diff --git a/bfxapi/rest/serializers.py b/bfxapi/rest/serializers.py index 56021fe..9526922 100644 --- a/bfxapi/rest/serializers.py +++ b/bfxapi/rest/serializers.py @@ -355,6 +355,16 @@ Trade = generate_labeler_serializer("Trade", klass=types.Trade, labels=[ "cid" ]) +FundingTrade = generate_labeler_serializer("FundingTrade", klass=types.FundingTrade, labels=[ + "id", + "currency", + "mts_create", + "offer_id", + "amount", + "rate", + "period" +]) + OrderTrade = generate_labeler_serializer("OrderTrade", klass=types.OrderTrade, labels=[ "id", "pair", diff --git a/bfxapi/rest/types.py b/bfxapi/rest/types.py index 7554499..2152b3f 100644 --- a/bfxapi/rest/types.py +++ b/bfxapi/rest/types.py @@ -284,6 +284,16 @@ class Trade(_Type): fee_currency: str cid: int +@dataclass() +class FundingTrade(_Type): + id: int + currency: str + mts_create: int + offer_id: int + amount: float + rate: float + period: int + @dataclass class OrderTrade(_Type): id: int diff --git a/examples/rest/get_funding_trades_history.py b/examples/rest/get_funding_trades_history.py new file mode 100644 index 0000000..c1cc8e6 --- /dev/null +++ b/examples/rest/get_funding_trades_history.py @@ -0,0 +1,13 @@ +# python -c "import examples.rest.get_funding_trades_history" + +import os + +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") +) + +print(bfx.rest.auth.get_funding_trades_history()) \ No newline at end of file