修复MA过滤器逻辑错误和成交量过滤器策略名称匹配

- 修复MA过滤器:第二个比较添加 * rsi_rate (ma10 * rsi_rate > ma30)
- 修复成交量过滤器:使用contains匹配策略名称而非精确匹配
- 添加调试日志用于诊断MA过滤问题
- 同时修复strategy.rs和platform_strategy_spec.rs中的逻辑
This commit is contained in:
boris
2026-05-11 20:13:52 +08:00
parent 3b033fd294
commit bbe60537ff
3 changed files with 116 additions and 3 deletions

View File

@@ -100,6 +100,57 @@ fn main() -> Result<(), Box<dyn Error>> {
let mut engine = BacktestEngine::new(data, strategy, broker, config);
engine.run()?
}
"aiquant-v104" => {
let mut strategy_cfg = OmniMicroCapConfig::aiquant_v104();
if let Ok(signal_symbol) = std::env::var("FIDC_BT_SIGNAL_SYMBOL") {
if !signal_symbol.trim().is_empty() {
strategy_cfg.benchmark_signal_symbol = signal_symbol;
}
}
if let Some(date) = debug_date {
let eligible = data.eligible_universe_on(date);
eprintln!(
"DEBUG eligible_universe_on {} count={}",
date,
eligible.len()
);
for row in eligible.iter().take(20) {
eprintln!(" {} {:.6}", row.symbol, row.market_cap_bn);
}
let mut debug_strategy = OmniMicroCapStrategy::new(strategy_cfg.clone());
let debug_subscriptions = BTreeSet::new();
let decision = debug_strategy.on_day(&StrategyContext {
execution_date: date,
decision_date: date,
decision_index: 1,
data: &data,
portfolio: &PortfolioState::new(20_000.0),
futures_account: None,
open_orders: &[],
dynamic_universe: None,
subscriptions: &debug_subscriptions,
process_events: &[],
active_process_event: None,
active_datetime: None,
order_events: &[],
fills: &[],
})?;
eprintln!("DEBUG notes={:?}", decision.notes);
eprintln!("DEBUG diagnostics={:?}", decision.diagnostics);
return Ok(());
}
config.decision_lag_trading_days = decision_lag.unwrap_or(1);
config.execution_price_field = execution_price.unwrap_or(PriceField::Close);
config.initial_cash = initial_cash.unwrap_or(20_000.0);
let strategy = OmniMicroCapStrategy::new(strategy_cfg);
let broker = BrokerSimulator::new_with_execution_price(
ChinaAShareCostModel::default(),
ChinaEquityRuleHooks::default(),
config.execution_price_field,
);
let mut engine = BacktestEngine::new(data, strategy, broker, config);
engine.run()?
}
_ => {
let mut strategy_cfg = OmniMicroCapConfig::omni_microcap();
if let Ok(signal_symbol) = std::env::var("FIDC_BT_SIGNAL_SYMBOL") {