生命周期与标的池节点
AQS 的生命周期节点和标的池节点,将 AQE 组件模型引入可视化策略图。你可以通过这些节点将策略逻辑模块化,无需手动编辑 .aqmeta 项目中生成的 src/main.rs。
你仍然可以在 Rust 中内联编写这些逻辑。节点用于拆分职责,使图结构更清晰、文件可复用,并更易于在编辑器中配置。
AQS 为此工作流程提供四种模块化节点类型:
- On Start Logic 创建
OnStartLogic组件。 - On Init Logic 创建
OnInitLogic组件。 - On Teardown Logic 创建
OnTeardownLogic组件。 - Universe Model 创建
UniverseModel组件。
生命周期逻辑文件使用 .logic.rs 后缀。标的池模型文件使用 .universe.rs 后缀。
生成的项目如何使用这些节点
Section titled “生成的项目如何使用这些节点”项目包含 .aqmeta 文件时,AQS 管理节点图并重新生成 src/main.rs。不要为这些组件手动编辑生成的 src/main.rs。应添加或编辑自定义组件文件,并更新节点配置。
代码生成负责注册:
- 生命周期逻辑节点转换为 AQE 生命周期包装器;
- 标的池模型节点转换为 AQE 标的池模型包装器;
- 构造函数参数会显示为可配置的公共节点属性;
- 私有结构体字段可能在面板中显示为只读/私有属性;
- 节点串联时,执行顺序遵循图的拓扑结构。
生命周期节点执行时机
Section titled “生命周期节点执行时机”生命周期节点具有执行时机设置:
- Before generated:在该生命周期方法的生成方法体之前运行组件。
- After generated:在该生命周期方法的生成方法体之后运行组件。
前置条件和验证使用 Before generated。逻辑依赖生成的注册或配置已完成时,使用 After generated。
示例:
- 在 Alpha 模型读取之前,为
ctx.variables()填充初始状态; - 在策略启动前验证必需环境变量;
- 在资产已知后初始化品种专属元数据;
- 在收尾后写出运行时诊断数据。
每个节点都有 can_fail 设置。
can_fail = false表示结果不成功时应停止运行。can_fail = true表示 AQE 记录失败并继续。
启动和初始化逻辑通常应严格处理。收尾逻辑通常可以容忍失败,而不停止其余清理工作。
图中的标的池模型
Section titled “图中的标的池模型”Universe Model 节点通过程序返回品种代码。当静态交易标的列表过于受限时,它们很有用。
以下场景可使用 Universe Model 节点:
- 加载自选列表;
- 按元数据筛选品种;
- 按日期或市场状态选择品种;
- 根据账户、经纪商或风险约束选择品种;
- 在多个策略之间共享相同的标的池选择逻辑。
最终 AQE 标的池是生成策略返回的静态集合与每个已连接模型结果的并集。重复品种会被移除。
因此,可以保留简单的静态标的池节点,再添加 Universe Model 节点来动态补充品种。
内联代码仍然有效
Section titled “内联代码仍然有效”节点工作流程不是强制要求。对于小型策略,内联 Rust 往往已经足够:
- 直接在
on_start中添加启动代码; - 直接在
init中添加逐资产配置; - 直接从
universe返回品种代码; - 直接在
on_teardown中添加清理代码。
如果代码需要独立文件、需要在 AQS 节点图中展示、需要通过属性面板配置,或需要复用,就可以使用节点。
- 构造函数参数仅保留用户可调设置。
- 仅运行时使用的状态放入
ctx.variables(),而不是结构体字段。 - 生命周期节点用于配置和清理,而不是生成交易信号。
- 将信号生成保留在 Alpha 模型中。
- 将仓位计算、提交、取消、平仓和管理逻辑保留在信号处理器中。
- 需要严格控制执行顺序时,将生命周期节点串联。
- 返回清晰的
LifecycleResult和UniverseResult消息,使日志和 AQS 界面提供有效信息。
启动阶段:
- 将 On Start Logic 连接到策略生命周期端口;
- 如果生成的 Alpha 模型或信号处理器注册逻辑依赖该组件,将执行时机设为 Before generated;
- 在
ctx.variables()中填充共享初始状态; - 返回成功的
LifecycleResult。
逐资产初始化:
- 将 On Init Logic 连接到初始化生命周期端口;
- 使用
asset参数初始化品种专属状态; - 按组件名称和资产代码存储该状态。
收尾阶段:
- 将 On Teardown Logic 连接到收尾生命周期端口;
- 除非失败必须使本次运行无效,否则设置
can_fail = true; - 持久化或汇总运行时诊断信息。
标的池选择:
- 创建 Universe Model 节点;
- 实现
UniverseModel::run(ctx) -> UniverseResult; - 仅返回该模型负责的品种代码;
- 由 AQE 将这些品种与静态集合和其他模型结果合并。
