Branching DQN (Tavakoli et al., 2018):
- 3 independent advantage heads (exposure=5, order=3, urgency=3) in CUDA kernel
- `use_branching` as hyperopt-tunable parameter (index 11 in 29D space)
- Branch weight pointers packed into KernelWeightPack struct
KernelWeightPack refactor:
- 87→38 CUDA kernel params by packing 48 weight pointers into 384-byte #[repr(C)] struct
- UNPACK_WEIGHT_PTRS macro in CUDA header for clean kernel-side access
- Single .arg(&weight_pack) replaces 48 individual .arg() calls
Hyperopt metrics in JSON output:
- Added `metrics: Option<serde_json::Value>` to TrialResult<P>
- `extract_metrics()` trait method with default None (DQN overrides)
- JSON output now includes per-trial backtest metrics (Sharpe, Sortino,
Calmar, Omega, drawdown, win_rate, trades) + top-level best_metrics
Prometheus backtest gauges (Rust-side, no CUDA):
- 8 new gauges: foxhunt_hyperopt_best_{sharpe,sortino,calmar,omega,
max_drawdown_pct,win_rate,total_trades,total_return_pct}
Dynamic episode scaling:
- Removed hardcoded 256 episode cap on small GPUs
- VRAM budget calculation in optimal_n_episodes() handles scaling naturally
- Removed stale .min(256) in PPO trainer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
common
Shared types, error handling, and utilities for the Foxhunt HFT ecosystem.
Key Types
FoxhuntError— unified error enum withResultaliasModelType— canonical ML model enum (10 primary variants)CircuitBreakerTrait— async circuit breaker interfaceTlsProtocolVersion,ClientIdentity— TLS configuration types- Market data types (
Tick,OrderBook) and order types (LimitOrder,MarketOrder)
Modules
model_types— canonicalModelTypeenum re-exported by ml/ and model_loader/resilience—CircuitBreakerTraitasync traittls— TLS types and configurationquestdb— QuestDB client configuration
Usage
use common::{FoxhuntError, ModelType};