Skip to main content

Observability

TRADEOS.tech is designed to be observable without additional tooling. Every service, stream, and decision is inspectable in real time through the dashboard, the metrics API, and standard Redis commands.

Dashboard

Local Docker deployment: The dashboard at http://localhost:18002 provides:

Remote deployment: Use the externally-routed dashboard hostname for your environment.

Portfolio view

  • Real-time equity curve (updates every second)
  • Current cash, positions, and unrealized P&L
  • Today's realized P&L and all-time returns
  • Current drawdown from peak, with visual indicator when approaching limits

Signal view

  • Live signal feed with type, symbol, confidence, and direction
  • Signal-level win rate and information coefficient (rolling window)
  • Feasibility rejection log with rejection reason per signal

Position view

  • All open positions with entry price, current price, unrealized P&L
  • Stop loss and take-profit levels for each position
  • Time in trade and maximum allowed hold time remaining

Risk view

  • Active circuit breakers and their trigger conditions
  • Risk limit utilization, showing current drawdown as a percentage of the active profile's threshold
  • Current regime classification (trending / mean-reverting / volatile / low-volatility)
  • VPIN level and whether the crash detection gate is active

System health

  • Per-service health status
  • Redis stream depths (detect consumer lag)
  • Heartbeat status for each service

Metrics API

The Metrics API at http://localhost:18003 provides programmatic access to aggregated performance data:

# Portfolio summary
curl http://localhost:18003/metrics/portfolio

# Performance statistics (Sharpe, Sortino, win rate, etc.)
curl http://localhost:18003/metrics/performance

# Per-signal-type breakdown
curl http://localhost:18003/metrics/signals

# System health and latency
curl http://localhost:18003/metrics/system

# All-in-one snapshot
curl http://localhost:18003/metrics/summary

The metrics API publishes a full snapshot to an internal metrics stream on a regular cadence. This stream can be consumed by the autonomous agent and any external monitoring system.

Redis stream inspection

Because all inter-service communication flows through Redis Streams, you can observe the full system state from a terminal:

# Watch signals as they arrive (blocking)
docker compose exec redis redis-cli XREAD BLOCK 0 COUNT 1 STREAMS signals.raw $

# Check trade approval pipeline depth
docker compose exec redis redis-cli -n 0 XLEN intents
docker compose exec redis redis-cli -n 0 XLEN feasibility_verdicts

# View last 10 risk events
docker compose exec redis redis-cli -n 0 XREVRANGE risk.events + - COUNT 10

# View last 10 fills
docker compose exec redis redis-cli -n 0 XREVRANGE fills.raw + - COUNT 10

# Check autonomous agent tuning decisions
docker compose exec redis redis-cli -n 0 XREVRANGE tuning.decisions + - COUNT 5

Risk events stream

Every risk-related event is published to the risk.events stream:

Event typePublished when
DRAWDOWN_LIMIT_BREACHPortfolio drawdown exceeds profile threshold
CIRCUIT_BREAKER_ACTIVATEDAny circuit breaker fires
FEASIBILITY_REJECTIONTrade intent rejected by any feasibility gate
DEAD_MANS_SWITCH_FIREDHeartbeat missed beyond threshold
LEDGER_CHAIN_BREAKHash chain integrity check fails
REGIME_CHANGEHMM classifier transitions to a new regime
AGENT_TUNING_ERRORAutonomous agent write-back confirmation fails

The dashboard subscribes to this stream for real-time alert display. External systems can also consume the stream via the Redis consumer group API.

Health endpoints

Every service exposes a /healthz endpoint:

curl http://localhost:18000/healthz   # TRADEOS.tech API
curl http://localhost:18003/healthz # Metrics API
curl http://localhost:8085/healthz # Backtest API

The compose health checks use these endpoints. docker compose ps shows health status for all containers.

Log aggregation

Each service writes structured JSON logs to stdout, captured by Docker. To follow a specific service:

docker compose logs -f signal-engine
docker compose logs -f feasibility
docker compose logs -f execution
docker compose logs -f autonomous-agent

All log entries include a correlation_id that matches the envelope ID of the trade intent they relate to. This allows you to trace a single trade decision through every service that touched it by filtering on the correlation ID.