From cc4e0c5a2d5ad67bd336894a43d0a46bc1e5b0e0 Mon Sep 17 00:00:00 2001 From: jgrusewski Date: Thu, 5 Mar 2026 23:19:38 +0100 Subject: [PATCH] refactor: remove trading_engine dep from ml and risk crates Re-export HardwareTimestamp through data crate instead of ml/risk depending directly on trading_engine. Reduces coupling between the ML pipeline and the trading engine. Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 2 -- crates/data/src/lib.rs | 2 ++ crates/ml/Cargo.toml | 1 - crates/ml/src/data_loaders/dbn_sequence_loader.rs | 8 ++++---- crates/ml/src/data_loaders/dbn_tick_adapter.rs | 2 +- crates/ml/src/data_loaders/streaming_dbn_loader.rs | 2 +- crates/ml/src/lib.rs | 4 ---- crates/risk/Cargo.toml | 1 - 8 files changed, 8 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f26ca6890..02845707f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6300,7 +6300,6 @@ dependencies = [ "toml", "tracing", "tracing-subscriber", - "trading_engine", "urlencoding", "uuid", ] @@ -8603,7 +8602,6 @@ dependencies = [ "tokio-test", "tracing", "tracing-subscriber", - "trading_engine", "uuid", ] diff --git a/crates/data/src/lib.rs b/crates/data/src/lib.rs index ec4dc11dd..00f973124 100644 --- a/crates/data/src/lib.rs +++ b/crates/data/src/lib.rs @@ -224,6 +224,8 @@ pub mod validation; // Data validation and quality control use tracing::{error, info, warn}; // === External Re-exports === +// Re-export HardwareTimestamp so downstream crates (ml) don't need a direct trading_engine dep +pub use trading_engine::timing::HardwareTimestamp; // Commonly used external types use tokio::sync::broadcast; // Import configuration and event types that are actually used diff --git a/crates/ml/Cargo.toml b/crates/ml/Cargo.toml index c7d19fa7d..be34ed5b8 100644 --- a/crates/ml/Cargo.toml +++ b/crates/ml/Cargo.toml @@ -68,7 +68,6 @@ reqwest.workspace = true colored = "2.1" # Terminal color output for evaluation reports # Internal workspace crates -trading_engine.workspace = true config.workspace = true common.workspace = true risk = { path = "../risk" } diff --git a/crates/ml/src/data_loaders/dbn_sequence_loader.rs b/crates/ml/src/data_loaders/dbn_sequence_loader.rs index fd9ca5b0c..112d053fc 100644 --- a/crates/ml/src/data_loaders/dbn_sequence_loader.rs +++ b/crates/ml/src/data_loaders/dbn_sequence_loader.rs @@ -658,7 +658,7 @@ impl DbnSequenceLoader { let volume = Decimal::from(ohlcv.volume); // Create HardwareTimestamp from ts_event (nanoseconds since Unix epoch) - use trading_engine::timing::HardwareTimestamp; + use data::HardwareTimestamp; let timestamp = HardwareTimestamp::from_nanos(ohlcv.hd.ts_event); messages.push(ProcessedMessage::Ohlcv { @@ -680,7 +680,7 @@ impl DbnSequenceLoader { let price = common::Price::from_f64(price_f64.abs())?; let size = Decimal::from(trade.size); - use trading_engine::timing::HardwareTimestamp; + use data::HardwareTimestamp; let timestamp = HardwareTimestamp::from_nanos(trade.hd.ts_event); // Determine side from trade action/flags (c_char is i8) @@ -713,7 +713,7 @@ impl DbnSequenceLoader { let price = common::Price::from_f64(price_f64.abs())?; let size = Decimal::from(mbp.size); - use trading_engine::timing::HardwareTimestamp; + use data::HardwareTimestamp; let timestamp = HardwareTimestamp::from_nanos(mbp.hd.ts_event); // Determine bid/ask from side field (c_char is i8) @@ -818,7 +818,7 @@ impl DbnSequenceLoader { close: common::Price::from_f64(bar.close) .unwrap_or_default(), volume: Decimal::from_f64(bar.volume).unwrap_or(Decimal::ZERO), - timestamp: trading_engine::timing::HardwareTimestamp::from_nanos( + timestamp: data::HardwareTimestamp::from_nanos( bar.timestamp.timestamp_nanos_opt().unwrap_or(0) as u64, ), }) diff --git a/crates/ml/src/data_loaders/dbn_tick_adapter.rs b/crates/ml/src/data_loaders/dbn_tick_adapter.rs index 7698cb4d7..0852d1424 100644 --- a/crates/ml/src/data_loaders/dbn_tick_adapter.rs +++ b/crates/ml/src/data_loaders/dbn_tick_adapter.rs @@ -255,7 +255,7 @@ impl DBNTickAdapter { let volume = Decimal::from(ohlcv.volume); // Create HardwareTimestamp from ts_event (nanoseconds since Unix epoch) - use trading_engine::timing::HardwareTimestamp; + use data::HardwareTimestamp; let timestamp = HardwareTimestamp::from_nanos(ohlcv.hd.ts_event); messages.push(ProcessedMessage::Ohlcv { diff --git a/crates/ml/src/data_loaders/streaming_dbn_loader.rs b/crates/ml/src/data_loaders/streaming_dbn_loader.rs index 024cde4aa..6a8d1ece0 100644 --- a/crates/ml/src/data_loaders/streaming_dbn_loader.rs +++ b/crates/ml/src/data_loaders/streaming_dbn_loader.rs @@ -420,7 +420,7 @@ impl StreamingDbnLoader { let close = common::Price::from_f64(close_f64.abs())?; let volume = Decimal::from(ohlcv.volume); - use trading_engine::timing::HardwareTimestamp; + use data::HardwareTimestamp; let timestamp = HardwareTimestamp::from_nanos(ohlcv.hd.ts_event); messages.push(ProcessedMessage::Ohlcv { diff --git a/crates/ml/src/lib.rs b/crates/ml/src/lib.rs index 7d2152f81..ad5887f0c 100644 --- a/crates/ml/src/lib.rs +++ b/crates/ml/src/lib.rs @@ -162,7 +162,6 @@ use num as _; use num_traits as _; use semver as _; use tempfile as _; -use trading_engine as _; // Direct type imports - no compatibility aliases use rust_decimal::Decimal; @@ -368,9 +367,6 @@ pub enum HealthStatus { Unhealthy, } -// Import specific types from trading_engine that we need -// (removed wildcard prelude to avoid conflicts) - // Using Decimal for financial types /// Market data snapshot for ML model input diff --git a/crates/risk/Cargo.toml b/crates/risk/Cargo.toml index c7f493222..5fca50f40 100644 --- a/crates/risk/Cargo.toml +++ b/crates/risk/Cargo.toml @@ -14,7 +14,6 @@ categories.workspace = true [dependencies] # Core workspace dependencies -trading_engine = { workspace = true } config = { workspace = true } common = { path = "../common" }