diff --git a/CHANGELOG b/CHANGELOG index a4db05e..18e171f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +1.1.15 +-) Implemented Funding Trades (rest) + 1.1.14 -) bfx_websockets.py ERRORS dictionary now contains a message for error number 10305 diff --git a/bfxapi/models/__init__.py b/bfxapi/models/__init__.py index 87b07ea..76b5ce9 100644 --- a/bfxapi/models/__init__.py +++ b/bfxapi/models/__init__.py @@ -19,5 +19,6 @@ from .withdraw import Withdraw from .ticker import Ticker from .funding_ticker import FundingTicker from .ledger import Ledger +from .funding_trade import FundingTrade -NAME = 'models' +NAME = "models" diff --git a/bfxapi/models/funding_trade.py b/bfxapi/models/funding_trade.py new file mode 100644 index 0000000..07f6ea5 --- /dev/null +++ b/bfxapi/models/funding_trade.py @@ -0,0 +1,55 @@ +""" +Module used to describe all of the different data types +""" + +class FundingTradeModel: + """ + Enum used to index the different values in a raw funding trade array + """ + ID = 0 + SYMBOL = 1 + MTS_CREATE = 2 + OFFER_ID = 3 + AMOUNT = 4 + RATE = 5 + PERIOD = 6 + +class FundingTrade: + """ + ID integer Offer ID + SYMBOL string The currency of the offer (fUSD, etc) + MTS_CREATE int Millisecond Time Stamp when the offer was created + OFFER_ID int The ID of the offer + AMOUNT float Amount the offer is for + RATE float Rate of the offer + PERIOD int Period of the offer + """ + + def __init__(self, tid, symbol, mts_create, offer_id, amount, rate, period): + self.tid = tid + self.symbol = symbol + self.mts_create = mts_create + self.offer_id = offer_id + self.amount = amount + self.rate = rate + self.period = period + + @staticmethod + def from_raw_rest_trade(raw_trade): + """ + Generate a Ticker object from a raw ticker array + """ + # [[636040,"fUST",1574077528000,41237922,-100,0.0024,2,null]] + return FundingTrade( + raw_trade[FundingTradeModel.ID], + raw_trade[FundingTradeModel.SYMBOL], + raw_trade[FundingTradeModel.MTS_CREATE], + raw_trade[FundingTradeModel.OFFER_ID], + raw_trade[FundingTradeModel.AMOUNT], + raw_trade[FundingTradeModel.RATE], + raw_trade[FundingTradeModel.PERIOD] + ) + + def __str__(self): + return "FundingTrade '{}' x {} @ {} for {} days".format( + self.symbol, self.amount, self.rate, self.period) diff --git a/bfxapi/rest/bfx_rest.py b/bfxapi/rest/bfx_rest.py index e8d23f7..a4d9174 100644 --- a/bfxapi/rest/bfx_rest.py +++ b/bfxapi/rest/bfx_rest.py @@ -10,7 +10,7 @@ import datetime from ..utils.custom_logger import CustomLogger from ..utils.auth import generate_auth_headers, calculate_order_flags, gen_unique_cid -from ..models import Wallet, Order, Position, Trade, FundingLoan, FundingOffer +from ..models import Wallet, Order, Position, Trade, FundingLoan, FundingOffer, FundingTrade from ..models import FundingCredit, Notification, Ledger @@ -456,6 +456,22 @@ class BfxRest: raw_trades = await self.post(endpoint, params=params) return [Trade.from_raw_rest_trade(rt) for rt in raw_trades] + async def get_funding_trades(self, symbol, start, end, limit=25): + """ + Get all of the funding trades between the start and end period associated with API_KEY + - Requires authentication. + + # Attributes + @param symbol string: pair symbol i.e fUSD + @param start int: millisecond start time + @param end int: millisecond end time + @param limit int: max number of items in response + @return Array + """ + endpoint = "auth/r/funding/trades/{}/hist".format(symbol) + raw_trades = await self.post(endpoint) + return [FundingTrade.from_raw_rest_trade(rt) for rt in raw_trades] + async def get_funding_offers(self, symbol): """ Get all of the funding offers associated with API_KEY - Requires authentication. diff --git a/bfxapi/version.py b/bfxapi/version.py index 33ea9de..acd9c7c 100644 --- a/bfxapi/version.py +++ b/bfxapi/version.py @@ -2,4 +2,4 @@ This module contains the current version of the bfxapi lib """ -__version__ = '1.1.14' +__version__ = '1.1.15'