5. Operator 與 Group:誰在何時運行

5.1. 1. 运行层在整体中的位置

運行層負責按時間驅動策略執行、彙總各策略信號,並將結果交給回測/實盤/優化使用。核心是 Operator:它既是策略的容器,也是統一的運行入口(op.run(config, datasource, logger))。Operator 通過 Groupgroup_timing_table 決定“每個時間步由哪些策略運行、信號如何混合”,從而實現與回測區間和運行頻率一致的可重複執行。

5.2. 2. Operator 的角色

  • 策略容器:持有多個 Group,每個 Group 內包含若干策略(Strategy)。用戶通過 add_strategy / Operator([...]) 添加策略時,根據 run_freqrun_timing 將策略歸入已有 Group 或新建 Group。

  • 運行入口:對外提供 run(config, datasource, logger)。config 中包含資產池、回測區間、成本、資金計劃等;datasource 提供歷史或實時數據;運行邏輯按 group_timing_table 逐步執行各組策略並彙總信號。

  • 持有 group_timing_table:該表在運行前根據回測區間(或實盤 schedule)與各 Group 的 run_freq、run_timing 生成,每一行對應一個時間步,每一列對應一個 Group,取值爲 1 表示該步該組運行、0 表示不運行。

5.3. 3. Group 的概念

  • 定義:一個 Group 是一組具有相同 run_freqrun_timing 的策略集合,並擁有統一的 signal_type(PT/PS/VS)和 blender(混合規則)。

  • 爲何按“運行時機”分組:同一時刻運行的策略共享同一套“當前時間步”的數據與調度;混合時也按“同組信號”用 blender 合併,再按 group_merge_type 處理多組並存的情況,便於理解和配置。

5.4. 4. Operator 与 Group 的关系

  • Operator 包含多個 Group;每個 Group 包含多個 Strategy。

  • 添加策略時,若已存在相同 run_freq、run_timing 的 Group,則策略加入該 Group;否則新建 Group。因此 Group 的劃分完全由“運行時機”決定,策略類自身不保存 run_freq/run_timing,由所屬 Group 管理。

5.5. 5. group_timing_table

  • 含義:二維表,行 = 時間步(與回測區間或實盤 schedule 對齊),列 = Group;單元格爲 1 表示該步運行該 Group,0 表示不運行。

  • 與回測區間、run_freq 的關係:回測時,根據 invest_start、invest_end 與交易日曆生成時間軸,再根據各 Group 的 run_freq、run_timing 在該時間軸上標記“哪些步運行哪些 Group”,得到 group_timing_table。實盤時同理,按實際運行日與 run_freq/run_timing 決定何時觸發哪些 Group。

5.6. 6. blender

  • 作用:同一 Group 內可能有多個策略,每步各策略輸出一個信號(標量或數組)。blender 將這些信號按一定規則混合成該 Group 的一個合併信號(如加權平均、求和等)。

  • 配置方式:可爲表達式(如 0.5*s0+0.5*s1),或使用默認規則:PT 下常用各策略目標倉位的平均,PS/VS 下常用求和等,具體以文檔與 API 爲準。

  • 結果:混合後的信號作爲該步、該組的輸出,再根據 group_merge_type 與其它組的輸出合併(若有多組同時運行)。

5.7. 7. group_merge_type

當同一時間步有多個 Group 運行時,group_merge_type 決定各組信號如何合併:

  • None:各 Group 獨立輸出,不合並(多組時可能產生多條執行路徑,取決於上層如何使用)。

  • And:各組信號相乘等邏輯與合併。

  • Or:各組信號相加等邏輯或合併。

具體語義以當前版本文檔爲準;通常單組使用時無需關心。

5.8. 8. 小结

Operator 通過 Group 與 group_timing_table 實現“按時間步、按組”的統一調度:每一步只運行該步標記爲 1 的 Group,組內策略共享數據注入與 blender,輸出合併信號供回測/實盤/優化使用。更多用法見《使用教程》與 API 文檔。