去重股票状态rolling计算
This commit is contained in:
@@ -2264,63 +2264,32 @@ 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 stock_ma_short = self
|
let mut rolling_values = HashMap::<(&'static str, usize), f64>::new();
|
||||||
.stock_decision_rolling_mean(
|
let mut rolling = |field: &'static str, lookback: usize| -> f64 {
|
||||||
ctx,
|
*rolling_values.entry((field, lookback)).or_insert_with(|| {
|
||||||
date,
|
self.stock_decision_rolling_mean(
|
||||||
symbol,
|
ctx,
|
||||||
&factor.extra_factors,
|
date,
|
||||||
"close",
|
symbol,
|
||||||
self.config.stock_short_ma_days,
|
&factor.extra_factors,
|
||||||
)
|
field,
|
||||||
.unwrap_or(f64::NAN);
|
lookback,
|
||||||
let stock_ma_mid = self
|
)
|
||||||
.stock_decision_rolling_mean(
|
.unwrap_or(f64::NAN)
|
||||||
ctx,
|
})
|
||||||
date,
|
};
|
||||||
symbol,
|
let stock_ma_short = rolling("close", self.config.stock_short_ma_days);
|
||||||
&factor.extra_factors,
|
let stock_ma_mid = rolling("close", self.config.stock_mid_ma_days);
|
||||||
"close",
|
let stock_ma_long = rolling("close", self.config.stock_long_ma_days);
|
||||||
self.config.stock_mid_ma_days,
|
let stock_ma5 = rolling("close", 5);
|
||||||
)
|
let stock_ma10 = rolling("close", 10);
|
||||||
.unwrap_or(f64::NAN);
|
let stock_ma20 = rolling("close", 20);
|
||||||
let stock_ma_long = self
|
let stock_ma30 = rolling("close", 30);
|
||||||
.stock_decision_rolling_mean(
|
let stock_volume_ma5 = rolling("volume", 5);
|
||||||
ctx,
|
let stock_volume_ma10 = rolling("volume", 10);
|
||||||
date,
|
let stock_volume_ma20 = rolling("volume", 20);
|
||||||
symbol,
|
let stock_volume_ma60 = rolling("volume", 60);
|
||||||
&factor.extra_factors,
|
let stock_volume_ma100 = rolling("volume", 100);
|
||||||
"close",
|
|
||||||
self.config.stock_long_ma_days,
|
|
||||||
)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_ma5 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "close", 5)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_ma10 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "close", 10)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_ma20 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "close", 20)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_ma30 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "close", 30)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_volume_ma5 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "volume", 5)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_volume_ma10 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "volume", 10)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_volume_ma20 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "volume", 20)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_volume_ma60 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "volume", 60)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let stock_volume_ma100 = self
|
|
||||||
.stock_decision_rolling_mean(ctx, date, symbol, &factor.extra_factors, "volume", 100)
|
|
||||||
.unwrap_or(f64::NAN);
|
|
||||||
let touched_upper_limit = !market.paused
|
let touched_upper_limit = !market.paused
|
||||||
&& (market.is_at_upper_limit_price(market.close)
|
&& (market.is_at_upper_limit_price(market.close)
|
||||||
|| market.is_at_upper_limit_price(market.open)
|
|| market.is_at_upper_limit_price(market.open)
|
||||||
|
|||||||
Reference in New Issue
Block a user