跳转到内容

超参数

超参数让同一个策略定义能够生成一组受控回测。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。如果希望扫描文件夹名称易于识别且长期保持不变,请显式设置该值。

使用带类型的辅助方法,从策略上下文读取当前生效值。最后一个参数仍然是普通的硬编码回退值。

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 参数排列组合表。

完整扫描时,AQE 将结果写入 backtests/hyper/<sweep-id>/<seed>/。每个结果包含常规 SQLite 回测数据库,以及附带种子和解析后参数值的指标。相同的策略配置和种子可以复现相同的参数选择;但若要得到一致的回测表现,还须保持市场数据和任何非确定性外部集成不变。

如果使用 AlgoQuant Studio,可在节点编辑器中配置相同取值域,并从 Hyperparameters 侧边栏绑定节点输入。AQS 会生成 AQE 配置并处理种子选择。请参阅AQS 中的超参数。