跳转到内容

回测与实时运行

AQE 通过 UnifiedBroker 统一提供交易执行和市场数据接口。

常见组合包括:

  • PaperBroker + YahooFinanceDataFeed:用于本地历史回测。
  • PaperBroker + Mt5DataFeed:使用 MT5 K 线,并在回测中模拟交易执行。
  • Mt5Broker + Mt5DataFeed:用于 MetaTrader 5 实时交易执行。
aq-engine/src/core/broker/mod.rs
let execution = PaperBroker::new(AccountType::Paper, 100_000.0, 1);
let data = YahooFinanceDataFeed::new();
let broker = UnifiedBroker::new_backtest(execution, data);

有关特定经纪商的配置,请参阅经纪商与数据源。

回测运行器遵循当前的 StrategyState::run_backtest 实现:

aq-engine/src/core/strategy/mod.rs
// 1. strategy.on_start(ctx)
// 2. load_universe() -> strategy.universe() -> broker.get_ticker_info()
// 3. alpha.start() per alpha
// 4. load_init() -> OnInit lifecycle logic -> strategy.init per asset
// 5. alpha.init(asset) per alpha per asset
// 6. broker.load_backtest_data()
// 7. loop: broker step -> on_bar() -> optional insight generation -> run_insight_pipeline()
// 8. strategy.on_teardown(ctx)
// 9. return BacktestResults

运行结果文件会保存到磁盘上的以下位置:

  • backtests/<run_id>/backtest.db

AQE 写入的 SQLite 结果文件包含交易日志、完整开平仓记录、账户历史、交易信号和 K 线。你可以在 AlgoQuant Studio 的 Backtest Results 中查看结果,也可以使用任意 SQLite 读取工具。

实时模式使用相同的策略和运行时结构,但会订阅实时数据和交易更新。

可以通过以下方式让 AQE 实时运行:

  • 配合 AQS,传入身份验证信息并启用实时同步
  • 不使用 AQS,运行 run_live(None)
aq-engine/src/node/codegen.rs
if let Err(e) = state.run_live(auth).await {
eprintln!("Live execution failed: {:?}", e);
std::process::exit(1);
}

提供身份验证信息后,AQE 会将实时状态写入 AQS 对应的表,例如:

  • insights
  • strategy_accounts
  • strategy_equity_points
  • strategy_live_metrics
  • strategy_events

省略身份验证信息时,AQE 仍可在本地实时运行,但不会同步到 AQS。

编译 AQE 时启用 runtime 和 tui feature,并让进程连接到交互式终端,回测和实时运行就会自动打开 Ratatui 界面。TUI 会显示指标、活跃交易信号、策略变量、监视的变量路径、AQS 同步状态和运行时事件。

如需使用纯控制台日志流,请添加 --no-tui:

Terminal window
cargo run --features runtime,tui --release -- --no-tui

有关面板布局、控件和实时运行的关闭行为,请阅读终端界面。