def send_cancel_replace(self, order_id, price, qty): # print "Attempting to cancel/replace %s to price=%s qty=%s" % (order_id, price, qty) assert order_id in self.orders assert order_id in self.live_order_ids order = self.orders[order_id] assert ( order.price != price or order.qty != qty ), "Trying to cancel/replace without changing anything for order %s" % str(order_id) request_id = fresh_id() logger.info( "send_cancel_replace: orig_id=%s, replace_id=%s price=%s qty=%s" % (order_id, request_id, price, qty) ) pb = self._make_cancel_replace_request(request_id, order, price, qty) venue = order.venue socket = self.order_sockets[venue] tag = int_to_bytes(order_engine_constants.ORDER_REPLACE) bytes = pb.SerializeToString() socket.send_multipart([tag, self.strategy_id, request_id.bytes, bytes]) self.orders[request_id] = order self.pending.add(order_id, request_id) return request_id
def send_new_order(self, venue, symbol, side, price, qty, order_type=LIM, time_in_force=GFD): # print "Attempting to create new order: venue = %s, symbol = %s, side = %s, price = %s, size = %s" % \ # (venue, symbol, side, price, qty) order_id = fresh_id() logger.info( "send_new_order: id=%s, venue=%s, symbol=%s, side=%s, price=%f, size=%s", order_id, venue, symbol, side, price, qty, ) order = Order(order_id, venue, symbol, side, price, qty, order_type=order_type, time_in_force=time_in_force) pb = self._make_new_order_request(order) socket = self.order_sockets[venue] tag = int_to_bytes(order_engine_constants.ORDER_NEW) bytes = pb.SerializeToString() socket.send_multipart([tag, self.strategy_id, order_id.bytes, bytes]) self.orders[order_id] = order self.live_order_ids.add(order_id) self.pending.add(order_id, order_id) return order_id
def ping(socket, name=None): t0 = time.time() socket.send(int_to_bytes(order_engine_constants.PING)) message_parts = poll_single_socket(socket, 0.25) if message_parts: tag = int_from_bytes(message_parts[0]) tag == order_engine_constants.PING_ACK return time.time() - t0 else: if not name: name = '<not given>' raise RuntimeError('Timed out waiting for ping ack from %s' % name)
def send_cancel(self, order_id): assert order_id in self.orders, "send_cancel: Unknown order %s" % str(order_id) # assert order_id in self.live_order_ids, "send_cancel: Can't cancel dead order %s" % str(order_id) order = self.orders[order_id] request_id = fresh_id() logger.info("Sending cancel for order_id=%s, cancel_request_id=%s", str(order_id), str(request_id)) pb = self._make_cancel_request(request_id, order) tag = int_to_bytes(order_engine_constants.ORDER_CANCEL) bytes = pb.SerializeToString() socket = self.order_sockets[order.venue] socket.send_multipart([tag, self.strategy_id, request_id.bytes, bytes]) self.orders[request_id] = order self.live_order_ids.add(request_id) self.pending.add(order_id, request_id) return request_id
msg_parts = socket.recv_multipart(zmq.NOBLOCK) except: pass if msg_parts: return msg_parts else: if i == 0: sys.stdout.write('Waiting for socket...') sys.stdout.flush() else: sys.stdout.write('.') sys.stdout.flush() return None hello_tag = int_to_bytes(order_engine_constants.STRATEGY_HELO) def say_hello(socket, strategy_id_bytes): socket.send_multipart([hello_tag, strategy_id_bytes]) message_parts = poll_single_socket(socket, 1) if message_parts: [tag, venue_id] = message_parts tag = int_from_bytes(tag) venue_id = int_from_bytes(venue_id) assert tag == order_engine_constants.STRATEGY_HELO_ACK, \ 'Unexpected response to HELO: %d' % tag return venue_id else: raise RuntimeError("Didn't get response to HELO from order engine" )