拆分共享日线序列与日内字段
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user