超参数
超参数让同一个策略定义能够生成一组受控回测。AQE 按需展开配置的取值域,依次运行各个组合,并将实际取值与确定性种子一起记录。普通运行仍使用策略的回退值,因此添加此功能不会改变常规回测。
创建 HyperParameterConfig,并将每个参数注册一次。values() 定义离散集合。range(min, max, increment) 创建数值取值域。未传入超参数标志时,使用提供给 HyperParameter::new() 的回退值。
use aq_engine::prelude::*;
let mut hyperparameters = HyperParameterConfig::new();hyperparameters .set_sweep_id("ema-crossover-v1") .add_hyper_parameter( HyperParameter::new("atr_period", 14).values([10, 14, 20]), )? .add_hyper_parameter( HyperParameter::new("ema_period", 21).range(10.0, 30.0, 5.0), )?;set_sweep_id() 是可选的。省略时,AQE 会从配置派生稳定的 ID。如果希望扫描文件夹名称易于识别且长期保持不变,请显式设置该值。
在策略逻辑中使用取值
Section titled “在策略逻辑中使用取值”使用带类型的辅助方法,从策略上下文读取当前生效值。最后一个参数仍然是普通的硬编码回退值。
let atr_period = aq_engine::core::strategy::hyperparameters::hyper_int( ctx, "atr_period", 14_usize,);let ema_period = aq_engine::core::strategy::hyperparameters::hyper_int( ctx, "ema_period", 21_usize,);在构造 Alpha 模型、信号处理器或其他策略组件时使用这些值。AQE 的超参数示例将这两个输入接入内置 EMA 交叉 Alpha 模型,并添加交易信号提交流水线。
将配置附加到每个 StrategyState,然后继续使用常规运行方法。不附加配置时,行为与之前完全相同;附加配置后,状态会在 run_backtest() 或 run_live() 之前自动解析 --hyper-seed。
let mut state = build_strategy_state(timeframe.clone());state.set_hyper_parameter_config(hyperparameters);state.run_backtest(start, end, timeframe).await?;执行完整扫描时,遍历 hyperparameters.process_runs(&args),为每个选择创建全新状态,调用 set_hyper_parameter_config(config.clone()),然后在常规 run_backtest() 之前调用 set_hyper_parameter_run(&selection, true)。已完成的状态持有可变的经纪商和策略运行时状态,因此不能安全地复用于下一个种子。
实时模式采用相同方式:附加配置并调用 state.run_live(None).await?。实时模式会自动解析一个选定种子,并拒绝完整扫描。
结果文件的根目录可选。未设置时,结果会相对于进程工作目录写入;如果存在适用的相邻策略元数据位置,也可能相对于该位置写入。是否执行参数扫描由命令行标志决定,与根目录设置无关。
| 命令 | 结果 |
|---|---|
cargo run --release | 使用常规回退值运行一次。 |
cargo run --release -- --hyper-sweep | 依次运行所有笛卡尔积组合。 |
cargo run --release -- --hyper-seed c89cfd30 | 运行一个已保存的组合。支持唯一的种子前缀。 |
cargo run --release -- --live --hyper-seed c89cfd30 | 使用该确切参数选择启动一个实时会话。 |
选定种子必须恰好匹配一个生成的种子。如果前缀未匹配任何运行,或匹配多个运行,AQE 会报告明确错误。实时会话最多接受一个种子,因此会拒绝 --hyper-sweep --live。你无需手动计算或传入 JSON 参数排列组合表。
结果与可复现性
Section titled “结果与可复现性”完整扫描时,AQE 将结果写入 backtests/hyper/<sweep-id>/<seed>/。每个结果包含常规 SQLite 回测数据库,以及附带种子和解析后参数值的指标。相同的策略配置和种子可以复现相同的参数选择;但若要得到一致的回测表现,还须保持市场数据和任何非确定性外部集成不变。
改用 AQS
Section titled “改用 AQS”如果使用 AlgoQuant Studio,可在节点编辑器中配置相同取值域,并从 Hyperparameters 侧边栏绑定节点输入。AQS 会生成 AQE 配置并处理种子选择。请参阅AQS 中的超参数。
