6. Wie Strategy funktioniert: Timing, Daten und Parameter

6.1. 1. 策略运行时机

Der Ausführungszeitpunkt der Strategie (wann und wie oft sie ausgeführt wird) wird nicht in der Strategieklasse gespeichert, sondern wird durch die Gruppe bestimmt, zu der sie gehört. run_freq und run_timing der Gruppe werden angegeben, wenn die Strategie zu einem Operator hinzugefügt wird (z. B. „add_strategy(stg, run_freq=‘d‘, run_timing=‘close‘)`). Daher führt das Platzieren derselben Strategieinstanz in Gruppen mit unterschiedlichem run_freq/run_timing dazu, dass sie zu unterschiedlichen Zeiten aufgerufen wird.

6.2. 2. 单步运行流程(细化)

Für den aktuellen Zeitschritt (step_index):

  1. Überprüfen Sie die Gruppenzeittabelle: Nehmen Sie die Zeile, die diesem Schritt entspricht, um die Liste der Gruppen abzurufen, die in diesem Schritt ausgeführt werden sollen (Spalten mit dem Wert 1).

  2. Für jede Laufgruppe:

    • Für jede Strategie innerhalb dieser Gruppe: Schneiden Sie basierend auf ihren Datentypen, ihrer Fensterlänge und dem aktuellen Schritt das Datenfenster dieses Schritts aus den vorbereiteten Daten aus und rufen Sie update_running_data_window auf, um es in diese Strategieinstanz einzufügen (geschrieben von dtype_id).

    • Rufen Sie generate() für jede Strategie in dieser Gruppe der Reihe nach auf (es ruft intern realize() ohne Argument auf), sammeln Sie die von jeder Strategie zurückgegebenen Signale und erstellen Sie eine Liste.

    • Verwenden Sie den Mixer dieser Gruppe, um die Signale in der Liste zu einem zusammengeführten Signal für die Gruppe zusammenzuführen.

  3. Wenn in diesem Schritt mehrere Gruppen ausgeführt werden: Führen Sie dann die Signale jeder Gruppe gemäß group_merge_type zu einer zusammen (oder geben Sie sie je nach Implementierung separat aus).

  4. Übergeben Sie das letzte Signal des Schritts an die obere Ebene: Übergeben Sie es beim Backtesting an Backtester, um es in Käufe/Verkäufe zu analysieren und Positionen zu aktualisieren; Geben Sie es im Live-Handel an Trader/Broker weiter, um Aufträge zu generieren.

6.3. 3. Strategy 内部:realize() 与 get_pars / get_data

  • realize(): Akzeptiert keine Argumente. Strategielogik wird nur innerhalb dieser Methode implementiert; Es empfängt keine Daten oder Zeit über Parameter. Verwenden Sie stattdessen get_pars(name, …), um einstellbare Parameter abzurufen, und get_data(dtype_id), um das für den aktuellen Schritt eingefügte Datenfenster abzurufen.

  • Rückgabewert: Ein Skalar oder ein 1D-Array, abhängig von der Basisklasse der Strategie (RuleIterator ist oft ein Skalar, FactorSorter gibt ein Faktor-Array zurück und GeneralStg gibt ein Signal pro Asset zurück). Derselbe realisieren()-Code wird sowohl beim Backtesting als auch beim Live-Handel wiederverwendet, um ein konsistentes Verhalten sicherzustellen.

6.4. 4. 可调参数(Parameter)

  • Definition: Verwenden Sie im init der Strategieklasse pars (eine Parameterliste oder ein Diktat), um die Namen, Typen, Wertebereiche usw. einstellbarer Parameter zu definieren.

  • Setup vor dem Start: Verwenden Sie set_parameter (z. B. „op.set_parameter(stg_id, pars=(…))“), um die Parameterwerte einzugeben, die vor dem Start verwendet werden sollen.

  • Optimierung: Der Optimierer tastet oder durchsucht den Parameterraum (bestimmt durch Parametereinstellungen wie par_range). Für jeden Parametersatz setzt es die Parameter auf Operator und führt einen Backtest durch, aggregiert die Ergebnisse gemäß der Zielfunktion (z. B. Sharpe-Ratio) und findet so eine bessere Parameterkombination.

6.5. 5. 三种策略基类的输入/输出差异

Basisklasse

Eingaben (get_data usw.)

Ausgaben (Rückgabewert der Realisierung)

Typische Anwendungsfälle

RuleIterator

Einzel-Asset- oder Multi-Asset-Datenfenster, abgerufen von dtype_id

Skalar (z. B. 1/-1/0); Für alle Assets gilt die gleiche Regeliteration

Timing, einzelne Regel mit mehreren Instrumenten

FactorSorter

Multi-Asset-Querschnitt (z. B. Faktorwerte für jede Aktie)

Ein 1D-Faktor-Array; Die Engine wählt Aktien anhand von Ranking- und Filterregeln aus

Faktorbasierte Aktienauswahl

GeneralStg

Multi-Asset- und Multi-Dtype-Fenster

Ein 1D-Signalarray (eine Zielposition oder ein Zielgewicht pro Asset)

Allzweck-Multi-Asset-Signale

6.6. 6. 小结

Der gleiche Arbeitsablauf „Schritt → Daten vorbereiten → injizieren → realisieren() → mischen“ dient sowohl dem Backtesting als auch dem Live-Handel: Der Strategie ist es egal, ob sie sich gerade im Backtesting oder im Live-Handel befindet; es hängt nur von get_pars/get_data und dem Timing seiner Gruppe ab. Die Laufzeitschicht ist für die Bereitstellung der entsprechenden Daten in verschiedenen Modi und die Verarbeitung der Ausgangssignale verantwortlich. Weitere Implementierungsdetails finden Sie im „Benutzerhandbuch“ und in der API-Referenz.