Рубрики
Без рубрики

Как подключиться к интерактивным брокерам с помощью Python

Брокерское пространство скидки становится очень конкурентоспособным, когда комиссионные, которые недавно получают ноль в M … Tagged with Finance, Python.

Брокерское пространство скидки становится очень конкурентоспособным, когда комиссионные в последнее время, которые в последнее время получают ноль во многих брокерах, в том числе Интерактивные брокеры Анкет IB уже давно является брокером с одним из крупнейших широте продуктов и предложений по обслуживанию, нацеленных на профессиональную аудиторию. Это также недорогой брокер, что делает его отличным вариантом для инвестора -любителя или тех, кто хочет попробовать свои силы на алгоритмической или систематической торговле. В этом посте я надеюсь охватить основы подключения к интерактивным брокерам через Python, чтобы получить последние рыночные данные для инструмента.

IB предлагает набор интерфейсов программирования прикладного программирования (API) для своих данных и услуг, доступных для Java, .net (C#), C ++, Python или DDE, используя их интерфейс программирования приложений Trader Workstation (TWS API). Это не современный веб-API REST, а скорее проприетарное API, которое подключается к локальному серверу, работающему на вашем оборудовании, который затем подключается к IB-серверам через ваше подключение к Интернету. Вы можете запустить либо полный графический интерфейс Trader Workstation (TWS), либо немного меньший шлюз, который используется только для доступа API. Я сосредоточусь на использовании TWS здесь.

У этого есть несколько очевидных недостатков:

  • Вам нужно выучить новый уникальный API, чтобы добиться цели. Если вы знакомы с API REST, это будет немного по -другому.
  • Существует дополнительная часть программного обеспечения, которое работает между вашим кодом и рынком, вводя некоторую задержку.
  • Вы должны аутентифицироваться в API, используя графический интерфейс, поэтому безголовые среды не поддерживаются явно (хотя есть некоторые обходные пути).

Жизнь неплоена, хотя, потому что API довольно хорошо задокументирован и довольно завершен. Преимущество наличия полностью построенного графического интерфейса состоит в том, что вы можете сначала попробовать что -то там, а затем искать через API, чтобы найти соответствующие вызовы, необходимые для выполнения транзакций. Это хороший способ медленно наращивать и автоматизировать торговлю.

Вот основные шаги, чтобы начать работу с интерактивными брокерами. Пример, который я использую для индивидуальной, непрофессиональной обычной учетной записи. Вы также можете открыть индивидуальный пенсионный счет (IRA). На момент написания, IB предлагает два основных варианта для отдельных лиц: IBKR Pro и Ibkr Lite. IBKR Lite предлагает сделки с акциями с нулевыми комиссиями, но в настоящее время доступа API не допускается, поэтому для завершения этого учебника вам понадобится опция PRO. Похоже, что IB будет вносить изменения в эти программы в будущем, и они позволят вам переключать свою учетную запись между опциями, поэтому не очень вреден в выборе Pro для начала, если они решат предложить доступ API с Lite в будущее.

Настройка учетная запись

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

Скачать программное обеспечение TWS

После настройки учетной записи на их веб -сайте я рекомендую загрузить телефон на основе программного обеспечения и настройку двух факторной аутентификации, доступной в настройках пользователя, Secure Login System. Это потребует от вас аутентификации по телефону при аутентификации на IB -серверах или веб -сайте.

Затем загрузите текущую версию программного обеспечения TWS (это было 978,1 во время написания). Это доступно справа от домашней страницы IB, под технологией, платформ. Загрузите последнее программное обеспечение, а не стабильную версию. Вы всегда можете изменить версию, которую вы запускаете, выбрав другую версию на экране входа, как только у вас будет программное обеспечение.

Наконец, загрузите программное обеспечение API из Учетная запись IB GitHub. Пакет программного обеспечения будет включать API C ++, C#и Python и пример кода.

Подписаться на рыночные данные

Поскольку этот пример покажет вам «в реальном времени», вам нужно будет подписаться на рыночные данные. IB готов показать вам отложенные данные (например, 15 минут для акций США) и исторические данные в графическом интерфейсе TWS, но если вы хотите получить доступ к данным с помощью API, вам потребуется подписка на рыночные данные. Для целей этого урока вы можете подписаться только на один обмен на акции США, такие как NASDAQ, за 1,50 доллара в месяц во время написания. IB также предлагает пакеты, если вы хотите получить доступ к более широкой вселенной продуктов.

Настройте TWS для API -доступного доступа

Есть много подробностей о том, как настроить TWS в IB DOCS , но я суммирую здесь основные моменты. После того, как вы работаете, вам необходимо настроить доступ API в настройках. Это находится под файлом, глобальной конфигурацией, API, настроек. Вам нужно как минимум проверить клиентов «Включить клиентов ActiveX и Socket» и обратить внимание на порт сокета в конфигурации, так как нам это понадобится позже. Если вы запускаете местный брандмауэр, вам необходимо обеспечить доступ к этому гнездам локальным программным обеспечением. Вы также можете добавить «127.0.0.1» в список доверенных IPS, если вы не хотите одобрять соединение API вручную. Для безопасности вы не должны открывать этот розетка в мир, сохранить проверку ящика «Разрешить подключения от Localhost».

Настройка среды Python

Я рекомендую использовать Pyenv Для создания виртуальной среды и изоляции версии Python, которую вы используете для разработки. Обратите внимание, что API IB требует Python 3, поэтому убедитесь, что вы используете современную версию. Для этого примера я использовал Python 3.7.5. Если у вас есть другой метод, который вы предпочитаете, идите вперед и настройте среду для установки IB API.

pyenv virtualenv 3.7.5 ib-example
pyenv activate ib-example
# also install wheel for build step in the following section
pip install wheel

Теперь перейдите в каталог Python, где вы поместили загрузку IB API с более раннего и установите и установите пакет (я поместил расслабленный архив в каталог своих проектов). Обратите внимание, что файл readme.md, распределенный с кодом, имеет более полные инструкции, но может не иметь правильной версии, указанной в командах, поэтому вам может потребоваться заглянуть в каталог Dist после строительства, чтобы увидеть имя файла колеса. Я также установил PIP без опции –USER, так как я хочу, чтобы он был установлен в моем VirtualEnv.

cd ~/projects/twsapi\_macunix/IBJts/source/pythonclient/
python setup.py bdist\_wheel
# note the version may be different for you with later downloads...
python -m pip install --upgrade dist/ibapi-9.76.1-py3-none-any.whl

Напишите приложение

Я создал простое приложение командной строки, которое демонстрирует, как использовать API IB. Большая часть этого взята из примера Ibjts/samples/python/testbed/program.py Это распространяется с исходным кодом IB. Любая программа, которая взаимодействует с сервером TWS, должна реализовать два интерфейса. Первый – EWrapper Это реализует все обратные вызовы для обработки любых сообщений данных, отправленных вашему клиенту. Второй – Eclient , что позволяет вам подключать и отправлять сообщения к TWS. Я реализую оба из них в одном классе.

class MarketDataApp(EClient, wrapper.EWrapper):
    def __init__(self, contracts: ContractList, args: argparse.Namespace):
        EClient.__init__(self, wrapper=self)
        wrapper.EWrapper.__init__(self)

Этот класс также должен реализовать несколько методов, чтобы установить соединение и начать обработку сообщений. В документации говорится, что API не готов до тех пор, пока клиент не получит следующий действительный номер заказа в NextValidid перезвонить. Вы получаете сообщения в методах, которые украшены @iswrapper декоратор.

    @iswrapper
    def connectAck(self):
        logging.info("Connected")

    @iswrapper
    def nextValidId(self, orderId: int):
        logging.info(f"Next valid order id: {orderId}")
        self.start()

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

        def start(self):
        if self.started:
            return

        self.started = True
        for contract in self.contracts:
            rid = self.next_request_id()
            self.reqMktData(rid, contract, "233", self.args.snapshot, False, [])
            self.pending_ends.add(rid)
            self.request_contracts[rid] = contract

Теперь, в вашем основном методе, создайте экземпляр вашего класса и вызовите запустить Метод, чтобы начать.

    app = MarketDataApp(contracts, args)
    app.connect("127.0.0.1", args.port, clientId=0)
    app.run()

Я загрузил Полный пример Как суть на GitHub. Вы должны быть в состоянии выполнить вышеуказанные шаги, запустить приложение в вашем VirtualEnv и увидеть данные тика в вашей консоли. Поскольку в приложении включено регистрация информации, вы также должны увидеть информацию о всех запросах API, выполняемых приложением, а также некоторые сообщения, зарегистрированные при ошибке, которые указывают на статус серверов IB. И если все сработало правильно, вы увидите отдельные сообщения для каждого обновления рынка. Чтобы выйти, просто нажмите CTRL-C несколько раз, чтобы сломать петлю события.

$ python get_ticks.py AAPL
INFO:ibapi.client:sent startApi
INFO:ibapi.client:REQUEST startApi {}

ERROR:ibapi.wrapper:ERROR -1 2104 Market data farm connection is OK:usfarm.nj

1 LAST price: 317.95 CanAutoExecute: 0, PastLimit: 0, PreOpen: 0
1 LAST_SIZE size: 4
1 BID_SIZE size: 1
1 ASK_SIZE size: 2
1 LAST_SIZE size: 4

Еще один элемент, запрашиваемые здесь, данные о потоковом рынке-это не тиковой поток данных, а снимок, размещенный каждые 250 мс. Эта задержка отличается типом продукта. Чтобы получить данные по тиканию, вы бы использовали reqtickbytickdata API

Отсюда вы можете построить все, что вы хотите, доступно в API IB. Взгляните на их пример кода, есть много примеров, которые вы можете начать.

Оригинал: “https://dev.to/wrighter/how-to-connect-to-interactive-brokers-using-python-3142”