移除股票rolling临时哈希开销

This commit is contained in:
boris
2026-06-21 01:06:05 +08:00
parent 78af8c3219
commit 0714d1f77b
+46 -17
View File
@@ -2304,30 +2304,59 @@ impl PlatformExprStrategy {
let factor = ctx.data.require_factor(factor_date, symbol)?; let factor = ctx.data.require_factor(factor_date, symbol)?;
let candidate = ctx.data.require_candidate(date, symbol)?; let candidate = ctx.data.require_candidate(date, symbol)?;
let instrument = ctx.data.instrument(symbol); let instrument = ctx.data.instrument(symbol);
let mut rolling_values = HashMap::<(&'static str, usize), f64>::new(); let rolling = |field: &'static str, lookback: usize| -> f64 {
let mut rolling = |field: &'static str, lookback: usize| -> f64 {
if !self.stock_rolling_requirements.requires(field, lookback) { if !self.stock_rolling_requirements.requires(field, lookback) {
return f64::NAN; return f64::NAN;
} }
*rolling_values.entry((field, lookback)).or_insert_with(|| { self.stock_decision_rolling_mean(
self.stock_decision_rolling_mean( ctx,
ctx, date,
date, symbol,
symbol, &factor.extra_factors,
&factor.extra_factors, field,
field, lookback,
lookback, )
) .unwrap_or(f64::NAN)
.unwrap_or(f64::NAN)
})
}; };
let stock_ma_short = rolling("close", self.config.stock_short_ma_days); let stock_ma_short = rolling("close", self.config.stock_short_ma_days);
let stock_ma_mid = rolling("close", self.config.stock_mid_ma_days); let stock_ma_mid = rolling("close", self.config.stock_mid_ma_days);
let stock_ma_long = rolling("close", self.config.stock_long_ma_days); let stock_ma_long = rolling("close", self.config.stock_long_ma_days);
let stock_ma5 = rolling("close", 5); let stock_ma5 = if self.config.stock_short_ma_days == 5 {
let stock_ma10 = rolling("close", 10); stock_ma_short
let stock_ma20 = rolling("close", 20); } else if self.config.stock_mid_ma_days == 5 {
let stock_ma30 = rolling("close", 30); stock_ma_mid
} else if self.config.stock_long_ma_days == 5 {
stock_ma_long
} else {
rolling("close", 5)
};
let stock_ma10 = if self.config.stock_short_ma_days == 10 {
stock_ma_short
} else if self.config.stock_mid_ma_days == 10 {
stock_ma_mid
} else if self.config.stock_long_ma_days == 10 {
stock_ma_long
} else {
rolling("close", 10)
};
let stock_ma20 = if self.config.stock_short_ma_days == 20 {
stock_ma_short
} else if self.config.stock_mid_ma_days == 20 {
stock_ma_mid
} else if self.config.stock_long_ma_days == 20 {
stock_ma_long
} else {
rolling("close", 20)
};
let stock_ma30 = if self.config.stock_short_ma_days == 30 {
stock_ma_short
} else if self.config.stock_mid_ma_days == 30 {
stock_ma_mid
} else if self.config.stock_long_ma_days == 30 {
stock_ma_long
} else {
rolling("close", 30)
};
let stock_volume_ma5 = rolling("volume", 5); let stock_volume_ma5 = rolling("volume", 5);
let stock_volume_ma10 = rolling("volume", 10); let stock_volume_ma10 = rolling("volume", 10);
let stock_volume_ma20 = rolling("volume", 20); let stock_volume_ma20 = rolling("volume", 20);