信号处理器
信号处理器将交易想法落实为一系列受控决策,可用于仓位计算、交易时段筛选、收益风险比检查、入场提交和持仓管理。信号生成仍应放在 Alpha 模型中。
构建针对特定状态的处理链
Section titled “构建针对特定状态的处理链”当前引擎状态为 New、Executed、Filled、Closed、Cancelled 和 Rejected。到期是产生某种结果的原因,并非独立的 Expired 状态。
对于新建交易信号,典型处理链会设置入场意图、确定保护价位、计算仓位、检查约束并提交。对于已成交交易信号,使用管理处理器处理止损、止盈、分批减仓或按时间退出。
处理顺序很重要:根据风险计算仓位数量之前,必须先有相应的价格和保护参数。在 AQS 中,应先检查信号处理流水线的层级和各节点属性,再运行回测。
自定义处理器接口
Section titled “自定义处理器接口”pub trait InsightPipe { fn version(&self) -> &str; fn run( &mut self, ctx: &mut dyn StrategyContext, insight: &mut Insight, ) -> InsightPipeResult;}这是核心接口;该 trait 还提供可选钩子。InsightPipeResult 描述该阶段是否通过、是否成功、可选消息,以及必须先完成的依赖项。
待完成不等于失败
Section titled “待完成不等于失败”经纪商命令可能无法立即完成,所需快照也可能尚未就绪。运行时会保留后续处理状态,待依赖项就绪后继续执行。
自定义阶段提交交易信号时,使用提供的辅助方法转换变更结果:
InsightPipeResult::from_mutation(insight.submit(ctx), self.name())退出阶段使用:
InsightPipeResult::from_exit_mutation(insight.close(ctx), self.name())这些是处理器 run 方法中的返回表达式。退出辅助方法会阻止后续阶段在同一轮处理内再次发出退出请求。依赖快照的逻辑可以使用 InsightPipeResult::from_read_error,保留缺失的账户、持仓或报价依赖。
不要丢弃变更结果并立即报告成功。请求可能仍在队列中,或正在等待经纪商处理;收到回执并不意味着订单已经成交。
| 组件 | 用途 |
|---|---|
MarketOrderEntryPipe | 根据可用 K 线历史推导市价入场意图。 |
InsightTtlConfigPipe | 配置未成交或已成交交易信号可保持活跃的时长。 |
MinimumRiskToRewardPipe | 验证拟定的风险和收益。 |
InsightSubmitPipe | 检查待处理交易信号树的容量,并请求提交。 |
BasicStopLossPipe | 在保护条件触发时请求退出。 |
BasicTakeProfitPipe | 管理全部或部分止盈退出。 |
内置退出逻辑会处理适用的执行路径。建议使用这些组件,不要将旧版仅基于 K 线的止损或止盈实现复制到新的实时策略中。
数量与经纪商容量
Section titled “数量与经纪商容量”当前仓位计算工具会区分单个订单的最大规模、品种总敞口和账户挂单上限。超大订单可能拆分为执行片段;这些片段不是额外的逻辑 DCA 层级。
容量计算会计入策略当前活跃和已预留的数量。其他策略和手动订单也可能占用经纪商容量,因此最终仍以经纪商为准。请参阅经纪商与数据源。
运行回测,不仅检查成交,也要检查被拒绝和被取消的交易信号,并阅读状态历史,了解每个阶段停止的原因。随后先通过受控的模拟运行验证相同配置,再使用实时交易账户。
