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