AI Trading Bot Integration with Interactive Brokers API

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
AI Trading Bot Integration with Interactive Brokers API
Medium
~3-5 business days
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1212
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    822

Интеграция AI-трейдинг-бота с Interactive Brokers API

Interactive Brokers — один из лидирующих брокеров для алготрейдинга: широкий охват активов (акции, опционы, futures, Forex, крипто), низкие комиссии, надёжный API. Интеграция требует понимания нескольких API-слоёв.

API варианты

TWS API (Trader Workstation)

Классический интерфейс через TWS клиент:

  • Требует запущенного TWS или IB Gateway
  • Протокол: бинарный через TCP сокет
  • Python client: ib_insync (async, recommended) или официальный ibapi
  • Latency: ~1–5ms для ордеров

Client Portal API

REST API через IBKR Client Portal Gateway:

  • Современный REST/WebSocket интерфейс
  • Не требует TWS, но нужен gateway процесс
  • Аутентификация: SSO через браузер (неудобно для автоматизации)

FIX API

Для профессиональных клиентов: стандартный финансовый протокол. Lowest latency, наиболее контролируемый.

Python интеграция с ib_insync

from ib_insync import *
import asyncio

ib = IB()
await ib.connectAsync('127.0.0.1', 7497, clientId=1)

# Определение инструмента
contract = Stock('AAPL', 'SMART', 'USD')
await ib.qualifyContractsAsync(contract)

# Получение рыночных данных
bars = await ib.reqHistoricalDataAsync(
    contract,
    endDateTime='',
    durationStr='1 Y',
    barSizeSetting='1 day',
    whatToShow='TRADES',
    useRTH=True
)
df = util.df(bars)

# Real-time streaming
def on_bar_update(bars, has_new_bar):
    if has_new_bar:
        latest = bars[-1]
        run_ml_strategy(latest)  # Запуск ML модели

bars = ib.reqRealTimeBars(contract, 5, 'TRADES', False)
bars.updateEvent += on_bar_update

# Размещение ордера
order = LimitOrder('BUY', 100, 185.50)
order.orderType = 'LMT'
order.tif = 'DAY'
order.outsideRth = False

trade = ib.placeOrder(contract, order)
await asyncio.sleep(1)
print(f"Order status: {trade.orderStatus.status}")

Управление ордерами и позициями

Типы ордеров IBKR

  • Market, Limit, Stop, Stop-Limit — стандартные
  • TWAP, VWAP — алгоритмические ордера IBKR
  • Adaptive Orders — IBKR собственный алгоритм минимизации impact
  • Bracket Orders: входной + take profit + stop loss одним запросом

Portfolio Management

# Получение текущих позиций
positions = ib.positions()
portfolio = ib.portfolio()  # Позиции с market value

# Real-time P&L
pnl = ib.pnl()
pnl_single = ib.pnlSingle(account='DU12345', conId=contract.conId)

# Account summary
account_values = ib.accountValues()
buying_power = next(v for v in account_values if v.tag == 'BuyingPower')

Pre-trade Risk Controls

IBKR имеет собственные risk checks, но рекомендуется программный контроль:

def pre_trade_check(symbol, side, quantity, price):
    """Pre-trade risk validation"""
    # Check buying power
    bp = get_buying_power()
    order_value = quantity * price
    if order_value > bp * 0.2:  # Не более 20% капитала на одну сделку
        raise RiskException("Order too large for available buying power")

    # Check existing position
    existing = get_position(symbol)
    if side == 'SELL' and existing < quantity:
        raise RiskException("Insufficient position to sell")

    # Daily loss limit
    daily_pnl = get_daily_pnl()
    if daily_pnl < -MAX_DAILY_LOSS:
        raise RiskException("Daily loss limit reached")

    return True

Регуляторные ограничения через IBKR

  • PDT (Pattern Day Trader): автоматическое отслеживание, <$25k → ограничения
  • Short selling: availability check обязателен перед short order
  • Options: разные уровни доступа (Level 1–4) требуют заявки
  • Margin requirements: автоматическая проверка IBKR

Мониторинг и алерты

# Error handling
def on_error(reqId, errorCode, errorString, contract):
    if errorCode in [201, 203]:  # Order rejected
        alert(f"Order rejected: {errorString}")
    elif errorCode == 162:  # Data issue
        log.warning(f"Market data issue: {errorString}")

ib.errorEvent += on_error

# Disconnection handling
def on_disconnected():
    log.error("IB disconnected - attempting reconnect")
    asyncio.create_task(reconnect())

ib.disconnectedEvent += on_disconnected

Срок интеграции: 2–4 недели для базовой интеграции, ещё 2–4 недели для production-ready error handling, risk controls, monitoring.