perf: type static current rolling helpers
This commit is contained in:
@@ -3454,31 +3454,13 @@ impl DataSet {
|
||||
let field = normalized_field(field);
|
||||
match field.as_ref() {
|
||||
"close" | "prev_close" | "stock_close" | "price" => self
|
||||
.adjusted_close_series_by_symbol_id(symbol_id)
|
||||
.and_then(|series| {
|
||||
series_end
|
||||
.map(|end| series.moving_average_at_end(end, lookback))
|
||||
.unwrap_or_else(|| series.current_moving_average(date, lookback))
|
||||
}),
|
||||
"volume" | "stock_volume" => {
|
||||
self.market_series_by_symbol_id(symbol_id)
|
||||
.and_then(|series| {
|
||||
series_end
|
||||
.map(|end| {
|
||||
series
|
||||
.valid_volume_window(end, lookback)
|
||||
.map(|(start, end)| {
|
||||
normalize_rolling_factor(
|
||||
(series.valid_volume_sum_prefix[end]
|
||||
- series.valid_volume_sum_prefix[start])
|
||||
/ lookback as f64,
|
||||
12,
|
||||
)
|
||||
})
|
||||
})
|
||||
.unwrap_or_else(|| series.current_volume_moving_average(date, lookback))
|
||||
})
|
||||
}
|
||||
.market_current_close_moving_average_with_end_by_symbol_id(
|
||||
date, symbol_id, lookback, series_end,
|
||||
),
|
||||
"volume" | "stock_volume" => self
|
||||
.market_current_volume_moving_average_with_end_by_symbol_id(
|
||||
date, symbol_id, lookback, series_end,
|
||||
),
|
||||
"day_open" | "dayopen" => {
|
||||
self.market_series_by_symbol_id(symbol_id)
|
||||
.and_then(|series| {
|
||||
@@ -3514,6 +3496,47 @@ impl DataSet {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn market_current_close_moving_average_with_end_by_symbol_id(
|
||||
&self,
|
||||
date: NaiveDate,
|
||||
symbol_id: u32,
|
||||
lookback: usize,
|
||||
series_end: Option<usize>,
|
||||
) -> Option<f64> {
|
||||
self.adjusted_close_series_by_symbol_id(symbol_id)
|
||||
.and_then(|series| {
|
||||
series_end
|
||||
.map(|end| series.moving_average_at_end(end, lookback))
|
||||
.unwrap_or_else(|| series.current_moving_average(date, lookback))
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn market_current_volume_moving_average_with_end_by_symbol_id(
|
||||
&self,
|
||||
date: NaiveDate,
|
||||
symbol_id: u32,
|
||||
lookback: usize,
|
||||
series_end: Option<usize>,
|
||||
) -> Option<f64> {
|
||||
self.market_series_by_symbol_id(symbol_id)
|
||||
.and_then(|series| {
|
||||
series_end
|
||||
.map(|end| {
|
||||
series
|
||||
.valid_volume_window(end, lookback)
|
||||
.map(|(start, end)| {
|
||||
normalize_rolling_factor(
|
||||
(series.valid_volume_sum_prefix[end]
|
||||
- series.valid_volume_sum_prefix[start])
|
||||
/ lookback as f64,
|
||||
12,
|
||||
)
|
||||
})
|
||||
})
|
||||
.unwrap_or_else(|| series.current_volume_moving_average(date, lookback))
|
||||
})
|
||||
}
|
||||
|
||||
pub fn market_latest_back_adjusted_close(&self, date: NaiveDate, symbol: &str) -> Option<f64> {
|
||||
self.adjusted_close_series(symbol)
|
||||
.and_then(|series| series.latest_back_adjusted_close(date))
|
||||
|
||||
Reference in New Issue
Block a user