Volver al blog

Genetic Algorithms and their Application in Expert Advisors

¿Qué son los Algoritmos Genéticos?

Los algoritmos genéticos (GA) son técnicas de optimización inspiradas en la selección natural de Darwin. Se utilizan para encontrar soluciones óptimas a problemas complejos donde los métodos tradicionales fallan.

En trading, los GA son ideales para optimizar los parámetros de un Expert Advisor (EA) ya que pueden explorar un espacio de búsqueda enorme de forma eficiente.

Componentes Fundamentales

Población Inicial

Cada individuo de la población representa un conjunto de parámetros del EA. Por ejemplo:

  • Período del RSI: [7-21]
  • Stop Loss: [20-100 pips]
  • Take Profit: [30-150 pips]
  • Tamaño de lote: [0.01-0.1]

Una población típica contiene entre 50 y 200 individuos.

Función de Fitness

La función de fitness evalúa qué tan bueno es cada individuo. Para trading, recomendamos combinar múltiples métricas:

fitness = (sharpe_ratio * 0.4) + 
          (profit_factor * 0.3) + 
          (1 - max_drawdown * 0.3)

Esto equilibra rentabilidad, consistencia y riesgo.

Operadores Genéticos

  • Selección: Torneo o ruleta para elegir padres
  • Cruce: Uniforme o de un punto para combinar genes
  • Mutación: Cambio aleatorio de parámetros (1-5% de probabilidad)
  • Elitismo: Los mejores individuos pasan directamente a la siguiente generación

Evolución de la Población

Mejor fitness por generación

Código en MQL5

// Estructura de un individuo genético
struct GeneticIndividual {
    double rsi_period;
    double stop_loss;
    double take_profit;
    double lot_size;
    double fitness;
};

// Operador de cruce
GeneticIndividual Crossover(GeneticIndividual parent1, 
                            GeneticIndividual parent2) {
    GeneticIndividual child;
    child.rsi_period = (MathRand() % 2 == 0) ? 
                        parent1.rsi_period : parent2.rsi_period;
    child.stop_loss = (MathRand() % 2 == 0) ? 
                       parent1.stop_loss : parent2.stop_loss;
    child.take_profit = (MathRand() % 2 == 0) ? 
                         parent1.take_profit : parent2.take_profit;
    child.lot_size = (MathRand() % 2 == 0) ? 
                      parent1.lot_size : parent2.lot_size;
    return child;
}

// Operador de mutación
void Mutate(GeneticIndividual &ind, double mutation_rate = 0.05) {
    if (MathRand() / 32767.0 < mutation_rate)
        ind.rsi_period += (MathRand() % 5) - 2;
    if (MathRand() / 32767.0 < mutation_rate)
        ind.stop_loss += (MathRand() % 10) - 5;
    if (MathRand() / 32767.0 < mutation_rate)
        ind.take_profit += (MathRand() % 10) - 5;
}

Contra el Sobreajuste

El principal riesgo de los GA es el sobreajuste. Para evitarlo:

  1. Validación cruzada: Usa walk-forward validation
  2. Restringe el espacio: Limita los rangos de parámetros
  3. Penaliza la complejidad: Prefiere soluciones con menos parámetros
  4. Usa datos out-of-sample: Nunca optimices y valides con los mismos datos

Comparación: Grid Search vs Algoritmo Genético

Conclusión

Los algoritmos genéticos son una herramienta poderosa para la optimización de EAs, pero deben usarse con responsabilidad. La clave está en combinarlos con técnicas de validación robustas para evitar el sobreajuste y garantizar que los resultados se mantengan en trading real.