SeitenOptimierung · 20 / 29
Optimierung
QuantCraft kann viele Backtests hintereinander mit unterschiedlichen Werten für Ihre Eingabeparameter ausführen und Ihnen den Vergleich der Ergebnisse ermöglichen. Konfigurieren Sie Läufe über Test (Code ausführen); zusammengefasste Ergebnisse erscheinen unter Testergebnisse. Zwei Suchstrategien stehen zur Verfügung:
- Brute force — probiert jede Kombination der von Ihnen aufgelisteten Werte aus.
- Genetic — nutzt einen genetischen Algorithmus, um große Suchräume mit weit weniger Läufen zu erkunden.
Beide Modi werden im Tab Script des Dialogs Run backtest (die Schaltfläche Test) konfiguriert und erscheinen erst, wenn Ihr Skript Parameter über quantcraft.inputs deklariert (die älteren Pfade quantcraft.inputs_module / ide.inputs_module werden für bestehende Skripte weiterhin erkannt). Speichern Sie Optimierungsraster und andere Dialogeinstellungen mit den Ausführungsvorlagen (.qcs) (optStep / optMax werden für Backtest-Vorlagen gespeichert).
Wo Sie es finden
- Öffnen Sie den Test-Dialog mit der Schaltfläche Test in der IDE-Symbolleiste.
- Öffnen Sie den Tab Script (wird angezeigt, wenn Ihr Skript
paramsausquantcraft.inputsimportiert — oder aus den älteren Pfadenquantcraft.inputs_module/ide.inputs_module). - Aktivieren Sie Optimize und wählen Sie Brute force oder Genetic.
Optimierungsläufe verwenden dieselben Einstellungen für Symbol & data und Simulation wie ein normaler Backtest. Sie konfigurieren nur, wie die Parameter variieren.
Verhalten der Parametertabelle bei aktivierter Optimierung
Die Tabelle Parameter values erhält bei aktivierter Optimierung zwei zusätzliche Spalten:
| Spalte | Zweck |
|---|---|
| Parameter | Der Name aus Ihrem Skript (schreibgeschützt). |
| Type | int, float, bool oder str. |
| Value | Bei numerischen Typen ist dies der Start des Rasters. Bei bool/str ist es der feste Wert. |
| Step | Nur numerisch. Schritt zwischen aufeinanderfolgenden Werten (positiv oder negativ). |
| Max | Nur numerisch. Obergrenze bei aufsteigenden Rastern bzw. Untergrenze bei absteigenden. |
Verhalten je Typ:
int/float— Werte werden alsstart, start+step, …bis einschließlich Max erzeugt (beiintgerundet).bool— wird automatisch zutrueundfalseerweitert (zwei Werte).str— bleibt fest; ein String-Parameter wird nicht variiert.
Jede Zeile zeigt einen kleinen Platzhalter (true / false oder fixed), wenn der Wert nicht erweitert werden kann, sodass Sie auf einen Blick sehen, welche Parameter tatsächlich variieren.
Brute Force (Parameterraster)
Brute Force wertet jede Kombination der von Ihnen definierten Werte aus. Listen Sie 5 Werte für length und 4 Werte für threshold auf, sind das 5 × 4 = 20 Backtests.
Grenzen und Validierung
- Die Gesamtzahl der Kombinationen ist auf 256 Läufe begrenzt. Darüber blockiert der Dialog das Absenden mit einer ausdrücklichen Meldung, die Sie bittet, die Schritte zu vergrößern oder Parameter aus dem Raster zu entfernen.
- Jeder numerische Bereich benötigt alle drei Angaben: Value (Start), Step und Max. Step darf nicht 0 sein.
- Ist Max mit dem gewählten Vorzeichen von Step von Value aus nicht erreichbar, erklärt der Dialog das Problem (z. B. Start ≤ Max bei positiven Schritten).
Was Sie während des Laufs sehen
Wenn Sie eine Brute-Force-Optimierung absenden:
- Ein Kopfzeilen-Banner erscheint in der Ansicht Test results:
Optimization — <file> (current/total). - Der Ausgabebereich protokolliert jeden Lauf mit seiner Parameterkombination sowie eine Kopfzeile:
Optimization (brute force): N backtest run(s). - Der Fortschrittsbalken des Ausgabebereichs zeigt
Run X / N. - Eine Schaltfläche Stop steht zur Verfügung — bereits abgeschlossene Läufe bleiben erhalten und werden in den Ergebnissen angezeigt.
Was Sie nach Abschluss sehen
Der Bereich Test Results zeigt eine Ansicht Optimization:
- Eine Kopfzeile, die das Skript und die Anzahl der abgeschlossenen Läufe zusammenfasst.
- Eine Tab-Leiste mit allen Läufen, jeder Tab mit der Parameterkombination beschriftet (z. B.
length=20, threshold=1.5). Werden die Beschriftungen lang, wird die vollständige Kombination über dem Chart des aktiven Laufs angezeigt. - Die Auswahl eines Tabs zeigt die normale Performance-Ansicht dieses Laufs (Eigenkapitalkurve, Kennzahlen, Trades), sodass Sie jede Kombination genauer untersuchen können.
- Wurde der Lauf gestoppt, bevor alle Kombinationen abgeschlossen waren, weist ein Banner darauf hin, dass die Ergebnisse unvollständig sind.
Genetische Suche
Der genetische Modus ist die richtige Wahl, wenn das Brute-Force-Raster zu groß würde. Statt jede Kombination auszuprobieren, entwickelt er eine kleine Population von Kandidaten über mehrere Generationen weiter, behält die besten und kombiniert sie neu.
Hyperparameter
Wechseln Sie den inneren Tab zu Genetic, und Sie sehen diese Felder:
| Feld | Bereich | Hinweise |
|---|---|---|
| Population size | 4 – 64 | Anzahl der pro Generation ausgewerteten Kandidaten. Typische Werte sind 8–32. Muss größer als Elitism sein. |
| Generations | 1 – 40 | Jede Generation führt eine vollständige Population von Backtests aus. |
| Elitism | ≥ 1, < Population | Die besten Kandidaten werden unverändert in die nächste Generation übernommen. |
| Crossover rate | 0 – 1 | Wahrscheinlichkeit, dass zwei Eltern ein gemischtes Kind erzeugen (andernfalls wird der erste Elternteil kopiert). |
| Mutation rate | 0 – 1 | Wahrscheinlichkeit pro Gen, zufällig zu einem anderen diskreten Wert zu springen. |
| Fitness metric | Dropdown | Was die Suche maximiert (siehe unten). |
| Random seed (optional) | Text | Verwenden Sie denselben Seed, um eine Suche exakt zu reproduzieren. |
Die Gesamtzahl der ausgeführten Backtests ist population × generations. Dieses Produkt ist auf 400 Auswertungen begrenzt — überschreiten Sie es, bittet der Dialog Sie, einen der beiden Werte zu senken.
Die Allele (die diskreten Werte, die jeder Parameter annehmen kann) sind genau dieselben Raster, die Brute Force aufbauen würde:
- Numerische Parameter verwenden Value / Step / Max, um eine diskrete Liste zu erzeugen.
- Bool-Parameter werden zu
true/false. - String-Parameter sind fest (und beeinflussen die Suche nicht).
Die genetische Suche benötigt mindestens einen Parameter, der variieren kann (mehr als ein Allel). Der Dialog blockiert das Absenden und bittet Sie, ein numerisches Raster zu erweitern oder ein
boolaufzunehmen, wenn alle Parameter fest sind.
Fitness-Kennzahlen
Das Dropdown bietet (höher ist besser):
- Sharpe ratio (Standard)
- Sortino ratio
- Total return
- Total P/L ($)
- Profit factor
- Calmar ratio
Die Kennzahl wird aus der Kontoperformance jedes Backtests gelesen — Läufe, die mit einem Fehler endeten, erhalten die niedrigstmögliche Fitness und werden daher immer zuletzt einsortiert.
Was Sie während des Laufs sehen
- Kopfzeilen-Banner:
Genetic optimization — <file>mitGeneration g of N, individual i of P. - Der Ausgabebereich protokolliert die Suche:
Genetic optimization: population P, N generation(s), fitness = …, dann── Gen g/N, indiv i/P: <combo> ──für jeden Backtest. - Der Fortschrittsbalken zeigt
Gen g/N · i/P. - Ein Panel mit Teilergebnissen erscheint, sobald die ersten Läufe abgeschlossen sind — bereits ausgewertete Kandidaten werden nach Fitness sortiert und mit den Präfixen
G<g>·…aufgelistet, sodass Sie sehen, was führt, ohne auf die gesamte Suche zu warten.
Was Sie nach Abschluss sehen
- Der Bereich Test Results zeigt Genetic optimization — <file> zusammen mit der verwendeten Fitness-Kennzahl und der Anzahl der Läufe.
- Die Endansicht enthält die letzte Generation, nach Fitness sortiert, mit der besten oben. Jeder Tab öffnet die vollständige Performance-Ansicht dieses Laufs.
- Drücken Sie Stop, werden die bis dahin abgeschlossenen Auswertungen aller Generationen nach Fitness sortiert angezeigt, und ein Banner weist darauf hin, dass die Suche vorzeitig gestoppt wurde.
Praktische Tipps
- Fangen Sie klein an. Ein Brute-Force-Raster mit 3 Parametern zu je 10 Werten sind bereits 1000 Läufe — weit über der Grenze von 256. Verringern Sie die Schritte, bevor Sie die Optimierung einschalten.
- Bevorzugen Sie Genetic für große Räume. Ab etwa 3 numerischen Parametern sind einige Generationen genetischer Suche meist schneller und nützlicher als ein winziges Brute-Force-Raster.
- Fixieren Sie einen Seed, wenn ein Genetic-Lauf reproduzierbar sein soll (z. B. beim Vergleich zweier Strategien mit derselben Suche).
- Nutzen Sie Stop großzügig. Beide Modi bewahren die bereits abgeschlossenen Läufe auf, sodass Sie unterbrechen können, sobald ein klarer Sieger auftaucht.
- Wählen Sie die Fitness bewusst. Sharpe und Sortino belohnen Beständigkeit, Total return / Total P/L jagen dem reinen Wachstum nach, Profit factor belohnt ein ausgewogenes Gewinn-/Verlustverhältnis, Calmar bestraft tiefe Drawdowns.
- Untersuchen Sie jeden Lauf. Jeder Ergebnis-Tab enthält den Standard-Eigenkapital-Chart, die Kennzahlen und die Trade-Historie — den HTML-Bericht jedes einzelnen Laufs können Sie wie bei einem einzelnen Backtest exportieren.

