Saltar a contenido

Funciones de aptitud personalizadas para optimización

La optimización de cBot es el proceso de determinar los mejores valores posibles de los parámetros para un cBot antes de implementarlo para operaciones en vivo. En cTrader, puede optimizar cBots según una amplia gama de criterios integrados, como maximizar los beneficios o minimizar la disminución del capital. Sin embargo, también puede escribir sus propias funciones de aptitud para la optimización, lo que puede ser útil si desea aplicar criterios de rendimiento personalizados a un cBot. En este artículo y su correspondiente video, discutimos cómo funcionan las funciones de aptitud personalizadas.

Tenga en cuenta que este artículo no cubre el proceso de optimización de cBot utilizando criterios integrados.

Definir funciones de aptitud personalizadas

Una función de aptitud personalizada es simplemente una anulación del método GetFitness().

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

}

La anulación debe aceptar un solo argumento del tipo GetFitness args para que cuente como una función de aptitud personalizada.

Escribir una función de aptitud personalizada

Dado que el método GetFitness() debe devolver un double, el cuerpo del método debe contener un cálculo que resulte en un valor de este tipo.

Por ejemplo, podemos escribir una función de aptitud personalizada simple que eleve al cuadrado el número total de operaciones ganadoras realizadas por un cBot y luego divida este valor por el valor total de las operaciones perdedoras. De esta manera, asignamos más peso a las operaciones ganadoras y, en cierto sentido, permitimos que el cBot optimizado realice algunas jugadas arriesgadas.

Así es como se vería nuestra función de aptitud.

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

En este punto, podemos añadir la anulación a cualquier cBot que queramos, luego guardarlo y construirlo.

Usar una función de aptitud personalizada en la optimización

Después de añadir nuestra función, necesitamos añadir una instancia de nuestro cBot elegido y luego cambiar a la pestaña Backtesting. Para realizar la optimización utilizando nuestra función personalizada, todo lo que tenemos que hacer es abrir la sección Criterios de optimización y seleccionar la opción Personalizado. Después, podemos ejecutar la optimización como de costumbre.

Durante la optimización, se asignarán puntuaciones de aptitud más altas a los pases durante los cuales el cBot haya maximizado la relación entre el número de operaciones ganadoras al cuadrado y el número de operaciones perdedoras.

Modificar la función de aptitud personalizada

También podemos volver a nuestra función personalizada y modificarla de la siguiente manera.

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

Esta función sigue el algoritmo anterior, pero solo aplica el cálculo personalizado si un cBot ha realizado más de 20 operaciones. En cualquier otro caso, la función devuelve el double más bajo posible. En teoría, esto debería mejorar los resultados al reducir la posibilidad de sesgo estadístico.

Si reconstruimos el bot y ejecutamos la optimización de nuevo, deberíamos ver varios pases obtener una puntuación de aptitud muy baja debido al bajo número total de operaciones realizadas por el cBot.

Por último, queremos minimizar la disminución del capital mientras seguimos fomentando la operación activa.

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 ejecutamos la optimización de nuevo, deberíamos ver los mejores pases posibles dada nuestra estrategia de operación.

Las funciones de aptitud personalizadas proporcionan una excelente herramienta para determinar los mejores valores de parámetros posibles adaptados a su enfoque único de operación.