diff --git a/.travis.yml b/.travis.yml index 6ff3e38..eb6e601 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,12 @@ language: python -python: - - "3.4" - - "3.5" - - "3.6" - # PyPy versions - - "pypy3.5" + +before_install: + - sudo apt-get update + - sudo apt-get install python3 + - sudo apt-get install python3-pip + - sudo python3 -m pip install --upgrade pip # command to install dependencies install: - - python3 -m pip -U install -r requirements.txt + - python3 -m pip install -r requirements.txt --user # command to run tests -script: pylint --rcfile=pylint.rc bfxapi +script: python3 -m pylint --rcfile=pylint.rc bfxapi diff --git a/bfxapi/models/Order.py b/bfxapi/models/Order.py index 00cb7e2..dc05ba7 100644 --- a/bfxapi/models/Order.py +++ b/bfxapi/models/Order.py @@ -55,7 +55,7 @@ class OrderClosedModel: FLAGS = 12 STATUS = 13 PRICE = 16 - PRIVE_AVG = 17 + PRICE_AVG = 17 PRICE_TRAILING = 18 PRICE_AUX_LIMIT = 19 NOTIFY = 23 @@ -112,16 +112,18 @@ class Order: def __init__(self, oid, gid, cid, symbol, mts_create, mts_update, amount, amount_orig, o_type, typePrev, flags, status, price, price_avg, price_trailing, price_aux_limit, notfiy, place_id): - # pylint: disable=invalid-name - self.id = oid + self.id = oid # pylint: disable=invalid-name self.gid = gid self.cid = cid self.symbol = symbol self.mts_create = mts_create self.mts_update = mts_update - # self.amount = amount self.amount = amount self.amount_orig = amount_orig + if self.amount_orig > 0: + self.amount_filled = amount_orig - amount + else: + self.amount_filled = -(abs(amount_orig) - abs(amount)) self.type = o_type self.type_prev = typePrev self.flags = flags @@ -134,7 +136,6 @@ class Order: self.place_id = place_id self.tag = "" self.fee = 0 - self.is_pending_bool = True self.is_confirmed_bool = False self.is_open_bool = False @@ -144,9 +145,9 @@ class Order: if price_avg: # check if order is taker or maker if self.type in LIMIT_ORDERS: - self.fee = (price_avg * abs(amount)) * 0.001 + self.fee = (price_avg * abs(self.amount_filled)) * 0.001 else: - self.fee = (price_avg * abs(amount)) * 0.002 + self.fee = (price_avg * abs(self.amount_filled)) * 0.002 @staticmethod def from_raw_order(raw_order): @@ -168,7 +169,7 @@ class Order: flags = raw_order[OrderClosedModel.FLAGS] status = raw_order[OrderClosedModel.STATUS] price = raw_order[OrderClosedModel.PRICE] - price_avg = raw_order[OrderClosedModel.PRIVE_AVG] + price_avg = raw_order[OrderClosedModel.PRICE_AVG] price_trailing = raw_order[OrderClosedModel.PRICE_TRAILING] price_aux_limit = raw_order[OrderClosedModel.PRICE_AUX_LIMIT] notfiy = raw_order[OrderClosedModel.NOTIFY] @@ -217,5 +218,6 @@ class Order: def __str__(self): ''' Allow us to print the Order object in a pretty format ''' - text = "Order <'{}' mts_create={} status='{}' id={}>" - return text.format(self.symbol, self.mts_create, self.status, self.id) + text = "Order <'{}' amount_orig={} amount_filled={} mts_create={} status='{}' id={}>" + return text.format(self.symbol, self.amount_orig, self.amount_filled, + self.mts_create, self.status, self.id) diff --git a/bfxapi/models/order.py b/bfxapi/models/order.py index 00cb7e2..dc05ba7 100644 --- a/bfxapi/models/order.py +++ b/bfxapi/models/order.py @@ -55,7 +55,7 @@ class OrderClosedModel: FLAGS = 12 STATUS = 13 PRICE = 16 - PRIVE_AVG = 17 + PRICE_AVG = 17 PRICE_TRAILING = 18 PRICE_AUX_LIMIT = 19 NOTIFY = 23 @@ -112,16 +112,18 @@ class Order: def __init__(self, oid, gid, cid, symbol, mts_create, mts_update, amount, amount_orig, o_type, typePrev, flags, status, price, price_avg, price_trailing, price_aux_limit, notfiy, place_id): - # pylint: disable=invalid-name - self.id = oid + self.id = oid # pylint: disable=invalid-name self.gid = gid self.cid = cid self.symbol = symbol self.mts_create = mts_create self.mts_update = mts_update - # self.amount = amount self.amount = amount self.amount_orig = amount_orig + if self.amount_orig > 0: + self.amount_filled = amount_orig - amount + else: + self.amount_filled = -(abs(amount_orig) - abs(amount)) self.type = o_type self.type_prev = typePrev self.flags = flags @@ -134,7 +136,6 @@ class Order: self.place_id = place_id self.tag = "" self.fee = 0 - self.is_pending_bool = True self.is_confirmed_bool = False self.is_open_bool = False @@ -144,9 +145,9 @@ class Order: if price_avg: # check if order is taker or maker if self.type in LIMIT_ORDERS: - self.fee = (price_avg * abs(amount)) * 0.001 + self.fee = (price_avg * abs(self.amount_filled)) * 0.001 else: - self.fee = (price_avg * abs(amount)) * 0.002 + self.fee = (price_avg * abs(self.amount_filled)) * 0.002 @staticmethod def from_raw_order(raw_order): @@ -168,7 +169,7 @@ class Order: flags = raw_order[OrderClosedModel.FLAGS] status = raw_order[OrderClosedModel.STATUS] price = raw_order[OrderClosedModel.PRICE] - price_avg = raw_order[OrderClosedModel.PRIVE_AVG] + price_avg = raw_order[OrderClosedModel.PRICE_AVG] price_trailing = raw_order[OrderClosedModel.PRICE_TRAILING] price_aux_limit = raw_order[OrderClosedModel.PRICE_AUX_LIMIT] notfiy = raw_order[OrderClosedModel.NOTIFY] @@ -217,5 +218,6 @@ class Order: def __str__(self): ''' Allow us to print the Order object in a pretty format ''' - text = "Order <'{}' mts_create={} status='{}' id={}>" - return text.format(self.symbol, self.mts_create, self.status, self.id) + text = "Order <'{}' amount_orig={} amount_filled={} mts_create={} status='{}' id={}>" + return text.format(self.symbol, self.amount_orig, self.amount_filled, + self.mts_create, self.status, self.id) diff --git a/bfxapi/websockets/OrderManager.py b/bfxapi/websockets/OrderManager.py index 3672406..7c97e5a 100644 --- a/bfxapi/websockets/OrderManager.py +++ b/bfxapi/websockets/OrderManager.py @@ -38,13 +38,13 @@ class OrderManager: Called every time an order signal has been received. This function manages the local list of open orders. """ - if order.cId in self.pending_orders: - await self._execute_confirm_callback(order.cId, order) + if order.cid in self.pending_orders: + await self._execute_confirm_callback(order.cid, order) if isClosed: - await self._execute_close_callback(order.cId, order) + await self._execute_close_callback(order.cid, order) order.set_confirmed() # remove from pending orders list - del self.pending_orders[order.cId] + del self.pending_orders[order.cid] self.bfxapi._emit('order_confirmed', order) else: await self._execute_confirm_callback(order.id, order) @@ -123,10 +123,10 @@ class OrderManager: @param onClose: function called when the bitfinex websocket receives signal that the order was closed due to being filled or cancelled """ - cId = self._gen_unqiue_cid() + cid = self._gen_unqiue_cid() # create base payload with required data payload = { - "cid": cId, + "cid": cid, "type": str(market_type), "symbol": symbol, "amount": str(amount), @@ -146,11 +146,11 @@ class OrderManager: if (time_in_force): payload['tif'] = time_in_force # submit the order - self.pending_orders[cId] = payload - self._create_callback(cId, onConfirm=onConfirm, onClose=onClose) + self.pending_orders[cid] = payload + self._create_callback(cid, onConfirm=onConfirm, onClose=onClose) await self.bfxapi._send_auth_command('on', payload) self.logger.info("Order cid={} ({} {} @ {}) dispatched".format( - cId, symbol, amount, price)) + cid, symbol, amount, price)) async def update_order(self, orderId, price=None, amount=None, delta=None, price_aux_limit=None, price_trailing=None, hidden=False, close=False, reduce_only=False, diff --git a/pylint.rc b/pylint.rc index 59978ac..0efb406 100644 --- a/pylint.rc +++ b/pylint.rc @@ -7,4 +7,5 @@ disable=too-few-public-methods, too-many-locals, no-init, len-as-condition, - too-many-instance-attributes + too-many-instance-attributes, + invalid-name diff --git a/requirements.txt b/requirements.txt index 9e744eb..991faee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ eventemitter==0.2.0 asyncio==3.4.3 websockets==7.0 -pylint==1.8.3 +pylint==2.2.2