Alpha 模型
Alpha 模型的作用
Section titled “Alpha 模型的作用”Alpha 模型负责根据市场状态生成候选交易信号。它的职责是判断机会何时出现,并返回一个 Insight,而不是管理完整的订单生命周期。
AQE 通过专用生命周期调用 Alpha 模型:
start()init(asset)generate_insights(symbol)
Alpha 模型 trait
Section titled “Alpha 模型 trait”pub trait AlphaModel { fn version(&self) -> &str; fn start(&mut self, ctx: &mut dyn StrategyContext); fn init(&mut self, ctx: &mut dyn StrategyContext, asset: &Asset); fn generate_insights(&mut self, ctx: &mut dyn StrategyContext, symbol: &str) -> AlphaResult;}各阶段应包含的内容
Section titled “各阶段应包含的内容”start()
Section titled “start()”使用 start() 进行运行时全局配置:
- 注册指标
- 设置预热 K 线数量
- 准备各品种开始初始化之前所需的状态
init(asset)
Section titled “init(asset)”使用 init() 分别配置各资产:
- 初始化品种专属变量
- 读取资产元数据
- 准备各品种的运行时状态
generate_insights(symbol)
Section titled “generate_insights(symbol)”使用 generate_insights():
- 读取最新历史数据
- 检查指标或变量
- 检查资产元数据
- 创建并返回新的
Insight
EmaPriceCrossover 是 AQE 中的一个具体 Alpha 模型。它会:
- 注册 ATR 和 EMA
- 读取历史数据
- 检查最新和前一根 K 线
- 使用资产元数据判断是否允许做空信号
- 返回包含入场、TP、SL 和 TTL 设置的交易信号
fn generate_insights(&mut self, ctx: &mut dyn StrategyContext, symbol: &str) -> AlphaResult { let Some(asset) = self.get_asset(ctx, symbol) else { return AlphaResult::new(None, false, Some(format!("Asset {} not found", symbol)), self.name().to_string()); };
let history = match self.get_history(ctx, symbol) { Some(history) if history.height() >= 2 => history, _ => return AlphaResult::new(None, true, Some("Not enough history".to_string()), self.name().to_string()), };
// derive signal, tp, sl, entry ...
let mut insight = Insight::new( side, symbol.to_string(), StrategyType::Custom(self.name().to_string()), ctx.timeframe().clone(), confidence, None, );
insight .set_limit_price(Some(entry)) .set_take_profit_levels(Some(vec![tp])) .set_stop_loss(Some(sl)) .set_period_unfilled(Some(ttluf as u32)) .set_period_till_tp(Some(ttlf as u32));
AlphaResult::new(Some(insight), true, None, self.name().to_string())}另一种简单模式
Section titled “另一种简单模式”TestEntry 展示了更简单的 Alpha 模型形式:
- 读取近期价格状态
- 统计每个品种的活跃交易信号数量
- 满足条件时发出新的买入或卖出交易信号
如果想从简单实现入手,可以参考它编写自己的策略代码。
Alpha 模型不应承担的职责
Section titled “Alpha 模型不应承担的职责”Alpha 模型不应变成完整的运行时管理器。大多数情况下,应避免将以下职责放入 Alpha 模型:
- 最终仓位数量计算
- 交易提交
- 平仓逻辑
- 止损触发检查
- 交易时段筛选
这些职责更适合放在信号处理器中。
aq-engine/src/core/alpha/mod.rsaq-engine/src/core/alpha/ema_price_crossover.rsaq-engine/src/core/alpha/test_entry.rs
