Как обработать асинхронную ошибку в ib_insync с python3.7?

Извините, я могу задать глупый вопрос, но я только начинающий в питоне и algotrading. Я сейчас использую Python 3.7 и ibapi с ib_insync, чтобы попытаться подключить TWS. Тем не менее, как Python 3.7 использовать async в качестве ключевого слова, поэтому, когда я пытаюсь кодировать с ib_insync:

from ib_insync import *

ib = IB()
ib.connect('127.0.0.1', 7496, clientId=1)

contract = Forex('EURUSD')
bars = ib.reqHistoricalData(contract, endDateTime='', durationStr='30 D', barSizeSetting='1 hour', whatToShow='MIDPOINT', useRTH=True)

df = util.df(bars)
print(df['date', 'open', 'high', 'low', 'close'])

В конечном итоге это так:

File "C:/Users/leung/Documents/MONEY/Algotrade/venv/test1.py", line 1, in <module>
    from ib_insync import *
  File "C:\Users\leung\AppData\Local\Programs\Python\Python37-32\lib\site-packages\ib_insync\__init__.py", line 24, in <module>
    from .ib import *
  File "C:\Users\leung\AppData\Local\Programs\Python\Python37-32\lib\site-packages\ib_insync\ib.py", line 11, in <module>
    from ib_insync.client import Client
  File "C:\Users\leung\AppData\Local\Programs\Python\Python37-32\lib\site-packages\ib_insync\client.py", line 10, in <module>
    from ibapi.client import EClient
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 963, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 906, in _find_spec
  File "<frozen importlib._bootstrap_external>", line 1280, in find_spec
  File "<frozen importlib._bootstrap_external>", line 1254, in _get_spec
  File "<frozen importlib._bootstrap_external>", line 1235, in _legacy_get_spec
  File "<frozen importlib._bootstrap>", line 441, in spec_from_loader
  File "<frozen importlib._bootstrap_external>", line 594, in spec_from_file_location
  File "C:\Users\leung\AppData\Local\Programs\Python\Python37-32\lib\site-packages\ibapi-9.73.7-py3.7.egg\ibapi\client.py", line 60
    self.async = False
             ^
SyntaxError: invalid syntax

Process finished with exit code 1

Я знаю, что мне нужно изменить имя асинхронного на другое имя. Я пытался изменить файл client.py в ibapi, но он, похоже, не работает вообще. Какую часть кода я должен изменить, чтобы заставить это работать?

1 ответ

Установите самую последнюю версию (API_Version=9.75.01) программного обеспечения IB API - эта проблема там исправлена. Это Python 3.7 зависимый - тот же код хорошо работал для меня на Python 3.6.

Я наткнулся на ту же ошибку в API 973.07. В моем случае я использую MacOS, поэтому путь к файлу выглядит не так, как в вашей среде Windows, но идея та же. Чтобы решить эту проблему, я просто закомментировал строку 60 в файле IBJts/source/pythonclient/build/lib/ibapi/client.py так:

#        self.async = False

Не уверен, повлияет ли это на что-то еще, но по крайней мере я могу скомпилировать и правильно установить библиотеку с помощью:

python3 setup.py install

PS в строке 123 os в этом же файле есть комментарий

#TODO: support async mode

Надеюсь, мои изменения ничего не сломят

Другие вопросы по тегам