Interactive Brokers API Поток данных возвращает только значения NaN - PullRequest
0 голосов
/ 01 июня 2019

У меня есть класс, который устанавливает несколько потоков рыночных данных и сохраняет их в массиве.Затем другая функция в том же классе обращается к массиву и запрашивает данные из потоков, но все значения выводятся как NaN.

Вот пример:

 from ib_insync import *

 class Trading:
     def __init__(...):
         self.dataStreams = []
         self.conn = IB()  #establish connecting to the api
         self.tickers = [('BMW', 'IBIS'), ('BAYN', 'IBIS'),  .. ]

     def _stream_data(self): # this function established the data stream and appends it to an array
         for contract in self.tickers:
              stock = Stock(contract[0], contract[1], 'EUR')
              stream = self.conn.reqMktData(stock, '', False, False)
              self.dataStreams.append(stream)
              self.conn.sleep(1)

    def start(self):
        self._stream_data()  # fill the datastream array
        print(self.dataStreams[0].last + self.dataStreams[1].last)  # so this should return the sum of two prices, but it does not

Поэтому, когда я инициализирую вышеуказанный класс в интерпретаторе:

 strategy = Trading()
 strategy.start()

strategy.start() выведет NaN, потому чтоданные из потоков поступают как NaN.Однако, если я получу доступ к массиву потоков данных из объекта стратегии, например, так:

strategy.dataStreams[0].last 

правильно выведет последнюю цену.

Я думаю, что эта проблема связана с природой IB APIработает асинхронно, но у меня недостаточно опыта, чтобы обойти это.Мне нужно сделать другие функции внутри класса, чтобы иметь возможность извлекать данные из потоков и выполнять вычисления.

Можно ли сделать с логикой выше?или мне нужно переместить потоки данных в отдельный класс и инициализировать его отдельно, чтобы иметь доступ к данным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...