5. Operator und Gruppe: Wer wird wann ausgeführt?
5.1. 1. 运行层在整体中的位置
Die Laufzeitschicht ist für die zeitgesteuerte Strategieausführung, die Aggregation der Signale jeder Strategie und die Weitergabe der Ergebnisse an Backtesting/Live-Handel/Optimierung verantwortlich. Der Kern ist der Operator: Er ist sowohl ein Container für Strategien als auch ein einheitlicher Einstiegspunkt für die Ausführung („op.run(config, datasource, logger)“). Durch Group und group_timing_table bestimmt der Operator, „welche Strategien in jedem Zeitschritt ausgeführt werden und wie Signale gemischt werden“, wodurch eine reproduzierbare Ausführung im Einklang mit dem Backtest-Zeitraum und der Ausführungshäufigkeit ermöglicht wird.
5.2. 2. Operator 的角色
Strategiecontainer: Enthält mehrere Gruppen. Jede Gruppe enthält mehrere Strategien (Strategie). Wenn Benutzer Strategien über „add_strategy“ / „Operator([…])“ hinzufügen, werden Strategien einer vorhandenen Gruppe zugewiesen oder eine neue Gruppe basierend auf run_freq und run_timing erstellt.
Einstiegspunkt für die Ausführung: Macht run(config, datasource, logger) extern verfügbar. Die Konfiguration umfasst das Anlageuniversum, den Backtestzeitraum, die Kosten, den Kapitalplan usw.; Die Datenquelle stellt historische oder Echtzeitdaten bereit. Die Ausführungslogik führt jede Gruppe Schritt für Schritt gemäß group_timing_table aus und aggregiert die Signale.
Gruppentimingtabelle verwalten: Vor der Ausführung wird diese Tabelle basierend auf dem Backtestzeitraum (oder dem Live-Zeitplan) und der run_freq und run_timing jeder Gruppe generiert. Jede Zeile entspricht einem Zeitschritt, jede Spalte entspricht einer Gruppe; Ein Wert von 1 bedeutet, dass die Gruppe in diesem Schritt ausgeführt wird, 0 bedeutet, dass sie nicht ausgeführt wird.
5.3. 3. Group 的概念
Definition: Eine Gruppe ist eine Sammlung von Strategien, die dieselben run_freq und run_timing haben und über einen einheitlichen signal_type (PT/PS/VS) und blender (Mischungsregeln) verfügen.
Warum nach „Ausführungszeitpunkt“ gruppieren: Strategien, die zum gleichen Zeitpunkt ausgeführt werden, nutzen denselben Satz an Daten und Planungen zum „aktuellen Zeitschritt“; Beim Mischen werden die Signale zunächst mit einem Mixer als „Signale derselben Gruppe“ zusammengeführt. Anschließend wird „group_merge_type“ verwendet, um den Fall zu handhaben, dass mehrere Gruppen nebeneinander existieren, was das Verständnis und die Konfiguration erleichtert.
5.4. 4. Operator 与 Group 的关系
Ein Operator enthält mehrere Gruppen und jede Gruppe enthält mehrere Strategien.
Wenn beim Hinzufügen einer Strategie bereits eine Gruppe mit derselben run_freq und run_timing vorhanden ist, wird die Strategie dieser Gruppe hinzugefügt. andernfalls wird eine neue Gruppe erstellt. Daher wird die Gruppenpartitionierung vollständig durch den „Laufzeitpunkt“ bestimmt. Die Strategieklasse selbst speichert run_freq/run_timing nicht; Sie werden von der Gruppe verwaltet.
5.5. 5. group_timing_table
Bedeutung: Eine 2D-Tabelle: Zeilen = Zeitschritte (ausgerichtet auf den Backtest-Zeitraum oder den Live-Zeitplan), Spalten = Gruppen; Ein Zellenwert von 1 bedeutet, dass die Gruppe in diesem Schritt ausgeführt wird, 0 bedeutet, dass sie nicht ausgeführt wird.
Zusammenhang mit dem Backtest-Zeitraum und run_freq: Beim Backtesting wird aus invest_start, invest_end und dem Handelskalender eine Zeitleiste generiert, und dann werden run_freq und run_timing jeder Gruppe verwendet, um auf dieser Zeitleiste zu markieren, „welche Schritte welche Gruppen ausführen“, wodurch eine group_timing_table erstellt wird. Beim Live-Handel ist es ähnlich: Welche Gruppen ausgelöst werden, wird durch die tatsächlichen Ausführungstermine und run_freq/run_timing bestimmt.
5.6. 6. blender
Zweck: Es kann mehrere Strategien innerhalb derselben Gruppe geben. Bei jedem Schritt gibt jede Strategie ein Signal aus (einen Skalar oder ein Array). Der Mixer mischt diese Signale nach bestimmten Regeln (z. B. gewichteter Durchschnitt, Summe usw.) zu einem zusammengeführten Signal für die Gruppe.
Konfiguration: Kann ein Ausdruck sein (z. B. „0,5s0+0,5s1“) oder die Standardregeln verwenden: Unter PT wird üblicherweise der Durchschnitt der Zielposition jeder Strategie verwendet; Unter PS/VS wird häufig Summierung usw. verwendet. Weitere Informationen finden Sie in der Dokumentation und in der API.
Ergebnis: Das gemischte Signal wird als Ausgabe dieses Schritts und dieser Gruppe verwendet und dann gemäß group_merge_type mit den Ausgaben anderer Gruppen zusammengeführt (wenn mehrere Gruppen gleichzeitig ausgeführt werden).
5.7. 7. group_merge_type
Wenn mehrere Gruppen gleichzeitig ausgeführt werden, bestimmt group_merge_type, wie Signale von den Gruppen zusammengeführt werden:
Keine: Jede Gruppe gibt unabhängig aus, ohne Zusammenführung (wenn mehrere Gruppen vorhanden sind, kann dies zu mehreren Ausführungspfaden führen, je nachdem, wie die obere Ebene sie verwendet).
Und: Logisches Zusammenführen im AND-Stil, z. B. das Multiplizieren von Signalen über Gruppen hinweg.
Oder: Logisches Zusammenführen im ODER-Stil, z. B. das Hinzufügen von Signalen über Gruppen hinweg.
Die genaue Semantik unterliegt der Dokumentation der jeweils aktuellen Version; Normalerweise müssen Sie sich nicht darum kümmern, wenn Sie eine einzelne Gruppe verwenden.
5.8. 8. 小结
Über Group und group_timing_table implementiert Operator eine einheitliche Planung „nach Zeitschritt, nach Gruppe“: Bei jedem Schritt werden nur die Gruppen ausgeführt, die für diesen Schritt als 1 markiert sind. Strategien innerhalb einer Gruppe teilen sich die Dateninjektion und den Mixer und geben ein zusammengeführtes Signal für Backtesting/Live-Handel/Optimierung aus. Weitere Informationen zur Verwendung finden Sie im Benutzerhandbuch und in der API-Dokumentation.