Volver al blog

Algoritmos Genéticos y su Aplicación en Expert Advisors

Resumen rápido

Los algoritmos genéticos (GA) optimizan parámetros de Expert Advisors imitando la selección natural. Cada individuo representa una combinación de parámetros (RSI, SL, TP, lote). La función fitness combina Sharpe Ratio (40%), Profit Factor (30%) y 1-MaxDrawdown (30%). Un GA típico con50-200 individuos converge en 15-20 generaciones, superando a Grid Search en tiempo y calidad de solución.

En trading, los GA son ideales para explorar espacios de búsqueda enormes donde los métodos tradicionales fallan por sobreajuste.

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.

Preguntas frecuentes

¿Qué son los algoritmos genéticos en trading?

Son técnicas de optimización inspiradas en la selección natural de Darwin. Se utilizan para encontrar la combinación óptima de parámetros de un Expert Advisor explorando un espacio de búsqueda enorme de forma eficiente, superando a métodos como Grid Search.

¿Cómo se compone la función de fitness para un EA?

Una función de fitness recomendada combina: Sharpe Ratio (40%), Profit Factor (30%) y 1-MaxDrawdown (30%). Esto equilibra rentabilidad, consistencia y riesgo en la evaluación de cada individuo.

¿Cómo evitar sobreajuste con algoritmos genéticos?

Usar walk-forward validation, restringir el espacio de parámetros, penalizar la complejidad (preferir menos parámetros), y siempre validar con datos out-of-sample que el algoritmo nunca ha visto durante la optimización.

IA

Dominar las Redes Neuronales en Trading

12 min de lectura →
Estrategias

Backtesting 2.0: Cómo Medir la Robustez

15 min de lectura →
Finanzas

Simulador de Interés Compuesto

6 min de lectura →