7. Backtesting, trading en vivo y optimización: un punto de entrada unificado y diferentes modos

7.1. 1. 统一入口

Los usuarios activan la ejecución a través de **qt.run(op, mode=…, kwargs). Internamente:

  • Fusione kwargs con la configuración global en config (ConfigDict).

  • Llame a op.run(config, datasource, logger) y pase la fuente de datos y el registrador predeterminados de qteasy.

modo determina qué rama tomar:

  • modo=0: modo de negociación en vivo; ingresa al flujo de trabajo Trader (activadores programados, obtención de datos en tiempo real, generación de señales, realización de pedidos y grabación).

  • modo=1: modo de prueba retrospectiva; construye un Backtester, ejecuta el Operator paso a paso de acuerdo con group_timing_table, simula rellenos y genera la curva de capital y el rendimiento.

  • modo=2: modo de optimización. El Optimizador busca en el espacio de parámetros; cada conjunto de parámetros ejecuta una prueba retrospectiva y los resultados se agregan de acuerdo con la función objetivo.

  • modo=3/4: modos como seguimiento y previsión; consulte la documentación y la API.

Por lo tanto, el mismo Operator reutiliza el mismo mecanismo de «ejecutar la estrategia por paso de tiempo y mezclar señales» en diferentes modos; las únicas diferencias son la fuente de datos y cómo se manejan los resultados.

7.2. 2. 配置(config)的作用

config incluye el universo de activos, el período de prueba retrospectiva, los parámetros de costos, el plan de capital, etc.; backtesting/comercio en vivo/optimización comparten la misma estructura de configuración. Por ejemplo:

  • Grupo de activos, tipos de activos y fechas de inicio/finalización del backtest;

  • Costos comerciales (tasas de comisión, comisiones mínimas, etc.);

  • Plan de asignación de capital (invest_cash_amounts, etc.);

  • Relacionado con el comercio en vivo (cuenta, tipo de corredor, etc.; se usa cuando modo = 0).

La configuración se obtiene fusionando **qt.run(…, kwargs) con el QT_CONFIG global y se pasa a op.run(config, …); Backtester, Trader y Optimizer leen cada uno los campos que necesitan.

7.3. 3. 回测模式(mode=1)

  1. Preparar datos históricos: según el universo de activos, el período de prueba retrospectiva en la configuración y los tipos de datos y la longitud de la ventana de todas las estrategias dentro del Operator, llame a check_and_prepare_backtest_data y similares para extraer y ensamblar los datos históricos requeridos del DataSource (incluido un historial retrospectivo suficiente para cubrir el inicio del período).

  2. Construya el Backtester: pase el Operator, la lista de activos, el plan de capital, los datos de precios comerciales, los parámetros de costos, etc. para crear una instancia Backtester.

  3. Selección de rama: si op.check_dynamic_data() es Falso (la estrategia no depende de los datos del proceso), tome la rama estática: genere todas las señales a la vez, luego ejecute una prueba retrospectiva vectorizada de Numba; Si es Verdadero (la estrategia usa get_data('proc.xxx') o tipos de datos dinámicos heredados), tome la rama dinámica: genere señales paso a paso, simule llenados paso a paso y actualice los datos del proceso para que la estrategia los use en el siguiente paso. Consulte Datos de proceso (proc.*) y Backtesting dinámico para obtener más detalles.

  4. Ejecutar paso a paso: para cada paso de tiempo en group_timing_table, llame a op.run_strategies(steps) (o una interfaz equivalente) para obtener (signal_type, signal) para cada paso.

  5. Analizar y simular rellenos: analice señales por tipo de señal (PT/PS/VS) en intenciones de compra/venta, luego use lógica como backtest_step para actualizar posiciones, efectivo y la cola de liquidación, generando la curva de acciones diaria y los registros comerciales.

  6. Evaluación y resultados: evalúe el desempeño en la curva de acciones y los registros comerciales (por ejemplo, índice de Sharpe, reducción, etc.), devuelva resultados al usuario y, opcionalmente, genere informes y gráficos.

7.4. 4. 实盘模式(mode=0)

  1. Trader contiene Operator y la configuración, y activa tareas en momentos específicos dentro de los días de negociación de acuerdo con run_freq, run_timing y el calendario comercial.

  2. Obtener datos para el momento actual: según las declaraciones de estrategia, obtenga la ventana de datos requerida para el paso actual desde DataSource (o una interfaz en tiempo real).

  3. Ejecute Operator: en este paso, llame a Operator para generar señales (el mismo flujo run_strategy que en el backtesting).

  4. Analizar y colocar órdenes: analiza señales en órdenes, entrégalas al Broker para su ejecución (simulada o en una interfaz de corredor en vivo) y registra las ejecuciones y posiciones.

7.5. 5. 优化模式(mode=2)

  1. El Optimizador determina el espacio de parámetros (por ejemplo, búsqueda de cuadrícula, muestreo aleatorio, algoritmos genéticos, etc.) en función de las definiciones de Parámetros de la estrategia.

  2. Para cada conjunto de parámetros: escriba los parámetros en Operator mediante set_parameter y similares, luego ejecute una prueba retrospectiva (es decir, el flujo de trabajo modo=1).

  3. Calcule la función objetiva (por ejemplo, índice de Sharpe, índice de retorno a reducción, etc.) a partir de los resultados de la prueba retrospectiva y agregue los resultados de todas las combinaciones de parámetros.

  4. Genera mejores combinaciones de parámetros y los resultados de backtest correspondientes para que los usuarios elijan.

7.6. 6. 小结

Las pruebas retrospectivas, el comercio en vivo y la optimización comparten el mecanismo “Operator + ejecución paso a paso a lo largo del tiempo”: todos preparan los datos y la configuración primero, luego llaman a la estrategia paso a paso de acuerdo con group_timing_table y mezclan señales. Las únicas diferencias son: el backtesting utiliza datos históricos y el Backtester para simular rellenos; el comercio en vivo utiliza datos en tiempo real y Trader/Broker para ejecutar órdenes; La optimización ejecuta pruebas retrospectivas varias veces y compara la función objetivo. Para obtener más parámetros y uso, consulte la «Guía del usuario», «Realizar pruebas y evaluar estrategias comerciales», «Optimizar estrategias comerciales» y la referencia de API.