perf: sort transient states by arena index
This commit is contained in:
@@ -10166,7 +10166,8 @@ impl PlatformExprStrategy {
|
|||||||
return Ok((selected, diagnostics, risk_decisions));
|
return Ok((selected, diagnostics, risk_decisions));
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut candidates = Vec::new();
|
let mut candidates = Vec::with_capacity(universe_symbol_ids.len());
|
||||||
|
let mut candidate_states = Vec::with_capacity(universe_symbol_ids.len());
|
||||||
let mut missing_rank_count = 0usize;
|
let mut missing_rank_count = 0usize;
|
||||||
let mut missing_rank_examples = Vec::new();
|
let mut missing_rank_examples = Vec::new();
|
||||||
for symbol_id in universe_symbol_ids {
|
for symbol_id in universe_symbol_ids {
|
||||||
@@ -10240,12 +10241,14 @@ impl PlatformExprStrategy {
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
candidates.push((candidate, stock, rank_value));
|
let state_index = candidate_states.len();
|
||||||
|
candidate_states.push(stock);
|
||||||
|
candidates.push((candidate, rank_value, state_index));
|
||||||
}
|
}
|
||||||
if !self.rank_reuses_market_cap_order() {
|
if !self.rank_reuses_market_cap_order() {
|
||||||
candidates.sort_by(|lhs, rhs| {
|
candidates.sort_by(|lhs, rhs| {
|
||||||
let lhs_value = lhs.2;
|
let lhs_value = lhs.1;
|
||||||
let rhs_value = rhs.2;
|
let rhs_value = rhs.1;
|
||||||
let ordering = if self.config.rank_desc {
|
let ordering = if self.config.rank_desc {
|
||||||
rhs_value
|
rhs_value
|
||||||
.partial_cmp(&lhs_value)
|
.partial_cmp(&lhs_value)
|
||||||
@@ -10264,13 +10267,14 @@ impl PlatformExprStrategy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut selected = Vec::new();
|
let mut selected = Vec::new();
|
||||||
for (candidate, stock, _) in candidates {
|
for (candidate, _, state_index) in candidates {
|
||||||
|
let stock = &candidate_states[state_index];
|
||||||
if !self.selection_candidate_passes_filters(
|
if !self.selection_candidate_passes_filters(
|
||||||
ctx,
|
ctx,
|
||||||
date,
|
date,
|
||||||
day,
|
day,
|
||||||
&candidate.symbol,
|
&candidate.symbol,
|
||||||
&stock,
|
stock,
|
||||||
&mut diagnostics,
|
&mut diagnostics,
|
||||||
)? {
|
)? {
|
||||||
continue;
|
continue;
|
||||||
@@ -10884,7 +10888,6 @@ impl PlatformExprStrategy {
|
|||||||
selection_limit: usize,
|
selection_limit: usize,
|
||||||
) -> Result<(Vec<String>, Vec<String>, usize, Vec<String>), BacktestError> {
|
) -> Result<(Vec<String>, Vec<String>, usize, Vec<String>), BacktestError> {
|
||||||
let mut diagnostics = Vec::new();
|
let mut diagnostics = Vec::new();
|
||||||
let mut candidates = Vec::new();
|
|
||||||
let mut missing_rank_count = 0usize;
|
let mut missing_rank_count = 0usize;
|
||||||
let mut missing_rank_examples = Vec::new();
|
let mut missing_rank_examples = Vec::new();
|
||||||
let quote_usage = self.stock_filter_quote_usage();
|
let quote_usage = self.stock_filter_quote_usage();
|
||||||
@@ -10904,6 +10907,8 @@ impl PlatformExprStrategy {
|
|||||||
selection_risk_deferral,
|
selection_risk_deferral,
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
|
let mut candidates = Vec::with_capacity(universe_symbol_ids.len());
|
||||||
|
let mut candidate_states = Vec::with_capacity(universe_symbol_ids.len());
|
||||||
let execution_day = ctx.data.daily_snapshot_view(date);
|
let execution_day = ctx.data.daily_snapshot_view(date);
|
||||||
let universe_factor_day = ctx.data.daily_snapshot_view(universe_factor_date);
|
let universe_factor_day = ctx.data.daily_snapshot_view(universe_factor_date);
|
||||||
let factor_day = ctx.data.daily_snapshot_view(stock_factor_date);
|
let factor_day = ctx.data.daily_snapshot_view(stock_factor_date);
|
||||||
@@ -10959,7 +10964,9 @@ impl PlatformExprStrategy {
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
candidates.push((candidate.symbol.clone(), rank_value, stock));
|
let state_index = candidate_states.len();
|
||||||
|
candidate_states.push(stock);
|
||||||
|
candidates.push((candidate.symbol.clone(), rank_value, state_index));
|
||||||
}
|
}
|
||||||
candidates.sort_by(|lhs, rhs| {
|
candidates.sort_by(|lhs, rhs| {
|
||||||
let ordering = if self.config.rank_desc {
|
let ordering = if self.config.rank_desc {
|
||||||
@@ -10981,7 +10988,8 @@ impl PlatformExprStrategy {
|
|||||||
let mut quote_candidate_symbols = Vec::new();
|
let mut quote_candidate_symbols = Vec::new();
|
||||||
let mut selected_symbols = Vec::new();
|
let mut selected_symbols = Vec::new();
|
||||||
let mut processed_scope = 0usize;
|
let mut processed_scope = 0usize;
|
||||||
for (symbol, _, stock) in &candidates {
|
for (symbol, _, state_index) in &candidates {
|
||||||
|
let stock = &candidate_states[*state_index];
|
||||||
processed_scope += 1;
|
processed_scope += 1;
|
||||||
if !self.stock_passes_quote_plan_filter(ctx, day, stock, quote_usage)? {
|
if !self.stock_passes_quote_plan_filter(ctx, day, stock, quote_usage)? {
|
||||||
if diagnostics.len() < 12 {
|
if diagnostics.len() < 12 {
|
||||||
|
|||||||
Reference in New Issue
Block a user