Zum Inhalt

Benutzerdefinierte Fitnessfunktionen für die Optimierung

Die cBot-Optimierung ist der Prozess der Bestimmung der bestmöglichen Parameterwerte für einen cBot, bevor er für den Live-Handel eingesetzt wird. In cTrader können Sie cBots anhand einer breiten Palette integrierter Kriterien optimieren, z. B. Maximierung der Gewinne oder Minimierung des Eigenkapital-Drawdowns. Sie können jedoch auch Ihre eigenen Fitnessfunktionen für die Optimierung schreiben, was nützlich sein kann, wenn Sie benutzerdefinierte Leistungskriterien auf einen cBot anwenden möchten. In diesem Artikel und dem dazugehörigen Video besprechen wir, wie benutzerdefinierte Fitnessfunktionen funktionieren.

Beachten Sie, dass dieser Artikel nicht den Prozess der cBot-Optimierung unter Verwendung integrierter Kriterien abdeckt.

Benutzerdefinierte Fitnessfunktionen definieren

Eine benutzerdefinierte Fitnessfunktion ist nur eine Überschreibung der Methode GetFitness().

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{

}

Die Überschreibung muss ein einzelnes Argument vom Typ GetFitness args akzeptieren, damit sie als benutzerdefinierte Fitnessfunktion zählt.

Eine benutzerdefinierte Fitnessfunktion schreiben

Da die Methode GetFitness() ein double zurückgeben muss, sollte der Körper der Methode eine Berechnung enthalten, die zu einem Wert dieses Typs führt.

Zum Beispiel können wir eine einfache benutzerdefinierte Fitnessfunktion schreiben, die die Gesamtzahl der Gewinntransaktionen eines cBots quadriert und diesen Wert dann durch den Gesamtwert der Verlusttransaktionen dividiert. Auf diese Weise weisen wir Gewinntransaktionen mehr Gewicht zu und erlauben dem optimierten cBot gewissermaßen, einige riskante Spielzüge zu machen.

So würde unsere Fitnessfunktion aussehen.

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}

An diesem Punkt können wir die Überschreibung zu jedem gewünschten cBot hinzufügen, ihn dann speichern und erstellen.

Eine benutzerdefinierte Fitnessfunktion in der Optimierung verwenden

Nach dem Hinzufügen unserer Funktion müssen wir eine Instanz unseres gewählten cBots hinzufügen und dann zur Registerkarte Backtesting wechseln. Um die Optimierung mit unserer benutzerdefinierten Funktion durchzuführen, müssen wir nur den Abschnitt Optimierungskriterien öffnen und die Option Benutzerdefiniert auswählen. Danach können wir die Optimierung wie gewohnt ausführen.

Während der Optimierung werden höhere Fitness-Scores den Durchläufen zugewiesen, bei denen der cBot das Verhältnis zwischen der Anzahl der Gewinntransaktionen zum Quadrat und der Anzahl der Verlusttransaktionen maximiert hat.

Ändern Sie die benutzerdefinierte Fitness-Funktion

Wir können auch zu unserer benutzerdefinierten Funktion zurückkehren und sie wie folgt ändern.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override double GetFitness(GetFitnessArgs args)
{
    if (args.TotalTrades > 20)
    {
        return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
    }
    else
    {
        return double.MinValue;
    }
}

Diese Funktion folgt weiterhin dem vorherigen Algorithmus, wendet die benutzerdefinierte Berechnung jedoch nur an, wenn mehr als 20 Transaktionen von einem cBot platziert wurden. In jedem anderen Fall gibt die Funktion den niedrigstmöglichen double zurück. Theoretisch sollte dies die Ergebnisse verbessern, indem die Möglichkeit einer statistischen Verzerrung verringert wird.

Wenn wir den Bot neu erstellen und die Optimierung erneut ausführen, sollten wir sehen, dass mehrere Durchläufe aufgrund der geringen Anzahl der vom cBot platzierten Gesamttransaktionen einen sehr niedrigen Fitness-Score erhalten.

Schließlich möchten wir die Inanspruchnahme des Eigenkapitals minimieren und gleichzeitig aktives Handeln fördern.

1
2
3
4
5
6
7
8
if (args.TotalTrades > 20 && args.MaxEquityDrawdownPercentages < 50)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}
else
{
    return double.MinValue;
}

Wenn wir die Optimierung erneut ausführen, sollten wir die bestmöglichen Durchläufe für unsere Handelsstrategie sehen.

Benutzerdefinierte Fitness-Funktionen bieten ein hervorragendes Werkzeug zur Bestimmung der bestmöglichen Parameterwerte, die zu Ihrem einzigartigen Handelsansatz passen.