PáginasOptimización · 20 / 29
Optimización
QuantCraft puede ejecutar muchos backtests seguidos con distintos valores para tus parámetros de entrada y dejarte comparar los resultados. Configura las ejecuciones desde Test (Ejecución de código); los resultados resumidos aparecen en Resultados de las pruebas. Hay dos estrategias de búsqueda disponibles:
- Brute force — prueba todas las combinaciones de los valores que enumeres.
- Genetic — usa un algoritmo genético para explorar grandes espacios de búsqueda con muchas menos ejecuciones.
Ambos modos se configuran en la pestaña Script del cuadro Run backtest (el botón Test) y solo aparecen cuando tu script declara parámetros mediante quantcraft.inputs (las rutas antiguas quantcraft.inputs_module / ide.inputs_module se siguen reconociendo en los scripts existentes). Guarda las cuadrículas de optimización y otros ajustes del cuadro con los Preajustes de ejecución (.qcs) (optStep / optMax se almacenan para los preajustes de backtest).
Dónde encontrarlo
- Abre el cuadro Test con el botón Test de la barra de herramientas del IDE.
- Abre la pestaña Script (se muestra cuando tu script importa
paramsdesdequantcraft.inputs— o desde las rutas antiguasquantcraft.inputs_module/ide.inputs_module). - Activa Optimize y elige Brute force o Genetic.
Las ejecuciones de optimización usan los mismos ajustes de Symbol & data y Simulation que un backtest normal. Solo configuras cómo varían los parámetros.
Comportamiento de la tabla de parámetros con la optimización activada
La tabla Parameter values gana dos columnas adicionales cuando la optimización está activada:
| Columna | Propósito |
|---|---|
| Parameter | El nombre de tu script (solo lectura). |
| Type | int, float, bool o str. |
| Value | En los tipos numéricos, es el inicio de la cuadrícula. En bool/str es el valor fijo. |
| Step | Solo numérico. Paso entre valores consecutivos (positivo o negativo). |
| Max | Solo numérico. Límite superior en las cuadrículas ascendentes o límite inferior en las descendentes. |
Comportamiento según el tipo:
int/float— los valores se generan comostart, start+step, …hasta Max inclusive (redondeado enint).bool— se expande automáticamente atrueyfalse(dos valores).str— se deja fijo; un parámetro de cadena no varía.
Cada fila muestra un pequeño marcador (true / false o fixed) cuando el valor no se puede expandir, para que veas de un vistazo qué parámetros varían realmente.
Fuerza bruta (cuadrícula de parámetros)
La fuerza bruta evalúa todas las combinaciones de los valores que definiste. Si enumeras 5 valores para length y 4 para threshold, son 5 × 4 = 20 backtests.
Límites y validación
- El número total de combinaciones está limitado a 256 ejecuciones. Por encima, el cuadro bloquea el envío con un mensaje explícito que te pide ampliar los pasos o quitar parámetros de la cuadrícula.
- Cada rango numérico necesita los tres: Value (inicio), Step y Max. Step no puede ser 0.
- Si Max no es alcanzable desde Value con el signo de Step elegido, el cuadro explica el problema (p. ej., inicio ≤ máximo para pasos positivos).
Qué ves mientras se ejecuta
Cuando envías una optimización por fuerza bruta:
- Aparece un banner de cabecera en la vista Test results:
Optimization — <file> (current/total). - El panel de salida registra cada ejecución con su combinación de parámetros, además de una línea de encabezado:
Optimization (brute force): N backtest run(s). - La barra de progreso del panel de salida muestra
Run X / N. - Hay un botón Stop disponible: las ejecuciones ya completadas se conservan y se muestran en los resultados.
Qué ves cuando termina
El panel Test Results muestra una vista Optimization:
- Una cabecera que resume el script y cuántas ejecuciones se completaron.
- Una tira de pestañas con todas las ejecuciones, cada una etiquetada con la combinación de parámetros (p. ej.,
length=20, threshold=1.5). Cuando las etiquetas son largas, la combinación completa se muestra sobre el gráfico de la ejecución activa. - Al seleccionar una pestaña se muestra la vista de rendimiento normal de esa ejecución (gráfico de capital, métricas, operaciones), para que puedas profundizar en cualquier combinación.
- Si la ejecución se detuvo antes de completar todas las combinaciones, un banner indica que los resultados son parciales.
Búsqueda genética
El modo genético es la mejor opción cuando la cuadrícula de fuerza bruta sería demasiado grande. En lugar de probar cada combinación, hace evolucionar una pequeña población de candidatos durante varias generaciones, conservando los mejores y recombinándolos.
Hiperparámetros
Cambia la pestaña interior a Genetic y verás estos campos:
| Campo | Rango | Notas |
|---|---|---|
| Population size | 4 – 64 | Número de candidatos evaluados por generación. Los valores típicos son 8–32. Debe ser mayor que Elitism. |
| Generations | 1 – 40 | Cada generación ejecuta una población completa de backtests. |
| Elitism | ≥ 1, < población | Los mejores candidatos se copian sin cambios a la siguiente generación. |
| Crossover rate | 0 – 1 | Probabilidad de que dos progenitores generen un hijo mixto (si no, se copia el primer progenitor). |
| Mutation rate | 0 – 1 | Probabilidad, por gen, de saltar aleatoriamente a otro valor discreto. |
| Fitness metric | desplegable | Lo que la búsqueda maximiza (ver más abajo). |
| Random seed (optional) | texto | Usa la misma semilla para reproducir una búsqueda exactamente. |
El número total de backtests ejecutados es population × generations. Este producto está limitado a 400 evaluaciones; si lo superas, el cuadro te pide reducir uno de los dos valores.
Los alelos (los valores discretos que puede tomar cada parámetro) son exactamente las mismas cuadrículas que construiría la fuerza bruta:
- Los parámetros numéricos usan Value / Step / Max para crear una lista discreta.
- Los parámetros bool se convierten en
true/false. - Los parámetros de cadena son fijos (y no afectan a la búsqueda).
La búsqueda genética necesita al menos un parámetro que pueda variar (más de un alelo). El cuadro bloquea el envío y te pide ampliar una cuadrícula numérica o incluir un
boolsi todos los parámetros son fijos.
Métricas de aptitud
El desplegable ofrece (cuanto más alto, mejor):
- Sharpe ratio (predeterminada)
- Sortino ratio
- Total return
- Total P/L ($)
- Profit factor
- Calmar ratio
La métrica se lee del rendimiento de la cuenta de cada backtest; las ejecuciones que fallaron reciben la aptitud más baja posible, así que siempre quedan al final.
Qué ves mientras se ejecuta
- Banner de cabecera:
Genetic optimization — <file>conGeneration g of N, individual i of P. - El panel de salida registra la búsqueda:
Genetic optimization: population P, N generation(s), fitness = …, y luego── Gen g/N, indiv i/P: <combo> ──para cada backtest. - La barra de progreso muestra
Gen g/N · i/P. - Un panel de resultados parciales aparece en cuanto se completan las primeras ejecuciones: los candidatos ya evaluados se ordenan por aptitud y se listan con prefijos
G<g>·…para que veas quién va en cabeza sin esperar a toda la búsqueda.
Qué ves cuando termina
- El panel Test Results muestra Genetic optimization — <file> junto con la métrica de aptitud usada y el número de ejecuciones.
- La vista final contiene la última generación ordenada por aptitud, con la mejor arriba. Cada pestaña abre la vista de rendimiento completa de esa ejecución.
- Si pulsas Stop, se muestran las evaluaciones completadas de todas las generaciones hasta ese momento, ordenadas por aptitud, y un banner indica que la búsqueda se detuvo antes de tiempo.
Consejos prácticos
- Empieza con poco. Una cuadrícula de fuerza bruta de 3 parámetros con 10 valores cada uno ya son 1000 ejecuciones, muy por encima del límite de 256. Reduce los pasos antes de activar la optimización.
- Prefiere Genetic para espacios grandes. Más allá de ~3 parámetros numéricos, suele ser más rápido y útil unas pocas generaciones de búsqueda genética que una diminuta cuadrícula de fuerza bruta.
- Fija una semilla cuando quieras que una ejecución Genetic sea reproducible (p. ej., comparar dos estrategias con la misma búsqueda).
- Usa Stop sin reparos. Ambos modos conservan las ejecuciones ya completadas, así que puedes interrumpir en cuanto aparezca un ganador claro.
- Elige la aptitud con intención. Sharpe y Sortino premian la consistencia, Total return / Total P/L persiguen el crecimiento bruto, Profit factor premia el equilibrio entre ganancias y pérdidas y Calmar penaliza los drawdowns profundos.
- Inspecciona cada ejecución. Las pestañas de resultados incluyen cada una el gráfico de capital estándar, las métricas y el historial de operaciones: puedes exportar el informe HTML de cualquier ejecución individual igual que en un backtest único.

