示例#1
0
    def run(self, md_update, place_orders, order_first=False):
        self._synchronize_market_data(md_update)
        poller = zmq.Poller()
        md_socket = self.md_socket
        poller.register(md_socket, zmq.POLLIN)
        print 'ORDER SOCKETS:', self.order_sockets
        print 'ORDER SOCKET VALUES: ', self.order_sockets.values()
        for order_socket in self.order_sockets.values():
            poller.register(order_socket, zmq.POLLIN)

        while True:
            if order_first == True:
                place_orders()
            ready_sockets = poller.poll()
            for (socket, state) in ready_sockets:
        # ignore errors for now
                if state == zmq.POLLERR:
                    print 'POLLERR on socket', socket, 'md socket = ', \
                        self.md_socket, 'order sockets = ', \
                        self.order_sockets
                elif state == zmq.POLLIN:
                    if socket == md_socket:
                        msg = md_socket.recv()
                        bbo = spot_fx_md_1_pb2.instrument_bbo()
                        msg = md_socket.recv()
                        bbo.ParseFromString(msg)
                        md_update(bbo)
                    else:
                        [tag, msg] = socket.recv_multipart()
                        tag = int_from_bytes(tag)
                        self.order_manager.received_message_from_order_engine(tag,
                                msg)
            place_orders()
示例#2
0
    def _synchronize_market_data(self, md_update, wait_time=0.5):
        """For a short period only receive market data without taking any
       actions. Every time a new piece of market data arrives, 
       parse it and call 'md_update' with the parsed struct
    """

        logging.debug('Synchronizing market data')
        poller = zmq.Poller()
        poller.register(self.md_socket, zmq.POLLIN)
        start_time = time.time()
        while time.time() < start_time + wait_time:
            ready_sockets = dict(poller.poll(1000))
            if ready_sockets.get(self.md_socket) == zmq.POLLIN:
                bbo = spot_fx_md_1_pb2.instrument_bbo()
                msg = self.md_socket.recv()
                bbo.ParseFromString(msg)
                md_update(bbo)
        print 'Waited', wait_time, 'seconds, entering main loop'