拆分共享日线序列与日内字段

This commit is contained in:
boris
2026-09-07 13:34:38 +08:00
parent 3f6017d98b
commit 94632f42d6
+45 -28
View File
@@ -561,23 +561,29 @@ pub fn decision_free_float_cap_bn(factor: &DailyFactorSnapshot) -> f64 {
#[derive(Debug, Clone)]
struct SymbolPriceSeries {
base: Arc<SymbolDailySeriesBase>,
timestamps: Vec<Option<String>>,
last_prices: Vec<f64>,
bid1s: Vec<f64>,
ask1s: Vec<f64>,
minute_volumes: Vec<u64>,
bid1_volumes: Vec<u64>,
ask1_volumes: Vec<u64>,
trading_phases: Vec<Option<String>>,
last_prefix: Vec<f64>,
}
#[derive(Debug)]
struct SymbolDailySeriesBase {
symbol: String,
dates: Vec<NaiveDate>,
timestamps: Vec<Option<String>>,
day_opens: Vec<f64>,
opens: Vec<f64>,
highs: Vec<f64>,
lows: Vec<f64>,
closes: Vec<f64>,
prev_closes: Vec<f64>,
last_prices: Vec<f64>,
bid1s: Vec<f64>,
ask1s: Vec<f64>,
volumes: Vec<u64>,
minute_volumes: Vec<u64>,
bid1_volumes: Vec<u64>,
ask1_volumes: Vec<u64>,
trading_phases: Vec<Option<String>>,
paused: Vec<bool>,
upper_limits: Vec<f64>,
lower_limits: Vec<f64>,
@@ -585,12 +591,19 @@ struct SymbolPriceSeries {
open_prefix: Vec<f64>,
close_prefix: Vec<f64>,
prev_close_prefix: Vec<f64>,
last_prefix: Vec<f64>,
valid_volume_sum_prefix: Vec<f64>,
valid_volume_count_prefix: Vec<usize>,
valid_volume_start_by_count: Vec<usize>,
}
impl std::ops::Deref for SymbolPriceSeries {
type Target = SymbolDailySeriesBase;
fn deref(&self) -> &Self::Target {
&self.base
}
}
type DenseRowPositionIndex = BTreeMap<NaiveDate, Vec<u32>>;
const MISSING_ROW_POSITION: u32 = u32::MAX;
@@ -869,34 +882,36 @@ impl SymbolPriceSeries {
}
Self {
symbol,
dates,
base: Arc::new(SymbolDailySeriesBase {
symbol,
dates,
day_opens,
opens,
highs,
lows,
closes,
prev_closes,
volumes,
paused,
upper_limits,
lower_limits,
price_ticks,
open_prefix,
close_prefix,
prev_close_prefix,
valid_volume_sum_prefix,
valid_volume_count_prefix,
valid_volume_start_by_count,
}),
timestamps,
day_opens,
opens,
highs,
lows,
closes,
prev_closes,
last_prices,
bid1s,
ask1s,
volumes,
minute_volumes,
bid1_volumes,
ask1_volumes,
trading_phases,
paused,
upper_limits,
lower_limits,
price_ticks,
open_prefix,
close_prefix,
prev_close_prefix,
last_prefix,
valid_volume_sum_prefix,
valid_volume_count_prefix,
valid_volume_start_by_count,
}
}
@@ -5085,6 +5100,7 @@ mod tests {
.as_ref()
.unwrap(),
);
let daily_base_before = Arc::clone(&market_series_before.base);
assert_eq!(
data.apply_intraday_market_overlays(vec![IntradayMarketSnapshotOverlay {
@@ -5120,6 +5136,7 @@ mod tests {
&market_series_before,
market_series_after
));
assert!(Arc::ptr_eq(&daily_base_before, &market_series_after.base));
assert_eq!(
serde_json::to_value(market_series_after.snapshot_at(0)).unwrap(),
serde_json::to_value(market).unwrap()