跳转到内容

信号处理器

信号处理器将交易想法落实为一系列受控决策,可用于仓位计算、交易时段筛选、收益风险比检查、入场提交和持仓管理。信号生成仍应放在 Alpha 模型中。

当前引擎状态为 New、Executed、Filled、Closed、Cancelled 和 Rejected。到期是产生某种结果的原因,并非独立的 Expired 状态。

对于新建交易信号,典型处理链会设置入场意图、确定保护价位、计算仓位、检查约束并提交。对于已成交交易信号,使用管理处理器处理止损、止盈、分批减仓或按时间退出。

处理顺序很重要:根据风险计算仓位数量之前,必须先有相应的价格和保护参数。在 AQS 中,应先检查信号处理流水线的层级和各节点属性,再运行回测。

pub trait InsightPipe {
fn version(&self) -> &str;
fn run(
&mut self,
ctx: &mut dyn StrategyContext,
insight: &mut Insight,
) -> InsightPipeResult;
}

这是核心接口;该 trait 还提供可选钩子。InsightPipeResult 描述该阶段是否通过、是否成功、可选消息,以及必须先完成的依赖项。

经纪商命令可能无法立即完成,所需快照也可能尚未就绪。运行时会保留后续处理状态,待依赖项就绪后继续执行。

自定义阶段提交交易信号时,使用提供的辅助方法转换变更结果:

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 线的止损或止盈实现复制到新的实时策略中。

当前仓位计算工具会区分单个订单的最大规模、品种总敞口和账户挂单上限。超大订单可能拆分为执行片段;这些片段不是额外的逻辑 DCA 层级。

容量计算会计入策略当前活跃和已预留的数量。其他策略和手动订单也可能占用经纪商容量,因此最终仍以经纪商为准。请参阅经纪商与数据源。

运行回测,不仅检查成交,也要检查被拒绝和被取消的交易信号,并阅读状态历史,了解每个阶段停止的原因。随后先通过受控的模拟运行验证相同配置,再使用实时交易账户。