移除股票rolling临时哈希开销
This commit is contained in:
@@ -2304,12 +2304,10 @@ impl PlatformExprStrategy {
|
||||
let factor = ctx.data.require_factor(factor_date, symbol)?;
|
||||
let candidate = ctx.data.require_candidate(date, symbol)?;
|
||||
let instrument = ctx.data.instrument(symbol);
|
||||
let mut rolling_values = HashMap::<(&'static str, usize), f64>::new();
|
||||
let mut rolling = |field: &'static str, lookback: usize| -> f64 {
|
||||
let rolling = |field: &'static str, lookback: usize| -> f64 {
|
||||
if !self.stock_rolling_requirements.requires(field, lookback) {
|
||||
return f64::NAN;
|
||||
}
|
||||
*rolling_values.entry((field, lookback)).or_insert_with(|| {
|
||||
self.stock_decision_rolling_mean(
|
||||
ctx,
|
||||
date,
|
||||
@@ -2319,15 +2317,46 @@ impl PlatformExprStrategy {
|
||||
lookback,
|
||||
)
|
||||
.unwrap_or(f64::NAN)
|
||||
})
|
||||
};
|
||||
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_long = rolling("close", self.config.stock_long_ma_days);
|
||||
let stock_ma5 = rolling("close", 5);
|
||||
let stock_ma10 = rolling("close", 10);
|
||||
let stock_ma20 = rolling("close", 20);
|
||||
let stock_ma30 = rolling("close", 30);
|
||||
let stock_ma5 = if self.config.stock_short_ma_days == 5 {
|
||||
stock_ma_short
|
||||
} else if self.config.stock_mid_ma_days == 5 {
|
||||
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_ma10 = rolling("volume", 10);
|
||||
let stock_volume_ma20 = rolling("volume", 20);
|
||||
|
||||
Reference in New Issue
Block a user