jgrusewski a36ad53a57 feat(alpha): wire slot 543 consumption — 2D threshold × cost sweep
Phase E.3 Task 23 follow-up. Adds the confidence-threshold gate that
consumes the controller's ISV[543] output. Both binaries:

  fn epsilon_greedy_gated(q, alpha_confidence, threshold, eps, rng) -> u8 {
      if alpha_confidence < threshold { return 0; /* Wait */ }
      epsilon_greedy(q, eps, rng)
  }

State[1] is the env's alpha_confidence = |sigmoid(alpha_logit) - 0.5|
which is in [0, 0.5]; threshold is also clamped [0, 0.5], so direct
comparison is valid.

alpha_dqn_h600_smoke (closed-loop with controller):
  Adds current_threshold: f32 cache, initialised to 0.0 (no gate),
  refreshed via stream.clone_dtoh(&isv_dev) after each per-episode
  controller invocation. Action selector reads current_threshold for
  the NEXT episode's step decisions.

alpha_compose_backtest (2D sweep):
  Adds --threshold-grid CLI flag (default [0.0, 0.05, 0.10, 0.15, 0.20,
  0.25] — Phase 1d.4 pattern). Eval loop becomes 2D (threshold × cost).
  Per-bin includes avg_n_trades for trade-rate visibility. End-of-run
  prints BEST per-cost = max Sharpe_ann across τ.

Results (1000 train ep, 300 eval ep × 5 τ × 5 costs):

  cost      τ=0.00      best τ      Sharpe lift   trades/ep saved
  -------  ----------   ---------   -----------   ---------------
  0.0000   -41.78       -15.72 (τ=0.20)   +26.1   477 → 168 (-65%)
  0.0625   -71.46       -21.30 (τ=0.25)   +50.2   476 → 138 (-71%)
  0.1250   -86.78       -29.17 (τ=0.20)   +57.6   482 → 167 (-65%)
  0.2500  -108.57       -42.12 (τ=0.25)   +66.5   480 → 132 (-73%)
  0.5000  -146.76       -54.86 (τ=0.25)   +91.9   478 → 136 (-72%)

Win rate at cost=0: 7.7% (no gate) → 20.3% (τ=0.20).

The gate architecture is VALIDATED: monotone improvement in win rate +
Sharpe + trade-rate reduction across all costs. The control loop
(controller → slot 543 → policy gate → observed rate feedback) is
sound. But the policy is STILL negative-Sharpe at every cost.

Phase 1d.4 baseline at half-tick: -4.0 (ours: -29.17). 25-pt gap.

Root cause of the remaining gap: the Q-network was TRAINED without
gate awareness. It learned Q-values for the over-trading regime. The
eval-only gate filters those decisions but can't fix miscalibrated
Q-values. Phase 1d.4 baseline beats us because its policy
(always-market-when-confident) is INHERENTLY gated by design — no
mismatched Q-values to fix.

Next iteration to close the 25-pt gap: train WITH gate on, so the
Q-network learns weights for the gated policy class. This means:
either (a) controller runs during training (smoke pattern) and the
threshold develops endogenously, or (b) fixed --train-threshold CLI
during training. Either way, the Q-network sees Wait-at-low-confidence
during the learning phase and adapts.

Files touched:
  crates/ml/examples/alpha_dqn_h600_smoke.rs    (gate + threshold cache)
  crates/ml/examples/alpha_compose_backtest.rs  (gate + 2D sweep)
  config/ml/alpha_compose_backtest.json         (2D verdict)
2026-05-15 18:17:56 +02:00

Foxhunt

Production HFT trading system in Rust.

Architecture

The workspace contains 32 crates organized as follows:

Core Libraries (16)

Crate Purpose
trading_engine Order processing, FIX 4.4, IB TWS, SIMD, RDTSC timing
risk VaR, Kelly, circuit breakers, kill switches, compliance
risk-data Risk data types and shared structures
trading-data Trading data types
ml DQN Rainbow, PPO, TFT, Mamba2, ensemble inference
ml-data ML data types and feature definitions
data Market data ingestion and storage
backtesting Replay engine, strategy tester
adaptive-strategy Ensemble execution, microstructure analysis
common Shared types, resilience, error handling
storage S3 and local model storage
model_loader Model serialization and loading
market-data Market data feed handlers
database PostgreSQL access layer (SQLx)
config Configuration management
tli CLI commands and tooling

Services (8)

Service Purpose
backtesting_service gRPC backtesting service
broker_gateway_service FIX routing, broker connectivity
trading_service Core trading operations
ml_training_service Model training orchestration
data_acquisition_service Market data acquisition
trading_agent_service Autonomous trading agents
api_gateway gRPC API gateway with auth
web-gateway Axum REST + WebSocket gateway

Frontend

web-dashboard/ -- React 19 + TypeScript + Vite + TradingView charts.

Building

# Check compilation (no PostgreSQL required)
SQLX_OFFLINE=true cargo check --workspace

# Run tests for a specific crate
SQLX_OFFLINE=true cargo test -p <crate> --lib

# Clippy
SQLX_OFFLINE=true cargo clippy --workspace

ML Models

Four production model architectures on Candle v0.9.1 with CUDA:

  • DQN Rainbow -- Deep Q-Network with prioritized replay, dueling heads, noisy nets
  • PPO -- Proximal Policy Optimization with GAE and LSTM policies
  • TFT -- Temporal Fusion Transformer for multi-horizon forecasting
  • Mamba2 -- State space model for sequence prediction

Each model has a standalone trainer and a UnifiedTrainable adapter for the hyperopt pipeline.

Infrastructure

  • Git: Gitea at git.fxhnt.ai (Tailscale-only), Scaleway DEV1-S
  • Observability: OpenTelemetry OTLP (env OTEL_EXPORTER_OTLP_ENDPOINT)
  • Database: PostgreSQL with SQLx offline mode for CI

License

Proprietary. All rights reserved.

Description
No description provided
Readme 849 MiB
Languages
Rust 88.2%
Cuda 7.7%
Python 1.3%
Shell 1.1%
PLpgSQL 0.8%
Other 0.8%