Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
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)
Esempio n. 4
0
    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
Esempio n. 5
0
            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"
                           )