Modos de generación
El selector Modo (panel superior del Testeo Masivo) decide cómo se recorre el espacio de combinaciones. Cuando el espacio es pequeño conviene probarlo entero; cuando es astronómico (millones o billones de combos) se muestrea al azar.
No confundir el modo Aleatorio (Monte Carlo) de generación con la Simulación Monte Carlo del Performance Report: aquí Monte Carlo significa construir combinaciones al azar; allí significa barajar los trades de una estrategia ya elegida.
Prueba TODAS las combinaciones posibles, sin tope ni muestreo. Enumeración perezosa por bloques: el consumo de memoria es constante aunque el espacio sea enorme.
Construye cada combo al azar: dirección, nº de condiciones (k), condiciones, TP y SL. Da oportunidad justa a las estrategias simples (1-2 condiciones), que suelen ser las más robustas.
Elige un índice global al azar y lo "des-rankea" al combo exacto (sistema numérico combinatorio). Matemáticamente uniforme: cada combo de todo el espacio es igual de probable.
No dispara a ciegas: evoluciona. Cría estrategias como un ganadero — conserva las mejores, las cruza y muta, y repite generación tras generación. Cada ronda parte de lo mejor de la anterior, así que acumula progreso en vez de empezar de cero.
Modo Genético en profundidad
Los modos aleatorios disparan a ciegas: cada muestra es independiente, no aprende nada del pasado. El genético es distinto — acumula progreso. Toma prestada la idea de la selección natural: mantiene una población de estrategias, se queda con las mejores, las combina entre sí (cruce) e introduce pequeños cambios (mutación), y repite. Generación a generación, la población entera deriva hacia estrategias cada vez mejores.
Su filosofía: explorar amplio (como el aleatorio) y luego explotar y refinar hacia las zonas buenas. Para espacios de millones o billones de combinaciones es mucho más eficiente que muestrear al azar, porque cada ronda apunta mejor gracias a lo aprendido en la anterior.
La Generación 0 es una población aleatoria. Cada individuo es una estrategia = {dirección, condiciones de entrada, condiciones de salida, TP, SL} — su "ADN". Cruzar y mutar manipulan ese ADN, siempre produciendo estrategias válidas.
Cuántas estrategias hay en cada generación (individuos que se backtestean por ronda). Más población = más diversidad y mejor exploración, pero cada generación cuesta más. Típico 200–1000.
Máximo de rondas de evolución. Más generaciones dan más tiempo para refinar, pero llega un punto en que ya no mejora (converge). Típico 30–100.
Para elegir cada padre se cogen N individuos al azar y gana el de mejor fitness. N grande = más presión selectiva (los buenos dominan rápido, riesgo de perder diversidad); N pequeño = más azar. Típico 2–5.
Qué fracción de los mejores pasa intacta a la siguiente generación, sin cruzar ni mutar. Garantiza que nunca se pierde el mejor hallazgo — por eso la curva nunca baja. Típico 5–10%.
Probabilidad de que un hijo sufra una mutación (cambiar una condición, ajustar TP/SL, voltear la dirección…). Poca mutación converge rápido pero puede estancarse; mucha explora más pero es más caótico. Típico 10–20%.
Sangre nueva: cada generación se inyecta esta fracción de individuos totalmente aleatorios. Combate el "colapso de diversidad" (que toda la población se vuelva clones y deje de explorar). Típico 3–5%.
Si el mejor fitness no mejora durante N generaciones seguidas, el motor para solo: ha convergido y seguir sería malgastar cálculo. Ponlo a 0 para agotar siempre todas las generaciones. Típico 10–15.
En vez de empezar con una Generación 0 aleatoria, hace un casting previo: evalúa N candidatos al azar y arranca con los mejores. Así el genético parte de un plantel decente y converge antes/mejor. Típico 20.000; 0 = Gen 0 aleatoria clásica. También puedes sembrar desde tus Bibliotecas (botón «🧬 Sembrar en el genético»).
Cambia lo que busca el genético: de «gana más en backtest» a «gana y aguanta». (1) Optimiza sobre el 70% inicial (holdout: el 30% final queda como validación no vista). (2) Penaliza la complejidad (menos condiciones). (3) Premia la muestra (más operaciones = más creíble). El ranking muestra el In-Sample; lleva el ganador a Walk-Forward / Análisis 360 para ver el Out-of-Sample.
Cada individuo se puntúa con el mismo criterio de ranking que elijas al pie de la ventana (Bº $, Profit Factor, Bº %, Win %). Un guardarraíl importante: las estrategias con menos operaciones que "Mín. Trades" reciben la puntuación mínima y no se seleccionan → el genético no converge en "flukes" de 3 operaciones afortunadas.
Durante la ejecución aparece una gráfica junto a la tabla de resultados: el eje X es la generación y el eje Y el mejor fitness de esa generación. Los puntos naranjas dibujan cómo mejora la población ronda a ronda, en directo.
Gracias al elitismo, la curva es una escalera ascendente (sube o se queda plana, nunca baja). La forma típica: saltos grandes al principio (mejoras fáciles) y aplanamiento al final (converge). Si se aplana pronto, la búsqueda ya encontró su óptimo en ese espacio.
La Semilla controla todo el azar (población inicial, cruces, mutaciones). Misma semilla + misma config ⇒ misma evolución. Con Semilla 0 se genera una nueva y se muestra junto al campo.
Los campeones caen en la misma tabla de resultados (top-N) que los demás modos, con idénticos hand-offs: Performance, Portafolio, Walk-Forward, Análisis 360…
Corre en CPU (multihilo): necesita los resultados de cada generación para poder seleccionar, así que no se acelera por GPU.
Que el genético acabe rápido no es un defecto: es que converge deprisa hacia lo bueno. Pero si quieres que explore más a fondo, tienes cuatro palancas, de mayor a menor impacto:
En resumen: que sea rápido y efectivo es buena señal — el genético es eficiente. Alargarlo tiene sentido cuando buscas más variedad de edges o exprimir espacios de búsqueda grandes.
Muestras
En los modos aleatorios, el campo Muestras fija cuántos combos se prueban (p. ej. 1.000.000) y el barrido para al alcanzarlos. En modo Exhaustivo se ignora y el campo aparece deshabilitado.
Semilla
Deja la Semilla a 0 y cada ejecución generará una semilla nueva automáticamente → cada pasada explora un subconjunto aleatorio distinto del espacio. La semilla empleada se muestra junto al campo (→ usada: N); escríbela en la casilla para reproducir ese mismo barrido.
Si escribes un valor fijo, los modos aleatorios se vuelven reproducibles: misma semilla + misma configuración ⇒ mismas muestras. En modo Exhaustivo no se usa (campo deshabilitado): la enumeración es determinista.
Memoria constante (top-N en streaming)
Sea cual sea el modo, AniQuant no acumula todos los resultados en RAM: mantiene únicamente el top-N según el criterio de ranking (campo MáxRes), descartando el resto al vuelo. Así el consumo de memoria es plano aunque el barrido dure horas o días.
Aceleración por GPU (OpenCL)
OPCIONALMarca la casilla GPU para ejecutar el barrido en la tarjeta gráfica mediante OpenCL: un hilo GPU por combinación. En espacios grandes es típicamente 10-15× más rápido que la CPU. Si no hay GPU OpenCL compatible, AniQuant lo indica en el log y usa la CPU automáticamente.
Las barras y todas las series de indicadores se calculan y se suben a la GPU una sola vez; cada lote solo envía las combinaciones a evaluar.
Mientras la GPU calcula un bloque, la CPU ya enumera y prepara el siguiente (doble buffer). Así la tarjeta no espera: la utilización sube de ~50% hasta cerca del 100%.
Ajustable en Configuración → Tamaño de bloque (combos por pasada). El óptimo depende del equipo; en pruebas ~25.000 fue el mejor. Lotes diminutos o gigantes van peor.
Al iniciar muestra el motor real usado (GPU + nombre del dispositivo, o CPU + nº de hilos) y el motivo si la GPU no estaba disponible.
CPU y GPU producen las mismas métricas: la GPU solo cambia la velocidad, no la lógica del backtest.
Progreso en vivo
Una barra de progreso al pie de la ventana muestra el avance: durante la preparación (carga de datos y subida de series a la GPU) anima en modo marquee, y pasa a porcentaje real al arrancar el barrido. La barra de estado se actualiza cada bloque (~50.000 combos) y la lista de resultados se refresca en vivo:
- →combos hechos / total y %
- → nº de resultados válidos encontrados
- →ritmo (combos/s) y ETA estimado
Si el ETA supera 10 años, el sistema avisa "¡reduce parámetros!": el espacio es demasiado grande aunque ya no agote memoria.
Exhaustivo: cuando los combos posibles son pocos — garantiza el 100% del espacio.
Aleatorio (Monte Carlo): opción general para espacios grandes; favorece estrategias simples y robustas.
Aleatorio (Uniforme): cuando quieres una muestra estadísticamente representativa del espacio completo.
Genético: cuando el espacio es enorme y quieres que la búsqueda aprenda y refine hacia lo mejor, en vez de muestrear a ciegas. El más potente para descubrir estrategias.
AniQuant se prueba gratis durante 30 días, con todos los módulos y sin tarjeta.