Aller au contenu

Fonctions de fitness personnalisées pour l'optimisation

L'optimisation de cBot est le processus de détermination des meilleures valeurs de paramètres possibles pour un cBot avant de le déployer pour le trading réel. Dans cTrader, vous pouvez optimiser les cBots en fonction d'un large éventail de critères intégrés tels que la maximisation des profits ou la minimisation du drawdown des capitaux propres. Cependant, vous pouvez également écrire vos propres fonctions de fitness pour l'optimisation, ce qui peut être utile si vous souhaitez appliquer des critères de performance personnalisés à un cBot. Dans cet article et sa vidéo correspondante, nous expliquons comment fonctionnent les fonctions de fitness personnalisées.

Notez que cet article ne couvre pas le processus d'optimisation de cBot à l'aide de critères intégrés.

Définir des fonctions de fitness personnalisées

Une fonction de fitness personnalisée est simplement une substitution de la méthode GetFitness().

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

}

La substitution doit accepter un seul argument du type args GetFitness pour qu'elle soit considérée comme une fonction de fitness personnalisée.

Écrire une fonction de fitness personnalisée

Étant donné que la méthode GetFitness() doit renvoyer un double, le corps de la méthode doit contenir un calcul qui aboutit à une valeur de ce type.

Par exemple, nous pouvons écrire une fonction de fitness personnalisée simple qui met au carré le nombre total de trades gagnants effectués par un cBot, puis divise cette valeur par la valeur totale des trades perdants. De cette façon, nous accordons plus de poids aux trades gagnants et, dans un sens, nous permettons au cBot optimisé de prendre des risques.

Voici à quoi ressemblerait notre fonction de fitness.

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

À ce stade, nous pouvons ajouter la substitution à n'importe quel cBot que nous voulons, puis l'enregistrer et le compiler.

Utiliser une fonction de fitness personnalisée dans l'optimisation

Après avoir ajouté notre fonction, nous devons ajouter une instance du cBot choisi, puis passer à l'onglet Backtesting. Pour effectuer une optimisation à l'aide de notre fonction personnalisée, il suffit d'ouvrir la section Critères d'optimisation et de sélectionner l'option Personnalisé. Ensuite, nous pouvons lancer l'optimisation comme d'habitude.

Pendant l'optimisation, des scores de fitness plus élevés seront attribués aux passes au cours desquelles le cBot a maximisé le ratio entre le nombre de trades gagnants au carré et le nombre de trades perdants.

Modifier la fonction de fitness personnalisée

Nous pouvons également revenir à notre fonction personnalisée et la modifier comme suit.

 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;
    }
}

Cette fonction suit toujours l'algorithme précédent, mais elle n'applique le calcul personnalisé que si plus de 20 trades ont été placés par un cBot. Dans tous les autres cas, la fonction renvoie le double le plus bas possible. En théorie, cela devrait améliorer les résultats en réduisant la possibilité de biais statistique.

Si nous recompilons le bot et relançons l'optimisation, nous devrions voir plusieurs passes obtenir un score de fitness très faible en raison du faible nombre total de trades placés par le cBot.

Enfin, nous voulons minimiser la diminution des fonds propres tout en encourageant le trading actif.

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;
}

Si nous relançons l'optimisation, nous devrions voir les meilleures passes possibles compte tenu de notre stratégie de trading.

Les fonctions de fitness personnalisées constituent un excellent outil pour déterminer les meilleures valeurs de paramètres possibles adaptées à votre approche unique du trading.