示例#1
0
    def _start(self, app_context, **kwargs):
        self.ib_config = app_context.app_config.get_config(IBConfig)

        self.next_request_id = self.ib_config.next_request_id
        self.next_order_id = self.ib_config.next_order_id
        self.tws = swigibpy.EPosixClientSocket(self)
        self.port = self.ib_config.port
        self.client_id = self.ib_config.client_id
        self.account = self.ib_config.account

        self.ref_data_mgr = self.app_context.ref_data_mgr
        self.data_event_bus = self.app_context.event_bus.data_subject
        self.execution_event_bus = self.app_context.event_bus.execution_subject
        self.model_factory = IBModelFactory(self.app_context.ref_data_mgr)

        if not self.tws.eConnect("", self.port, self.client_id, poll_auto=False):
            raise RuntimeError('Failed to connect TWS')

        if self.ib_config.use_gevent:
            gevent.spawn(self.poll)
        else:
            thread = threading.Thread(target=self.poll)
            thread.daemon = self.ib_config.daemon
            thread.start()

        if self.account:
            self.__req_acct_update()
        else:
            self.tws.reqManagedAccts()

        self.tws.reqAllOpenOrders()
        self.tws.reqOpenOrders()