From 616d9cdce20f2e9f3902413e0b3f49147b9cfa1e Mon Sep 17 00:00:00 2001 From: boris Date: Thu, 18 Jun 2026 16:32:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9B=9E=E6=B5=8B=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=E5=BF=AB=E7=85=A7=E7=BB=84=E4=BB=B6=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/fidc-core/src/data.rs | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/crates/fidc-core/src/data.rs b/crates/fidc-core/src/data.rs index 58d9370..567cd8c 100644 --- a/crates/fidc-core/src/data.rs +++ b/crates/fidc-core/src/data.rs @@ -365,6 +365,17 @@ pub struct DailySnapshotBundle { pub corporate_actions: Vec, } +#[derive(Debug, Clone)] +pub struct DataSetSnapshotComponents { + pub instruments: Vec, + pub market: Vec, + pub factors: Vec, + pub candidates: Vec, + pub benchmarks: Vec, + pub corporate_actions: Vec, + pub execution_quotes: Vec, +} + #[derive(Debug, Clone, Serialize)] pub struct PriceBar { #[serde(with = "date_format")] @@ -1441,6 +1452,49 @@ impl DataSet { quotes } + pub fn snapshot_components(&self) -> DataSetSnapshotComponents { + let mut instruments = self.instruments.values().cloned().collect::>(); + instruments.sort_by(|left, right| left.symbol.cmp(&right.symbol)); + + let market = self + .market_by_date + .values() + .flat_map(|rows| rows.iter().cloned()) + .collect::>(); + let factors = self + .factor_by_date + .values() + .flat_map(|rows| rows.iter().map(|row| row.as_ref().clone())) + .collect::>(); + let candidates = self + .candidate_by_date + .values() + .flat_map(|rows| rows.iter().map(|row| row.as_ref().clone())) + .collect::>(); + let benchmarks = self.benchmark_by_date.values().cloned().collect::>(); + let corporate_actions = self + .corporate_actions_by_date + .values() + .flat_map(|rows| rows.iter().cloned()) + .collect::>(); + let execution_quotes = self + .execution_quotes_by_date + .values() + .flat_map(|rows_by_symbol| rows_by_symbol.values()) + .flat_map(|rows| rows.iter().cloned()) + .collect::>(); + + DataSetSnapshotComponents { + instruments, + market, + factors, + candidates, + benchmarks, + corporate_actions, + execution_quotes, + } + } + pub fn benchmark_series(&self) -> Vec { self.benchmark_by_date.values().cloned().collect() }