Remove order onComplete and add onConfirma and onClose

This commit is contained in:
Jacob Plaster
2018-12-04 11:26:36 +00:00
parent 1f2fdf9fa0
commit 136773197d
4 changed files with 18 additions and 16 deletions

View File

@@ -148,15 +148,15 @@ The websocket exposes a collection of events that are triggered when certain dat
Unsubscribe and subscribe to all data feeds
#### `submit_order(symbol, price, amount, market_type, hidden=False, onComplete=None, onError=None, *args, **kwargs)`
#### `submit_order(symbol, price, amount, market_type, hidden=False, onConfirm=None, onClose=None, *args, **kwargs)`
Submits an order to the Bitfinex api. If the order is successful then the order_closed event will be triggered and the onComplete function will also be called if provided in the parameters.
Submits an order to the Bitfinex api. When it has been verified that bitfine xhas received the order then the `onConfirm` callback will be called followed by the `order_confirmed` event. Once it has been verified that the order has completely closed due to either being filled or canceled then the `onClose` function will be called, followed by the `order_closed` event.
#### `update_order(orderId, price=None, amount=None, delta=None, price_aux_limit=None, price_trailing=None, flags=None, time_in_force=None, onComplete=None, onError=None)`
#### `update_order(orderId, price=None, amount=None, delta=None, price_aux_limit=None, price_trailing=None, flags=None, time_in_force=None, onConfirm=None, onClose=None)`
Attempts to update an order with the given values. If the order is no longer open then the update will be ignored.
#### `close_order(self, orderId, onComplete=None, onError=None):`
#### `close_order(self, orderId, onConfirm=None, onClose=None):`
Close the order with the given orderId if it still open.

View File

@@ -24,7 +24,7 @@ async def trade_completed(order, trade):
print ("Order confirmed.")
print (order)
print (trade)
await bfx.ws.cancel_order(order.id)
await bfx.ws.close_order(order.id)
@bfx.ws.on('error')
def log_error(msg):

View File

@@ -42,6 +42,6 @@ async def submit_order(auth_message):
# You can also provide a callback
# await ws.submit_order('tBTCUSD', 0, 0.01,
# 'EXCHANGE MARKET', onComplete=trade_complete)
# 'EXCHANGE MARKET', onClose=trade_complete)
bfx.ws.run()

View File

@@ -23,19 +23,21 @@ class OrderManager:
def get_pending_orders(self):
return list(self.pending_orders.values())
async def _confirm_order(self, order):
async def _confirm_order(self, order, isClosed=False):
'''
Called once when we first recieve infomation back from the bitfinex api
that the order has been accepted.
'''
if order.cId in self.pending_orders:
if self.pending_callbacks[order.cId][0]:
# call onComplete callback
# call onConfirm callback
await self.pending_callbacks[order.cId][0](order)
if isClosed:
await self.pending_callbacks[order.cId][1](order)
del self.pending_callbacks[order.cId]
order.set_confirmed()
# remove from pending orders list
del self.pending_orders[order.cId]
del self.pending_callbacks[order.cId]
self.bfxapi._emit('order_confirmed', order)
async def confirm_order_closed(self, raw_ws_data):
@@ -48,7 +50,7 @@ class OrderManager:
order.set_open_state(False)
if order.id in self.open_orders:
del self.open_orders[order.id]
await self._confirm_order(order)
await self._confirm_order(order, isClosed=True)
self.logger.info("Order closed: {} {}".format(order.symbol, order.status))
self.bfxapi._emit('order_closed', order)
@@ -94,7 +96,7 @@ class OrderManager:
return int(round(time.time() * 1000))
async def submit_order(self, symbol, price, amount, market_type,
hidden=False, onComplete=None, onError=None, *args, **kwargs):
hidden=False, onConfirm=None, onClose=None, *args, **kwargs):
cId = self._gen_unqiue_cid()
# send order over websocket
payload = {
@@ -105,24 +107,24 @@ class OrderManager:
"price": str(price)
}
self.pending_orders[cId] = payload
self.pending_callbacks[cId] = (onComplete, onError)
self.pending_callbacks[cId] = (onConfirm, onClose)
await self.bfxapi._send_auth_command('on', payload)
self.logger.info("Order cid={} ({} {} @ {}) dispatched".format(
cId, symbol, amount, price))
async def update_order(self, orderId, *args, onComplete=None, onError=None, **kwargs):
async def update_order(self, orderId, *args, onConfirm=None, onClose=None, **kwargs):
if orderId not in self.open_orders:
raise Exception("Order id={} is not open".format(orderId))
order = self.open_orders[orderId]
self.pending_callbacks[order.cId] = (onComplete, onError)
self.pending_callbacks[order.cId] = (onConfirm, onClose)
await order.update(*args, **kwargs)
self.logger.info("Update Order order_id={} dispatched".format(orderId))
async def close_order(self, orderId, onComplete=None, onError=None):
async def close_order(self, orderId, onConfirm=None, onClose=None):
if orderId not in self.open_orders:
raise Exception("Order id={} is not open".format(orderId))
order = self.open_orders[orderId]
self.pending_callbacks[order.cId] = (onComplete, onError)
self.pending_callbacks[order.cId] = (onConfirm, onClose)
await order.cancel()
self.logger.info("Order cancel order_id={} dispatched".format(orderId))