Passa al contenuto principale

market-data-service

Cosa fa

market-data-service gestisce lo stream market data da IBKR Gateway, pubblica eventi su Redis e offre API di controllo sottoscrizioni/loop snapshot.

Ruoli e responsabilita

  • connessione WebSocket a IBKR Gateway (/v1/api/ws);
  • gestione subscribe/unsubscribe ticker e campi market data;
  • pubblicazione dati normalizzati sul canale Redis data;
  • ciclo snapshot periodico via ibkr-bridge.

Porta esposta

  • Porta interna servizio: 3020
  • Esposizione via Traefik: https://api.trading.expovin.it/market-data-service/*

Architettura grafica

decision-engine / altri consumer

Gestione subscribe live e consumo eventi market-data

HTTP control API
market-data-service

WS gateway client + snapshot loop + publish Redis

  • subscriptions / fields
  • ticker-conid mapping
  • snapshot scheduler
IBKR Gateway

WS live feed (/v1/api/ws)

ibkr-bridge

Snapshot HTTP endpoint

Redis Bus

publish su ENV.market-data-service.data

datahub

settings + log persistenti

Il diagramma evidenzia che:

  • decision-engine invoca market-data-service per gestire le sottoscrizioni live;
  • market-data-service dialoga con IBKR Gateway (WS) e ibkr-bridge (snapshot HTTP);
  • i dati live/snapshot vengono pubblicati su Redis Bus (*.market-data-service.data);
  • settings e log persistenti passano da datahub.

Configurazione (docker-compose.paper.yml)

market-data-service:
image: expovin/market-data-service:${MARKETDATASERVICE_VERSION}
restart: unless-stopped
profiles: ["market-data-service"]
environment:
- DBMANAGER_URL=${DBMANAGER_URL}
- REDIS_URL=${REDIS_URL}
- IBKRGW_BASE_URL=${IBKRGW_BASE_URL}
- IBKR_BRIDGE_URL=${IBKR_BRIDGE_URL}
- ENV=${ENV}
- TZ=${TIMEZONE}
depends_on:
dbmanager:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3020/status/health"]
labels:
- "traefik.enable=true"
- "traefik.http.routers.market-data-service.rule=Host(`api.trading.expovin.it`) && PathPrefix(`/market-data-service`)"
- "traefik.http.services.market-data-service.loadbalancer.server.port=3020"
- "traefik.http.routers.market-data-service.middlewares=market-data-service-stripprefix,cors-default@docker,auth-forward@docker"

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_URLredis://redis:6379URI Redis. Usato sia dal bus eventi che dall'adattatore interno per persistere le configurazioni (tickers, fields, snapshot interval).
LOG_LEVELinfoLivello di log: trace, debug, info, warning, error.
ENVAmbiente di esecuzione (local, paper, prod). Usato nel prefisso dei canali Redis.
LOG_BATCH_MAX_BYTESDimensione massima batch per il log su DB (funzionalita dbLogger).
ENABLE_DB_LOGSe true, abilita la scrittura dei log su DB via datahub.
TZTimezone di sistema del container (es. America/New_York).

IBKR Gateway

VariabileDefaultDescrizione
IBKRGW_BASE_URLURL base del IBKR Client Portal Gateway (es. https://localhost:5000 o tcp://ibkr-gw:5000). Obbligatoria: senza questo valore il modulo non si avvia. Alias accettato: IBKR_BASE_URL.
IBKR_INSECURE_TLSSe true, disabilita la verifica del certificato TLS nella connessione WebSocket e nelle chiamate HTTP verso il Gateway. Utile in ambienti locali con certificato self-signed.

IBKR Bridge

VariabileDefaultDescrizione
IBKR_BRIDGE_URLhttp://ibkr-bridge:3017URL del servizio ibkr-bridge, usato per la risoluzione dei conid (tramite /mirror/iserver/secdef/search) e per il fetch degli snapshot periodici (/mirror/iserver/marketdata/snapshot). Alias accettato: IBKRBRIDGE_URL.

Market data e sottoscrizioni

VariabileDefaultDescrizione
MARKET_DATA_FIELDS31,84,86Lista CSV dei campi market data IBKR da richiedere per ogni ticker sottoscritto. Il valore viene usato sia alla connessione WebSocket che nel ciclo snapshot. Sovrascrivibile anche via Redis (chiave MARKET_DATA:FIELDS).

Pagine dedicate