Passa al contenuto principale

broker-executor-ibkr

Cosa fa

broker-executor-ibkr espone API di esecuzione ordini verso IBKR (bracket order lifecycle) e sincronizza stato ordini/posizioni tramite listener websocket.

Ruoli e responsabilita

  • crea/modifica/cancella ordini bracket su IBKR;
  • gestisce idempotenza di creazione ordine con externalCorrelationId;
  • mantiene stato ordini tramite riconciliazione periodica + feed live websocket;
  • espone endpoint di lettura ordini, posizioni e stato WS.

Porta esposta

  • Porta interna servizio: 3003
  • Esposizione via Traefik (local profile): http://localhost/broker-executor-ibkr/*

Architettura grafica

Decision-engine / Scheduler

Invocano esecuzione ordini

Traefik + AuthForward

Protegge /broker-executor-ibkr/*

REST API ordini + status WS
broker-executor-ibkr

Controller + IbkrOrdersService + WS listener

  • creazione/modifica/cancellazione bracket orders
  • idempotenza su externalCorrelationId
  • reconciliation ordini/posizioni da WS + snapshot
ibkr-bridge / IBKR GW

Mirror API e websocket ordini live

Redis

eventi stato ordini e update runtime

datahub

supporto configurazione/logging shared

Configurazione compose

Nel repository attuale il servizio e definito in docker-compose.local.yml (non in docker-compose.paper.yml).

broker-executor-ibkr:
image: local/broker-executor-ibkr:${BROKER_EXECUTOR_IBKR_VERSION:-latest}
ports:
- "3003:3003"
profiles: ["broker-executor-ibkr"]
environment:
- DATAHUB_URL=http://datahub:3000
- REDIS_URL=redis://redis:6379
- IBKRBRIDGE_URL=http://ibkr-bridge:3017
- IBKRGW_BASE_URL=https://ibkrgw-paper:5000
- IBKR_WS_URL=wss://ibkrgw-paper:5000/v1/api/ws
- IBKR_INSECURE_TLS=true
- IBKR_EXECUTOR_USE_BRIDGE=true
- TZ=${TIMEZONE}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3003/status/health"]

Variabili d'ambiente

Infrastruttura

Variabili obbligatorie gestite da BaseService (comune a tutti i microservizi).

VariabileDefaultDescrizione
DATAHUB_URLhttp://datahub:3000URL del servizio datahub (ex DBMANAGER_URL, ancora accettato come alias).
REDIS_URLURI Redis (es. redis://redis:6379). Obbligatorio per il bus eventi e i canali di stato.
LOG_LEVELinfoLivello di log: trace, debug, info, warning, error.
ENVDEVAmbiente di esecuzione (local, paper, prod). Usato nel prefisso dei canali Redis.
TZTimezone di sistema del container (es. America/New_York).

Connessione al gateway IBKR

VariabileDefaultDescrizione
IBKRBRIDGE_URLURL del servizio ibkr-bridge. Quando IBKR_EXECUTOR_USE_BRIDGE=true (default), tutte le chiamate REST verso IBKR passano per questo bridge.
IBKR_EXECUTOR_USE_BRIDGEtrueSe true, le richieste REST usano ibkr-bridge come proxy; se false, si connette direttamente al gateway IBKR.
IBKRGW_BASE_URLhttp://ibkrgw-paper:5000URL base del gateway IBKR (usato solo se IBKR_EXECUTOR_USE_BRIDGE=false, oppure come alias IBKR_BASE_URL).
IBKR_INSECURE_TLSfalseSe true, disabilita la verifica del certificato TLS nelle connessioni HTTPS al gateway IBKR. Utile in ambienti di test con certificati auto-firmati.
IBKR_REQUEST_TIMEOUT_MS20000Timeout in millisecondi per le chiamate REST verso il gateway IBKR.
IBKR_AUTO_REPLY_CONFIRMtrueSe true, conferma automaticamente i dialoghi di conferma IBKR (/iserver/reply/{id}) durante la creazione degli ordini.

WebSocket IBKR (feed live ordini)

VariabileDefaultDescrizione
IBKR_WS_URLwss://ibkrgw-paper:5000/v1/api/wsURL WebSocket del gateway IBKR per il feed live degli ordini. Alias accettato: IBKRGW_WS_URL.
IBKR_WS_RECONNECT_MIN_MS1000Ritardo minimo (ms) prima di tentare una riconnessione WebSocket dopo una disconnessione.
IBKR_WS_RECONNECT_MAX_MS30000Ritardo massimo (ms) per la riconnessione WebSocket (backoff esponenziale con cap).
IBKR_WS_HEARTBEAT_MS25000Intervallo (ms) di invio heartbeat sul WebSocket per mantenere la connessione attiva.
IBKR_WS_INSECURE_TLSOverride specifico per il WebSocket. Se non impostato, eredita il valore di IBKR_INSECURE_TLS.
IBKR_WS_RECONCILE_POLL_MS60000Intervallo (ms) di riconciliazione periodica degli ordini tramite REST, in parallelo al feed WebSocket.

Account e ordini

VariabileDefaultDescrizione
IBKR_ACCOUNT_IDID account IBKR. Se non impostato, il servizio lo risolve automaticamente chiamando /iserver/accounts al primo utilizzo. Obbligatorio in produzione per evitare ambiguità su account multipli.
IBKR_IDEMPOTENCY_HOURS6Durata in ore della cache in-memory per l'idempotenza della creazione ordini (basata su externalCorrelationId).
IBKR_POSITIONS_REFRESH_DEBOUNCE_MS3000Debounce in millisecondi per l'aggiornamento delle posizioni: evita refresh multipli ravvicinati a seguito di eventi live.

Autenticazione interna (token service-to-service)

VariabileDefaultDescrizione
INTERNAL_JWT_PUBLIC_KEYChiave pubblica RSA/EC per validare i token service-to-service (x-internal-token). Obbligatoria per gli endpoint interni protetti.
INTERNAL_JWT_ISSUERastraai-internalIssuer atteso nel token JWT interno.
INTERNAL_JWT_AUDIENCEAudience attesa nel token JWT interno. Se vuota, il controllo viene saltato.
INTERNAL_JWT_SCOPEScope atteso nel token JWT interno. Se vuoto, il controllo viene saltato.

Pagine dedicate