System Architecture

Layers that preserve identity, even when markets change.

Dovest separates signal, filtration, risk, and execution into independent layers so the engine behaves predictably as markets, liquidity, and scale change. Each layer has a narrow mandate, clear constraints, and explicit hooks for governance and monitoring.

This page documents how the engine is wired: what each layer is responsible for, how it is validated, and where allocators can plug in their own risk constraints.

System Stack Overview

Layer 1
Signal

Encodes how the engine reads orderflow, volatility identities, and market structure. Signals never size or execute — they only label opportunity and regime.

Behaviour focus: idea quality, not P&L.
Layer 2
Filtration

Gating logic that decides whether the engine is allowed to trade at all, based on environment, liquidity, and stress conditions.

Behaviour focus: when the engine stands aside.
Layer 3
Risk

Position sizing, portfolio constraints, and drawdown guards. This layer encodes allocator rules, not trader intuition.

Behaviour focus: loss profile and max pain.
Layer 4
Execution

Order routing, slicing, and intraday exits. Keeps implementation risk bounded across venues and liquidity regimes.

Behaviour focus: slippage, fill quality, latency.
Signal Layer
Reading behaviour, not predicting price.

Signals are designed to describe what the market is doing — not to forecast exact outcomes. They label structure (trend, mean-reversion, flush), volatility regimes, and liquidity conditions, so other layers can make constrained decisions.

Behaviour tags

Structure & regime labels

Classifies sessions into stable, trending, reversal, or hostile states, using auction and volatility features rather than raw price moves.

Universes

Safe universes

Pre-filtered baskets of symbols that pass long-horizon quality, liquidity, and gap-risk requirements before any intraday decision is made.

Stress hooks

Shock detectors

Metrics tracking intraday deviation, wide-day behaviour, and depth changes so downstream layers know when assumptions are breaking.

Filtration Layer
When the engine is allowed to trade.

Filtration takes the output of the signal layer and decides whether the engine is even allowed to open risk. It encodes hard environmental constraints so that entries are only considered inside safe regimes.

Environment gates

Safe vs hostile sessions

Blocks participation when spreads, depth, or volatility push the engine outside its validated profile.

Liquidity

Liquidity floors

Minimum depth, turnover, and stability requirements per venue before any order is permitted.

Cross-layer checks

Assumption checks

Forces re-validation when behaviour drifts from the training environment, rather than silently extrapolating.

Risk Layer
Position sizing as a constraint, not a view.

The risk layer converts approved opportunities into position sizes, portfolio weights, and drawdown responses. It is where allocator-specific rules and capital budgets are implemented.

Sizing

SafeEntry position sizing

Entry size derived from worst-case intraday behaviour, depth, and stop-distance — not from conviction.

Portfolio

Portfolio constraints

Limits per symbol, sector, and regime so capital is never concentrated in a single failure mode.

Drawdown

Drawdown bands & halts

Pre-defined responses when system or book-level drawdown passes agreed thresholds.

Execution Layer
Converting intent into fills under constraint.

Execution handles how orders are placed, routed, and exited across venues. It is optimised for robustness, traceability, and stable behaviour, not for clever micro-alpha.

Implementation

Order templates

Standardised order types and routing rules per venue, tuned to the engine’s holding period and depth assumptions.

Intraday control

Kill-switches & throttles

Rate limits, venue-level halts, and sanity checks to prevent runaway execution during feed or broker incidents.

Traceability

Execution logs

Full audit trail of intent vs fill, including slippage attribution and latency metrics.

SafeEntry engine across the stack

SafeEntry is the way the system turns falling prices and wide-day behaviour into controlled entries, without ever violating the risk envelope.

  • Signal: detects deep flush patterns and wide-day behaviour within safe universes.
  • Filtration: blocks entries when depth, gaps, or volatility exceed validated bands.
  • Risk: sizes positions from worst-case intraday behaviour, not recent returns.
  • Execution: stages entries so fills remain inside the validated spread and depth profile.

Allocator control points

Allocators can attach their own constraints without rewriting the engine:

  • Capital budgets and max gross/net exposure per mandate.
  • Additional exclusion lists (sectors, tickers, venues).
  • Custom drawdown bands and recovery rules.
  • Reporting hooks into existing risk and compliance systems.