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 type | Published when |
|---|---|
DRAWDOWN_LIMIT_BREACH | Portfolio drawdown exceeds profile threshold |
CIRCUIT_BREAKER_ACTIVATED | Any circuit breaker fires |
FEASIBILITY_REJECTION | Trade intent rejected by any feasibility gate |
DEAD_MANS_SWITCH_FIRED | Heartbeat missed beyond threshold |
LEDGER_CHAIN_BREAK | Hash chain integrity check fails |
REGIME_CHANGE | HMM classifier transitions to a new regime |
AGENT_TUNING_ERROR | Autonomous 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.