5. Group 与策略信号混合
同一 Operator 中,run_freq 与 run_timing 相同的策略会被归入同一个 Group;每个 Group 内可用 blender 表达式将多个策略的信号合并为一个。
5.1. Group 的由来
添加策略时若指定了
run_freq、run_timing,与已有某组相同则归入该组,否则新建一组。回测/实盘时按 Group 为单位调度:同一 Group 内各策略在同一时刻运行,再用 blender 合并输出。
5.2. 查看 Operator 的 Group
groups:各 Group 的配置与所含策略。
group_timing_table:各组对应的 run_freq、run_timing 一览,便于核对运行时刻。
5.3. blender 表达式
Blender 将同组内多个策略的信号(按加入顺序记为 s0, s1, s2, …)合并为一个。常用形式:
表达式 |
含义 |
|---|---|
|
仅使用第一个策略的信号。 |
|
两策略信号等权加权。 |
|
两信号逐元素相乘(如择时仓位相乘)。 |
|
与 0.5s0+0.5s1 等价。 |
与 signal_type 的关系:PT 时 s0/s1 通常为 [0,1] 的仓位;PS 时需按具体策略约定理解。所有支持的运算为标量与 s0/s1/… 的加减乘除及常数组合。
5.4. 多组时的合并
当 Operator 内有多个 Group 时,group_merge_type 决定多组最终信号如何合并:
None:按框架默认方式(通常为最后一组或指定组)输出。
And:多组信号做“与”逻辑(如择时均为 1 才为 1)。
Or:多组信号做“或”逻辑。
5.5. 示例
两个择时策略等权混合的典型写法:
op = qt.Operator(signal_type='PT', run_freq='d')
op.add_strategy('dma', run_freq='d', run_timing='open')
op.add_strategy('macd', run_freq='d', run_timing='open')
# 在 Group 的 blender 中设置为 0.5*s0+0.5*s1(具体 API 以当前版本为准)
配置完成后,该 Group 在每个运行时刻会先分别计算 dma 与 macd 的信号,再按 blender 输出合并后的仓位。