Signals Service
Strategy engines for actionable trading signals
The Signals service consumes enriched market data from the Feed, runs multiple trading strategies in parallel, and publishes per-strategy signals directly to Redis. Each AccountExecutor subscribes to the strategy stream it is configured for.
Strategy Purity
Strategies are pure signal generators. They receive a MarketSnapshot and return a StrategySignal. They do not compute entry pricing, position sizing, or manage positions — that is handled by the Executor service.
Intent Actions
Each signal carries one of five intent values; four are actionable (trigger execution):
- BUY — Enter a new long position
- EXIT — Close existing position
- SCALE_IN — Increase position size
- SCALE_OUT — Decrease position size
- WAIT — No action recommended (fire-and-forget)
Strategies
Strategies are built in the UI. Define entry rules, exit rules, and parameters, then save and reuse them. Each account can run multiple strategies in parallel — create as many as you need and attach them per account.
Data Flow
Input: feed:{token}:market:{frame} — Full market snapshots from the Feed (per slot, e.g. 15min).
Output: signal:{strategy}:{account}:{token} — Actionable signals go to Redis streams for Executor consumption; WAIT signals use pub/sub only.
Signal Traceability
Actionable signals carry a unique signal_id (SID) for full traceability from entry to exit. EXIT signals inherit the SID from the open position so the Executor knows exactly which position to close.