mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-24 01:04:22 +01:00
Remove order onComplete and add onConfirma and onClose
This commit is contained in:
@@ -148,15 +148,15 @@ The websocket exposes a collection of events that are triggered when certain dat
|
|||||||
|
|
||||||
Unsubscribe and subscribe to all data feeds
|
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.
|
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.
|
Close the order with the given orderId if it still open.
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ async def trade_completed(order, trade):
|
|||||||
print ("Order confirmed.")
|
print ("Order confirmed.")
|
||||||
print (order)
|
print (order)
|
||||||
print (trade)
|
print (trade)
|
||||||
await bfx.ws.cancel_order(order.id)
|
await bfx.ws.close_order(order.id)
|
||||||
|
|
||||||
@bfx.ws.on('error')
|
@bfx.ws.on('error')
|
||||||
def log_error(msg):
|
def log_error(msg):
|
||||||
@@ -42,6 +42,6 @@ async def submit_order(auth_message):
|
|||||||
|
|
||||||
# You can also provide a callback
|
# You can also provide a callback
|
||||||
# await ws.submit_order('tBTCUSD', 0, 0.01,
|
# await ws.submit_order('tBTCUSD', 0, 0.01,
|
||||||
# 'EXCHANGE MARKET', onComplete=trade_complete)
|
# 'EXCHANGE MARKET', onClose=trade_complete)
|
||||||
|
|
||||||
bfx.ws.run()
|
bfx.ws.run()
|
||||||
|
|||||||
@@ -23,19 +23,21 @@ class OrderManager:
|
|||||||
def get_pending_orders(self):
|
def get_pending_orders(self):
|
||||||
return list(self.pending_orders.values())
|
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
|
Called once when we first recieve infomation back from the bitfinex api
|
||||||
that the order has been accepted.
|
that the order has been accepted.
|
||||||
'''
|
'''
|
||||||
if order.cId in self.pending_orders:
|
if order.cId in self.pending_orders:
|
||||||
if self.pending_callbacks[order.cId][0]:
|
if self.pending_callbacks[order.cId][0]:
|
||||||
# call onComplete callback
|
# call onConfirm callback
|
||||||
await self.pending_callbacks[order.cId][0](order)
|
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()
|
order.set_confirmed()
|
||||||
# remove from pending orders list
|
# remove from pending orders list
|
||||||
del self.pending_orders[order.cId]
|
del self.pending_orders[order.cId]
|
||||||
del self.pending_callbacks[order.cId]
|
|
||||||
self.bfxapi._emit('order_confirmed', order)
|
self.bfxapi._emit('order_confirmed', order)
|
||||||
|
|
||||||
async def confirm_order_closed(self, raw_ws_data):
|
async def confirm_order_closed(self, raw_ws_data):
|
||||||
@@ -48,7 +50,7 @@ class OrderManager:
|
|||||||
order.set_open_state(False)
|
order.set_open_state(False)
|
||||||
if order.id in self.open_orders:
|
if order.id in self.open_orders:
|
||||||
del self.open_orders[order.id]
|
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.logger.info("Order closed: {} {}".format(order.symbol, order.status))
|
||||||
self.bfxapi._emit('order_closed', order)
|
self.bfxapi._emit('order_closed', order)
|
||||||
|
|
||||||
@@ -94,7 +96,7 @@ class OrderManager:
|
|||||||
return int(round(time.time() * 1000))
|
return int(round(time.time() * 1000))
|
||||||
|
|
||||||
async def submit_order(self, symbol, price, amount, market_type,
|
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()
|
cId = self._gen_unqiue_cid()
|
||||||
# send order over websocket
|
# send order over websocket
|
||||||
payload = {
|
payload = {
|
||||||
@@ -105,24 +107,24 @@ class OrderManager:
|
|||||||
"price": str(price)
|
"price": str(price)
|
||||||
}
|
}
|
||||||
self.pending_orders[cId] = payload
|
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)
|
await self.bfxapi._send_auth_command('on', payload)
|
||||||
self.logger.info("Order cid={} ({} {} @ {}) dispatched".format(
|
self.logger.info("Order cid={} ({} {} @ {}) dispatched".format(
|
||||||
cId, symbol, amount, price))
|
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:
|
if orderId not in self.open_orders:
|
||||||
raise Exception("Order id={} is not open".format(orderId))
|
raise Exception("Order id={} is not open".format(orderId))
|
||||||
order = self.open_orders[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)
|
await order.update(*args, **kwargs)
|
||||||
self.logger.info("Update Order order_id={} dispatched".format(orderId))
|
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:
|
if orderId not in self.open_orders:
|
||||||
raise Exception("Order id={} is not open".format(orderId))
|
raise Exception("Order id={} is not open".format(orderId))
|
||||||
order = self.open_orders[orderId]
|
order = self.open_orders[orderId]
|
||||||
self.pending_callbacks[order.cId] = (onComplete, onError)
|
self.pending_callbacks[order.cId] = (onConfirm, onClose)
|
||||||
await order.cancel()
|
await order.cancel()
|
||||||
self.logger.info("Order cancel order_id={} dispatched".format(orderId))
|
self.logger.info("Order cancel order_id={} dispatched".format(orderId))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user