12. Optimizador de estrategia optimizador
Optimizer es un optimizador de estrategias que puede optimizar los parámetros de la estrategia utilizando métodos como algoritmos genéticos y optimización de enjambre de partículas.
- class qteasy.optimization.Optimizer(*, op: Operator, method: str, shares: list[str], benchmark: DataFrame, pool_size: int, opti_target: str, opti_direction: str, parallel: bool, opti_start_date: str, opti_end_date: str, test_start_date: str, test_end_date: str, opti_cash_plan: CashPlan, test_cash_plan: CashPlan, cost_params: ndarray, signal_parsing_params: dict, trading_moq_params: dict, trading_delivery_params: dict, search_config: dict, logger: Optional[Logger] = None, evaluate_indicators: str = 'r,m,v,b', test_plot_type: str = 'histo')[fuente]
Objeto buscador de parámetros óptimos
13. Método de optimización de parámetros de estrategia.
Búsqueda de cuadrícula
- class qteasy.optimization.Optimizer._search_grid(self, space: Space)
Búsqueda de cuadrícula: muestree el espacio de parámetros con un tamaño de paso fijo y evalúe en lotes.
- Parámetros:
space (Space) – El espacio de parámetros que se va a buscar.
- Devuelve:
Escriba el resultado óptimo en
self.result_pool.- Tipo del valor devuelto:
None
Búsqueda de Montecarlo
- class qteasy.optimization.Optimizer._search_montecarlo(self, space: Space)
Búsqueda aleatoria de Monte Carlo: muestree aleatoriamente de manera uniforme dentro de
spacey evalúe en lotes.- Parámetros:
space (Space) – El espacio de parámetros que se va a buscar.
- Devuelve:
Escriba el resultado óptimo en
self.result_pool.- Tipo del valor devuelto:
None
Búsqueda de recocido simulada
- class qteasy.optimization.Optimizer._search_sa(self, space: Space)
Búsqueda aleatoria progresiva de tamaño de paso: múltiples rondas de Monte Carlo + contracción del subespacio.
En cada ronda, tome muestras aleatoriamente dentro de varios subespacios; después de seleccionar el mejor, reduzca el vecindario usando configuraciones como
reduce_ratioand proceed to the next round, until stopping conditions such asmin_volumeormax_rounds.- Parámetros:
space (Space) – Espacio de parámetros inicial.
- Devuelve:
Escriba el resultado óptimo en
self.result_pool.- Tipo del valor devuelto:
None
Búsqueda de algoritmos genéticos.
- class qteasy.optimization.Optimizer._search_ga(self, space: Space)
Algoritmo óptimo de búsqueda de hiperparámetros 4: Algoritmo genético. Los algoritmos genéticos son adecuados para buscar un óptimo global o un óptimo global aproximado en un espacio de parámetros extremadamente grande, manteniendo al mismo tiempo el costo computacional dentro de un rango aceptable.
Los algoritmos genéticos se basan en el proceso genético iterativo de los organismos vivos. Primero, se selecciona aleatoriamente una cierta cantidad de puntos de parámetros en el espacio de parámetros; este conjunto de puntos de parámetros se denomina “población”. Luego se realiza un cálculo iterativo basado en esta población. Antes de cada iteración (llamada reproducción), la probabilidad de que cada individuo sobreviva o muera se determina según el valor de su función de evaluación. La regla es: cuanto más cerca esté el valor de la función de evaluación de un individuo del valor óptimo, mayor será su probabilidad de supervivencia y mayor su probabilidad de producir descendencia; de lo contrario, estas probabilidades son menores. Después de determinar las probabilidades de supervivencia/muerte y reproducción, se selecciona un cierto número de individuos para morir de acuerdo con las probabilidades de supervivencia/muerte. De los individuos restantes (supervivientes), aquellos con mayores probabilidades de reproducción se seleccionan para cruzarlos y reproducir la siguiente generación de individuos. Al mismo tiempo, durante la reproducción se introducen mutaciones genéticas aleatorias para generar nuevos individuos. En última instancia, el tamaño de la población vuelve a su valor inicial. De esta manera, se completa una iteración de población. El proceso anterior se repite durante miles o incluso decenas de miles de generaciones hasta que aparece en la población la solución óptima o casi óptima deseada.
- Parámetros:
space (qt.Space) – Objeto espacial de parámetros
- Tipo del valor devuelto:
None,搜索的结果最佳值会被保存在self.result_pool属性中
Búsqueda de descenso de gradiente
- class qteasy.optimization.Optimizer._search_gradient(self, space: Space)
Algoritmo óptimo de búsqueda de parámetros 5: descenso de gradiente (búsqueda de gradiente simultánea de múltiples puntos)
Encuentre, en el espacio de parámetros, la dirección en la que el resultado de la optimización mejora más rápidamente y avance siempre hacia la mejor dirección (utilizando un tamaño de paso adaptativo) hasta que el resultado ya no cambie o se alcance el número máximo de pasos. Elija aleatoriamente N puntos de partida en el espacio de parámetros para comenzar la búsqueda; el resultado son los N resultados del paso final.
La vecindad se genera a través de space.neighbors(point, axis_index, …), admitiendo int/float/enum/int_array/float_array. Los tamaños de paso adaptables (aumentar/disminuir) se aplican solo a las dimensiones flotantes; si no hay mejora, el tamaño del paso se reduce y la trayectoria termina cuando el tamaño del paso se vuelve demasiado pequeño o cuando el número de no mejoras consecutivas alcanza el umbral.
- Parámetros:
space (Space) – Espacio de parámetros
- Tipo del valor devuelto:
None
Búsqueda de optimización de enjambre de partículas
- class qteasy.optimization.Optimizer._search_pso(self, space: Space)
Algoritmo óptimo de búsqueda de hiperparámetros 6: Optimización de enjambre de partículas (PSO)
Elija aleatoriamente N puntos de partida en el espacio de parámetros como posiciones iniciales del enjambre de partículas. Cada partícula ajusta su velocidad y posición en función de su propia mejor posición histórica y de la mejor posición histórica global, acercándose gradualmente al óptimo. Después de múltiples iteraciones, el enjambre converge al óptimo global o a un óptimo aproximado.
La representación numérica utiliza space.point_to_vector / space.vector_to_point: actualiza la velocidad y la posición en el espacio vectorial codificado, luego vuelve a asignar a puntos de parámetros válidos. Peso de inercia w=0,7, coeficiente cognitivo c1=1,5, coeficiente social c2=1,5.
- Parámetros:
space (qt.Space) – Objeto espacial de parámetros
- Tipo del valor devuelto:
None,搜索的结果最佳值会被保存在self.result_pool属性中
Búsqueda de optimización bayesiana
- class qteasy.optimization.Optimizer._search_bayesian(self, space: Space)
Algoritmo óptimo de búsqueda de hiperparámetros 6: optimización bayesiana
La optimización bayesiana es un método de optimización global basado en la teoría estadística bayesiana, adecuado para optimizar funciones de caja negra de alta dimensión, no convexas. Guía la búsqueda de parámetros mediante la construcción de un modelo probabilístico de la función objetivo (normalmente un proceso gaussiano), encontrando así el óptimo dentro de un número limitado de evaluaciones. Flujo de trabajo: muestreo aleatorio inicial -> ajustar un sustituto con (X, y) (proceso gaussiano con un núcleo RBF) -> iterar: calcular la función de adquisición UCB en puntos candidatos, seleccionar el punto con el mayor valor de adquisición para evaluación -> actualizar (X, y) y result_pool, hasta alcanzar max_iterations.
- Parámetros:
space (qt.Space) – Objeto espacial de parámetros
- Tipo del valor devuelto:
None,搜索的结果最佳值会被保存在self.result_pool属性中