拆分共享日线序列与日内字段
This commit is contained in:
@@ -561,23 +561,29 @@ pub fn decision_free_float_cap_bn(factor: &DailyFactorSnapshot) -> f64 {
|
|||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
struct SymbolPriceSeries {
|
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,
|
symbol: String,
|
||||||
dates: Vec<NaiveDate>,
|
dates: Vec<NaiveDate>,
|
||||||
timestamps: Vec<Option<String>>,
|
|
||||||
day_opens: Vec<f64>,
|
day_opens: Vec<f64>,
|
||||||
opens: Vec<f64>,
|
opens: Vec<f64>,
|
||||||
highs: Vec<f64>,
|
highs: Vec<f64>,
|
||||||
lows: Vec<f64>,
|
lows: Vec<f64>,
|
||||||
closes: Vec<f64>,
|
closes: Vec<f64>,
|
||||||
prev_closes: Vec<f64>,
|
prev_closes: Vec<f64>,
|
||||||
last_prices: Vec<f64>,
|
|
||||||
bid1s: Vec<f64>,
|
|
||||||
ask1s: Vec<f64>,
|
|
||||||
volumes: Vec<u64>,
|
volumes: Vec<u64>,
|
||||||
minute_volumes: Vec<u64>,
|
|
||||||
bid1_volumes: Vec<u64>,
|
|
||||||
ask1_volumes: Vec<u64>,
|
|
||||||
trading_phases: Vec<Option<String>>,
|
|
||||||
paused: Vec<bool>,
|
paused: Vec<bool>,
|
||||||
upper_limits: Vec<f64>,
|
upper_limits: Vec<f64>,
|
||||||
lower_limits: Vec<f64>,
|
lower_limits: Vec<f64>,
|
||||||
@@ -585,12 +591,19 @@ struct SymbolPriceSeries {
|
|||||||
open_prefix: Vec<f64>,
|
open_prefix: Vec<f64>,
|
||||||
close_prefix: Vec<f64>,
|
close_prefix: Vec<f64>,
|
||||||
prev_close_prefix: Vec<f64>,
|
prev_close_prefix: Vec<f64>,
|
||||||
last_prefix: Vec<f64>,
|
|
||||||
valid_volume_sum_prefix: Vec<f64>,
|
valid_volume_sum_prefix: Vec<f64>,
|
||||||
valid_volume_count_prefix: Vec<usize>,
|
valid_volume_count_prefix: Vec<usize>,
|
||||||
valid_volume_start_by_count: 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>>;
|
type DenseRowPositionIndex = BTreeMap<NaiveDate, Vec<u32>>;
|
||||||
|
|
||||||
const MISSING_ROW_POSITION: u32 = u32::MAX;
|
const MISSING_ROW_POSITION: u32 = u32::MAX;
|
||||||
@@ -869,34 +882,36 @@ impl SymbolPriceSeries {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
symbol,
|
base: Arc::new(SymbolDailySeriesBase {
|
||||||
dates,
|
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,
|
timestamps,
|
||||||
day_opens,
|
|
||||||
opens,
|
|
||||||
highs,
|
|
||||||
lows,
|
|
||||||
closes,
|
|
||||||
prev_closes,
|
|
||||||
last_prices,
|
last_prices,
|
||||||
bid1s,
|
bid1s,
|
||||||
ask1s,
|
ask1s,
|
||||||
volumes,
|
|
||||||
minute_volumes,
|
minute_volumes,
|
||||||
bid1_volumes,
|
bid1_volumes,
|
||||||
ask1_volumes,
|
ask1_volumes,
|
||||||
trading_phases,
|
trading_phases,
|
||||||
paused,
|
|
||||||
upper_limits,
|
|
||||||
lower_limits,
|
|
||||||
price_ticks,
|
|
||||||
open_prefix,
|
|
||||||
close_prefix,
|
|
||||||
prev_close_prefix,
|
|
||||||
last_prefix,
|
last_prefix,
|
||||||
valid_volume_sum_prefix,
|
|
||||||
valid_volume_count_prefix,
|
|
||||||
valid_volume_start_by_count,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5085,6 +5100,7 @@ mod tests {
|
|||||||
.as_ref()
|
.as_ref()
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
|
let daily_base_before = Arc::clone(&market_series_before.base);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
data.apply_intraday_market_overlays(vec![IntradayMarketSnapshotOverlay {
|
data.apply_intraday_market_overlays(vec![IntradayMarketSnapshotOverlay {
|
||||||
@@ -5120,6 +5136,7 @@ mod tests {
|
|||||||
&market_series_before,
|
&market_series_before,
|
||||||
market_series_after
|
market_series_after
|
||||||
));
|
));
|
||||||
|
assert!(Arc::ptr_eq(&daily_base_before, &market_series_after.base));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
serde_json::to_value(market_series_after.snapshot_at(0)).unwrap(),
|
serde_json::to_value(market_series_after.snapshot_at(0)).unwrap(),
|
||||||
serde_json::to_value(market).unwrap()
|
serde_json::to_value(market).unwrap()
|
||||||
|
|||||||
Reference in New Issue
Block a user