Einen cBot optimieren¶
Der Befehl optimize testet verschiedene Parameterwerte eines cBots, um anhand der ausgewählten Kriterien die Kombinationen mit den besten Ergebnissen zu finden. Er führt dieselbe genetische Suche oder Rastersuche wie die cTrader-Desktopanwendung aus – allerdings über das Terminal und mithilfe einer JSON-Parameterdatei. Er ist das Gegenstück zum Backtesting-Befehl für die Optimierung.
Funktionsumfang ¶
Der Befehl optimize optimiert cBot-Parameter. Indikatoren und Plugins verfügen über eigene Befehle (indicator calculate, indicator history, create, build) und sind nicht Teil der Optimierung.
Voraussetzungen ¶
- cTrader CLI ist installiert, und Sie können sich anmelden.
- Der cBot wurde als
.algo-Datei exportiert und für .NET 8 kompiliert. - Eine Parameterdatei, die festlegt, welche Parameter variiert werden sollen.
Hinweis
Der Befehl optimize ist nur in der lokalen Edition von cTrader CLI verfügbar. Er ist weder in der internen noch in der Cloud-Version enthalten.
Der Befehl optimize ¶
ctrader-cli optimize <path-to-algo-file> --params=<path-to-params-file> [options]
Der Pfad zur .algo-Datei ist das erste Argument. Die Option --params ist erforderlich. Der Basis-Zeitrahmen muss entweder über --timeframe oder in der Parameterdatei festgelegt werden. Wenn er an keiner dieser Stellen definiert ist, bricht der Befehl mit einem Fehler ab.
Optimierungsoptionen ¶
Nur --params ist erforderlich. Häufig verwendete optionale Parameter, die in den folgenden Beispielen vorkommen, sind --timeframe, --method, --criteria, --optres und --passes-dir.
Vor dem Start sollten Sie einige Optionen kennen:
--method–genetic(Standard) odergrid. Wählen Siegrid, wenn die Zahl der Parameterkombinationen gering ist und Sie alle testen möchten. Bei vielen Kombinationen istgeneticsinnvoll, da eine gezielte Suche schneller sein kann.--cores– Anzahl paralleler Worker-Prozesse, die die Backtests der einzelnen Durchläufe ausführen. Jeder Worker nutzt einen CPU-Thread. Bei der Optimierung werden daher ungefähr so viele Threads beansprucht, wie hier angegeben. Zulässig sind ganze Zahlen ab 1. Standardmäßig entspricht die Anzahl der Hälfte der Prozessoranzahl plus eins. Verringern Sie den Wert auf einem kleinen VPS, damit Ressourcen für andere Aufgaben frei bleiben. Auf einem dedizierten Rechner können Sie ihn erhöhen, um die genetische Suche auf mehr Threads zu verteilen.--auto-select-best– wählt am Ende der Optimierung automatisch den besten Durchlauf aus, sodass die.cbotset-Datei mit den besten Parametereinstellungen ohne zusätzlichen Schritt bereitsteht.
Hinweis
Der Befehl optimize verwendet --timeframe, nicht --period. Die Befehle run und backtest verwenden weiterhin --period. Bei optimize wird --period als unbekannte Option zurückgewiesen.
Die Parameterdatei ¶
Die mit --params angegebene Datei ist ein JSON-Objekt mit einem Array namens parameters. Sie hat dieselbe Struktur wie eine Datei, die über die Optimierungsoberfläche der cTrader-Desktopanwendung exportiert wird. Daher können Sie eine solche exportierte Datei direkt verwenden.
{
"parameters": [
{ "Name": "SlowPeriods", "Optimize": true, "Min": "5", "Max": "50", "Step": "5" },
{ "Name": "StopLossPips", "Optimize": true, "Min": "10", "Max": "60", "Step": "5" },
{ "Name": "MAType", "Optimize": true, "Values": ["0", "1", "2"] },
{ "Name": "MySymbol", "Optimize": true, "Values": ["EURUSD", "GBPUSD"] }
]
}
Regeln für die Felder ¶
Nameist erforderlich und muss mit dem Namen einer cBot-Eigenschaft übereinstimmen. Führen Siectrader-cli metadata <path-to-algo>aus, um die verfügbaren Eigenschaftsnamen anzuzeigen. Ist ein Name nicht in den cBot-Metadaten vorhanden, wird dies protokolliert und der Parameter übersprungen. Die Optimierung wird mit den übrigen Parametern fortgesetzt.- Mit
Optimizeauftruewird der Parameter in die Suche einbezogen. Beifalsebleibt sein Wert unverändert. - Für Bereichsparameter wie ganze Zahlen und Gleitkommazahlen sind
Min,MaxundSteperforderlich, wenn sie variiert werden sollen. - Für Parameter mit einzelnen zulässigen Werten, etwa Aufzählungen und Symbole, ist beim Variieren ein nicht leeres Array
Valueserforderlich. ParameterTypeist optional. Fehlt dieses Feld, wird der Typ anhand der cBot-Metadaten durch Abgleich mitNameermittelt.
Einen Parameter auf einen einzelnen Wert festlegen ¶
Um einen Wert festzulegen, nehmen Sie den Parameter mit Optimize: false und seinem Value in die Datei auf:
{ "Name": "MAType", "Value": "1", "Optimize": false },
{ "Name": "FastPeriods", "Value": "5", "Optimize": false }
Warnung
Maßgeblich ist die Parameterdatei. Vor der Anwendung setzt cTrader CLI alle Parametereinstellungen zurück, sodass nur die mit Optimize: true gekennzeichneten Parameter durchsucht werden. Parameter, die gar nicht in der Datei stehen, behalten ihren Standardwert, selbst wenn der cBot sie standardmäßig für die Optimierung vorsieht. Nehmen Sie einen Parameter mit Optimize: true auf, damit er bei der Optimierung berücksichtigt wird.
Den Haupt-Zeitrahmen optimieren ¶
Mit optimize können Sie neben den cBot-Parametern auch verschiedene Haupt-Zeitrahmen testen. Der Haupt-Zeitrahmen kann aus zwei Quellen stammen; --timeframe hat dabei Vorrang.
--timeframe <tf>– ein einzelner Wert legt den Haupt-Zeitrahmen fest; mehrere kommagetrennte Werte ermöglichen die Suche über mehrere Zeitrahmen.- Parameterdatei – eine aus der Desktopanwendung exportierte Datei enthält bereits einen dafür vorgesehenen synthetischen Zeitrahmen-Parameter.
Der Basis-Zeitrahmen der Daten entspricht dem einzigen angegebenen Wert, dem festgelegten Wert oder dem kleinsten Zeitrahmen der Suche.
Kompatibilität von Zeitrahmen und Datenmodi ¶
Alle festgelegten oder getesteten Haupt-Zeitrahmen müssen mit dem ausgewählten --data-mode kompatibel sein.
| Datenmodus | Gültige Haupt-Zeitrahmen |
|---|---|
open | Zeitrahmen desselben Typs, die ganzzahlige Vielfache des kleinsten ausgewählten Zeitrahmens sind. |
m1 oder m1-csv | Jeder zeitbasierte Zeitrahmen; nicht zeitbasierte Typen wie Renko- oder Range-Bars werden zurückgewiesen. |
ticks | Jeder nicht benutzerdefinierte Zeitrahmen. |
Hinweis
Eine ungültige Kombination beendet den Befehl bereits vor dem Laden von Daten und zeigt die dafür verantwortlichen Werte an.
Kriterien ¶
Jeder Eintrag von --criteria verbindet eine Leistungskennzahl mit der Richtung max oder min, zum Beispiel NetProfit:max. Die folgende Tabelle enthält alle unterstützten Kennzahlennamen und erklärt, was sie messen.
| Kennzahl | Was sie misst |
|---|---|
NetProfit | Abschließender Nettogewinn oder Nettoverlust in der Kontowährung |
ProfitFactor | Bruttogewinn geteilt durch Bruttoverlust |
MaxEquityDrawdownPercentages | Größter prozentualer Rückgang des Eigenkapitals von einem Höchststand bis zu einem Tiefststand |
MaxBalanceDrawdownPercentages | Größter prozentualer Rückgang des Saldos von einem Höchststand bis zu einem Tiefststand |
MaxEquityDrawdown | Größter absoluter Rückgang des Eigenkapitals in der Kontowährung |
MaxBalanceDrawdown | Größter absoluter Rückgang des Saldos in der Kontowährung |
WinningTrades | Anzahl geschlossener Trades mit Gewinn |
LosingTrades | Anzahl geschlossener Trades mit Verlust |
TotalTrades | Gesamtzahl geschlossener Trades |
AverageTrade | Nettogewinn geteilt durch die Anzahl geschlossener Trades |
So maximieren Sie den Nettogewinn und minimieren gleichzeitig den maximalen Rückgang des Eigenkapitals:
--criteria="NetProfit:max,MaxEquityDrawdownPercentages:min"
Für eine eigene Bewertung verwenden Sie stattdessen --fitness. Die cBot-Methode GetFitness gibt einen Bewertungswert zurück. Die Optimierung behält die Durchläufe mit den höchsten Werten bei. --fitness und --criteria schließen sich gegenseitig aus. Geben Sie nur eine der beiden Optionen an.
Optionen für die Testumgebung ¶
optimize verwendet dieselben Testumgebungsoptionen wie backtest. Die folgende Tabelle zeigt die von der aktuellen CLI unterstützten Optionen, ihre Funktion und gegebenenfalls die Unterschiede zwischen den beiden Befehlen.
| Option | Zweck | Verfügbarkeit |
|---|---|---|
--account | Nummer des Handelskontos. | Beide |
--symbol | Symbol, für das der Test ausgeführt wird. | Beide |
--start | Startdatum und -uhrzeit des Testzeitraums. | Beide |
--end | Enddatum und -uhrzeit des Testzeitraums. | Beide |
--balance | Anfangssaldo der Simulation. | Beide |
--data-mode | open, m1, m1-csv, tick-csv oder ticks. | Beide |
--data-file | Pfad zu einer CSV-Datei für m1-csv oder tick-csv. | Beide |
--commission | Pro Trade berechnete Kommission. | Beide |
--spread | Spread in Pips. | Beide |
--precise-conversion | Präzise Umrechnung für Währungskreuzpaare verwenden. | Beide |
--timeframe | Basis-Zeitrahmen für die Parametersuche. | Nur optimize |
--period | Basis-Zeitrahmen für die Ausführung. | Nur backtest |
--report | Pfad zum Speichern eines HTML-Berichts. | Nur backtest |
--report-json | Pfad zum Speichern eines JSON-Berichts. | Nur backtest |
Hinweis
Die Berichtsoptionen gelten nicht für optimize. Verwenden Sie stattdessen --optres und --passes-dir, um Ergebnisse zu speichern.
Beispiel ¶
ctrader-cli optimize "C:/test/Sample Trend cBot.algo" \
--params=C:/test/optimize-params.json \
--account=1234567 --symbol=EURUSD --timeframe=h1,h2 \
--start="01/01/2025" --end="01/02/2025" \
--balance=100000 --data-mode=open --commission=30 --spread=2 \
--method=grid \
--criteria="NetProfit:max,MaxEquityDrawdownPercentages:min" \
--auto-select-best \
--optres=C:/test/result.optres \
--passes-dir=C:/test/result-passes \
--ctid=letstrade --pwd-file=C:/test/password.pwd
Ausgabe ¶
Während der Ausführung zeigt optimize den Fortschritt kontinuierlich im Terminal an:
Progress | Loading EURUSD, h1 | 42.00 % |
Progress | Optimization | 37.50 % |
- Zusammenfassung – am Ende zeigt cTrader CLI im Terminal eine Zusammenfassung mit der Gesamtzahl der Durchläufe, der verstrichenen Zeit und dem besten Durchlauf samt Statistiken an.
- Ergebnisdatei – mit
--optresschreibt cTrader CLI die vollständigen Ergebnisse aller Durchläufe in eine JSON-Datei mit der Endung.optres. Diese Datei hat dasselbe Format wie die Optimierungsergebnisse der Desktopanwendung. Sie können sie daher über deren Optimierungsoberfläche öffnen oder importieren. - Berichte pro Durchlauf – mit
--passes-dirspeichert cTrader CLI die Berichtsdateien der einzelnen Durchläufe in diesem Verzeichnis. Jeder Durchlauf erhält einen Unterordner mit.html-,.txt-,.json- und.cbotset-Dateien. Die.cbotset-Datei enthält die genauen Parameterwerte, die bei diesem Durchlauf verwendet wurden.
Wenn Sie weder --optres noch --passes-dir angeben, wird zum Abschluss nur die Zusammenfassung ausgegeben.
Hinweis
Der Befehl optimize erstellt keinen globalen HTML-Bericht. Die HTML-Dateien der einzelnen Durchläufe werden jedoch unter --passes-dir gespeichert, wenn Sie diese Option angeben.
Prüfen, ob die Optimierung korrekt angewendet wurde ¶
Prüfen Sie nach der Ausführung, ob tatsächlich die vorgesehenen Parameterkombinationen getestet wurden.
- Öffnen Sie eine
.cbotset-Datei eines Durchlaufs unter--passes-dir. Kontrollieren Sie, ob sich die optimierten Parameter zwischen den Durchläufen ändern und die festgelegten oder ausgelassenen Parameter unverändert bleiben. - Wenn Sie verschiedene Zeitrahmen getestet haben, prüfen Sie den Wert
Chart.Periodin der.cbotset-Datei jedes Durchlaufs. Der Wert muss einem der ausgewählten Zeitrahmen entsprechen. - Öffnen Sie die
.optres-Datei oder importieren Sie sie in die Optimierungsoberfläche der Desktopanwendung, um die Einstellungen und alle Durchläufe gemeinsam zu überprüfen.
Validierung und häufige Fehler ¶
Jede Zeile der folgenden Tabelle nennt ein Symptom, seine wahrscheinliche Ursache, den von cTrader CLI bei einem Fehler zurückgegebenen Exit-Code und die empfohlene Maßnahme. Bei jedem Validierungsfehler gibt cTrader CLI einen Exit-Code ungleich null zurück. Ein Skript kann deshalb beim ersten Fehler abbrechen, ohne die Fehlermeldung auswerten zu müssen.
Der Exit-Code in der Tabelle ist der Wert, den cTrader CLI an die Shell zurückgibt. Die genauen numerischen Codes werden nicht veröffentlicht. non-zero kennzeichnet daher einen Fehler ohne eigenen veröffentlichten Code. unknown weist auf einen internen Fehler hin, bei dem Sie die Version wechseln oder den Support kontaktieren sollten.
| Symptom | Wahrscheinliche Ursache | Exit-Code | Nächster Schritt |
|---|---|---|---|
Validierungsfehler: --params fehlt | Die JSON-Parameterdatei wurde nicht angegeben. | non-zero | Geben Sie --params=<path> an. |
| Validierungsfehler: unbekannter Zeitrahmen | Der Wert von --timeframe entspricht keiner erkannten Kennung. | non-zero | Führen Sie ctrader-cli periods aus und verwenden Sie eine der angezeigten Kennungen. |
| Validierungsfehler: ungültiger Haupt-Zeitrahmen | Ein Zeitrahmen ist mit dem ausgewählten --data-mode nicht kompatibel. | non-zero | Wählen Sie einen anderen Zeitrahmen oder --data-mode. |
| Validierungsfehler: fehlerhaftes Kriterienpaar | Ein Kennzahlenname ist falsch oder die Richtung ist weder max noch min. | non-zero | Verwenden Sie einen der unterstützten Kennzahlennamen mit max oder min. |
| Validierungsfehler: unbekannte Leistungskennzahl | Ein in --criteria angegebener Name steht nicht in der Liste unterstützter Kennzahlen. | non-zero | Verwenden Sie einen der Kennzahlennamen aus dem Abschnitt Kriterien. |
Validierungsfehler: unbekannter Wert für --method | Der Wert von --method ist weder genetic noch grid. | non-zero | Verwenden Sie --method=genetic (Standard) oder --method=grid. |
--fitness und --criteria wurden gleichzeitig angegeben | Diese beiden Optionen schließen sich gegenseitig aus. | non-zero | Geben Sie entweder --fitness oder --criteria an, aber nicht beide. |
optimize nicht verfügbar | Es wird die interne oder die Cloud-Edition der CLI verwendet. | unknown | Wechseln Sie zur lokalen Edition für Benutzer. |