12. Optimierer-Strategie-Optimierer
Optimizer ist ein Strategieoptimierer, der Strategieparameter mithilfe von Methoden wie genetischen Algorithmen und Partikelschwarmoptimierung optimieren kann.
- class qteasy.optimization.Optimizer(*, op: Operator, method: str, shares: list[str], benchmark: DataFrame, pool_size: int, opti_target: str, opti_direction: str, parallel: bool, opti_start_date: str, opti_end_date: str, test_start_date: str, test_end_date: str, opti_cash_plan: CashPlan, test_cash_plan: CashPlan, cost_params: ndarray, signal_parsing_params: dict, trading_moq_params: dict, trading_delivery_params: dict, search_config: dict, logger: Optional[Logger] = None, evaluate_indicators: str = 'r,m,v,b', test_plot_type: str = 'histo')[Quellcode]
Suchobjekt für optimale Parameter
13. Methode zur Strategieparameteroptimierung
Rastersuche
- class qteasy.optimization.Optimizer._search_grid(self, space: Space)
Rastersuche: Abtasten des Parameterraums mit einer festen Schrittgröße und stapelweise Auswertung.
- Parameter:
space (Space) – Der zu durchsuchende Parameterraum.
- Rückgabe:
Schreiben Sie das optimale Ergebnis in „self.result_pool“.
- Rückgabetyp:
None
Monte-Carlo-Suche
- class qteasy.optimization.Optimizer._search_montecarlo(self, space: Space)
Monte-Carlo-Zufallssuche: Gleichmäßige zufällige Stichprobe innerhalb des „Raums“ und stapelweise Auswertung.
- Parameter:
space (Space) – Der zu durchsuchende Parameterraum.
- Rückgabe:
Schreiben Sie das optimale Ergebnis in „self.result_pool“.
- Rückgabetyp:
None
Simulierte Glühsuche
- class qteasy.optimization.Optimizer._search_sa(self, space: Space)
Progressive Zufallssuche in Schrittgröße: mehrere Runden von Monte Carlo + Unterraumkontraktion.
Führen Sie in jeder Runde eine zufällige Stichprobe innerhalb mehrerer Unterräume durch. Nachdem Sie das Beste ausgewählt haben, verkleinern Sie die Nachbarschaft mithilfe von Konfigurationen wie „reduce_ratio“ und fahren mit der nächsten Runde fort, bis Stoppbedingungen wie „min_volume“ oder „max_rounds“ erfüllt sind.
- Parameter:
space (Space) – Anfänglicher Parameterraum.
- Rückgabe:
Schreiben Sie das optimale Ergebnis in „self.result_pool“.
- Rückgabetyp:
None
Suche nach genetischen Algorithmen
- class qteasy.optimization.Optimizer._search_ga(self, space: Space)
Optimaler Hyperparameter-Suchalgorithmus 4: Genetischer Algorithmus. Genetische Algorithmen eignen sich dazu, in einem extrem großen Parameterraum nach einem globalen Optimum oder einem angenäherten globalen Optimum zu suchen und dabei den Rechenaufwand in einem akzeptablen Rahmen zu halten.
Genetische Algorithmen basieren auf dem iterativen genetischen Prozess lebender Organismen. Zunächst wird eine bestimmte Anzahl von Parameterpunkten im Parameterraum zufällig ausgewählt. Dieser Satz von Parameterpunkten wird als „Population“ bezeichnet. Basierend auf dieser Grundgesamtheit wird dann eine iterative Berechnung durchgeführt. Vor jeder Iteration (Reproduktion genannt) wird die Wahrscheinlichkeit, dass jedes Individuum überlebt oder stirbt, anhand des Wertes seiner Bewertungsfunktion bestimmt. Die Regel lautet: Je näher der Wert der Bewertungsfunktion eines Individuums am optimalen Wert liegt, desto höher ist seine Überlebenswahrscheinlichkeit und desto höher ist seine Wahrscheinlichkeit, Nachkommen zu zeugen. andernfalls sind diese Wahrscheinlichkeiten geringer. Nach der Bestimmung der Überlebens-/Todes- und Fortpflanzungswahrscheinlichkeiten wird eine bestimmte Anzahl von Individuen entsprechend der Überlebens-/Todeswahrscheinlichkeiten zum Sterben ausgewählt. Aus den verbleibenden (überlebenden) Individuen werden diejenigen mit den höchsten Reproduktionswahrscheinlichkeiten für die Überkreuzung und die Reproduktion der nächsten Generation von Individuen ausgewählt. Gleichzeitig werden bei der Fortpflanzung zufällige genetische Mutationen eingeführt, um neue Individuen zu erzeugen. Letztendlich wird die Populationsgröße wieder auf ihren ursprünglichen Wert zurückgeführt. Auf diese Weise ist eine Populationsiteration abgeschlossen. Der obige Prozess wird über Tausende oder sogar Zehntausende Generationen wiederholt, bis die gewünschte optimale oder nahezu optimale Lösung in der Population auftritt.
- Parameter:
space (qt.Space) – Parameterraumobjekt
- Rückgabetyp:
None,搜索的结果最佳值会被保存在self.result_pool属性中
Suche nach Gradientenabstieg
- class qteasy.optimization.Optimizer._search_gradient(self, space: Space)
Optimaler Parametersuchalgorithmus 5: Gradientenabstieg (gleichzeitige Multipunkt-Gradientensuche)
Finden Sie im Parameterraum die Richtung, in der sich das Optimierungsergebnis am schnellsten verbessert, und bewegen Sie sich immer in die beste Richtung (unter Verwendung einer adaptiven Schrittgröße), bis sich das Ergebnis nicht mehr ändert oder die maximale Anzahl von Schritten erreicht ist. Wählen Sie zufällig N Startpunkte im Parameterraum aus, um die Suche zu starten. Die Ausgabe sind die N Ergebnisse des letzten Schritts.
Die Nachbarschaft wird über space.neighbors(point, axis_index, …) generiert und unterstützt int/float/enum/int_array/float_array. Adaptive Schrittgrößen (Erhöhung/Verringerung) werden nur auf Float-Dimensionen angewendet; Wenn es keine Verbesserung gibt, wird die Schrittgröße verringert und die Trajektorie endet, wenn die Schrittgröße zu klein wird oder wenn die Anzahl aufeinanderfolgender Nichtverbesserungen den Schwellenwert erreicht.
- Parameter:
space (Space) – Parameterraum
- Rückgabetyp:
None
Suche nach Partikelschwarmoptimierung
- class qteasy.optimization.Optimizer._search_pso(self, space: Space)
Optimaler Hyperparameter-Suchalgorithmus 6: Partikelschwarmoptimierung (PSO)
Wählen Sie zufällig N Startpunkte im Parameterraum als Anfangspositionen des Partikelschwarms. Jedes Partikel passt seine Geschwindigkeit und Position basierend auf seiner eigenen historischen Bestposition und der globalen historischen Bestposition an und nähert sich allmählich dem Optimum. Nach mehreren Iterationen konvergiert der Schwarm zum globalen Optimum oder einem ungefähren Optimum.
Die numerische Darstellung verwendet space.point_to_vector / space.vector_to_point: Geschwindigkeit und Position im codierten Vektorraum aktualisieren und dann auf gültige Parameterpunkte zurückbilden. Trägheitsgewicht w=0,7, kognitiver Koeffizient c1=1,5, sozialer Koeffizient c2=1,5.
- Parameter:
space (qt.Space) – Parameterraumobjekt
- Rückgabetyp:
None,搜索的结果最佳值会被保存在self.result_pool属性中
Bayesianische Optimierungssuche
- class qteasy.optimization.Optimizer._search_bayesian(self, space: Space)
Optimaler Hyperparameter-Suchalgorithmus 6: Bayesianische Optimierung
Die Bayes’sche Optimierung ist eine globale Optimierungsmethode, die auf der Bayes’schen Statistiktheorie basiert und sich zur Optimierung hochdimensionaler, nicht konvexer Black-Box-Funktionen eignet. Es steuert die Parametersuche, indem es ein probabilistisches Modell der Zielfunktion erstellt (typischerweise ein Gauß-Prozess) und so das Optimum innerhalb einer begrenzten Anzahl von Bewertungen findet. Arbeitsablauf: anfängliche Zufallsstichprobe -> Passen Sie einen Ersatz mit (X, y) an (Gaußscher Prozess mit einem RBF-Kernel) -> iterieren: Berechnen Sie die UCB-Erfassungsfunktion für Kandidatenpunkte, wählen Sie den Punkt mit dem größten Erfassungswert für die Auswertung aus -> aktualisieren Sie (X, y) und result_pool, bis max_iterations erreicht ist.
- Parameter:
space (qt.Space) – Parameterraumobjekt
- Rückgabetyp:
None,搜索的结果最佳值会被保存在self.result_pool属性中