5. Group 與策略信號混合

同一 Operator 中,run_freqrun_timing 相同的策略會被歸入同一個 Group;每個 Group 內可用 blender 表達式將多個策略的信號合併爲一個。

5.1. Group 的由來

  • 添加策略時若指定了 run_freqrun_timing,與已有某組相同則歸入該組,否則新建一組。

  • 回測/實盤時按 Group 爲單位調度:同一 Group 內各策略在同一時刻運行,再用 blender 合併輸出。

5.2. 查看 Operator 的 Group

  • groups:各 Group 的配置與所含策略。

  • group_timing_table:各組對應的 run_freq、run_timing 一覽,便於覈對運行時刻。

5.3. blender 表達式

Blender 將同組內多個策略的信號(按加入順序記爲 s0, s1, s2, …)合併爲一個。常用形式:

表達式

含義

s0

僅使用第一個策略的信號。

0.5*s0+0.5*s1

兩策略信號等權加權。

s0*s1

兩信號逐元素相乘(如擇時倉位相乘)。

(s0+s1)/2

與 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 輸出合併後的倉位。