6. Backtesting del motor y el rendimiento

Este capítulo explica cómo funciona el motor de backtesting de qteasy desde la perspectiva de uso y resultados, y cómo se implementan rendimiento y vectorización, lo que ayuda a los usuarios a comprender de dónde provienen la velocidad y la corrección del backtest. Para obtener una explicación arquitectónica de nivel inferior, consulte Backtesting Engine and Performance (Design Perspective) en “Arquitectura y diseño”.

6.1. 1. 回测引擎概览

El punto de entrada y el flujo de trabajo de la prueba retrospectiva se describen en [Descripción general de la prueba retrospectiva] (1.%20overview.md) y [Cómo ejecutar una prueba retrospectiva] (2.%20run_backtest.md): ingrese al modo de prueba retrospectiva a través de qt.run(op, mode=1, ...) e internamente, en cada paso de tiempo en group_timing_table, ejecute la estrategia, analice señales y simule ejecuciones.

A diferencia de las “operaciones matriciales de un solo disparo basadas en eventos barra por barra en toda la línea de tiempo”, qteasy utiliza pasos secuenciales de dimensión de tiempo con vectorización de dimensión de instrumento dentro de cada paso:

  • Dimensión de tiempo: Ejecute cada paso de tiempo en orden de cadencia comercial real para mantener correctamente estados como efectivo, posiciones y la cola de liquidación (por ejemplo, T+1).

  • Dimensión del instrumento: dentro de cada paso de tiempo, realice cálculos vectorizados (matrices NumPy + aceleración Numba) para todos los instrumentos en el grupo de activos (volumenes de compra/venta, tarifas, actualizaciones de posiciones, etc.) logrando una alta eficiencia por paso.

Esto garantiza estados y reglas consistentes con el comercio real y evita la pérdida de rendimiento causada por los bucles por tick bajo un enfoque puramente basado en eventos.

6.2. 2. 性能与向量化

2.1 Aceleración de la computación central

Las siguientes funciones principales en backtesting y cálculo de resultados comerciales se aceleran con Numba JIT (@njit(nogil=True, cache=True)):

  • backtest_step: en un solo paso, calcule volúmenes de compra/venta, tarifas, posiciones y actualizaciones de liquidación para todo el lote de instrumentos.

  • calculate_trade_results: Resultados comerciales y cálculo del flujo de caja.

  • backtest_batch_steps: recorra los pasos de tiempo dentro de Numba y llame a backtest_step para completar todo el segmento de backtest.

  • backtest_flash_steps: Se usa solo en modo de optimización; conserva solo el efectivo y las posiciones finales para ahorrar memoria y, además, completa el paso por lotes dentro de Numba.

La mezcla de señales (por ejemplo, fusionar múltiples estrategias) también utiliza la aceleración @njit para algunos operadores en el módulo blender. Por lo tanto, el motor principal de backtesting se implementa con vectorización + Numba, en lugar de bucles puros de Python.

2.2 Ordenamiento y vectorización de la dimensión temporal a lo largo de la dimensión del instrumento

Dimensión

Descripción general del enfoque

Dimensión del tiempo

Avance secuencialmente para mantener correctamente estados como T+1, ciclos de liquidación, MOQ, etc., de forma coherente con el comercio real.

Dimensión del instrumento

Realice operaciones de matriz para todos los instrumentos en un solo paso (por ejemplo, op_signal, own_amounts, etc. son matrices 1D) para lograr la vectorización.

Modo de optimización

Se realizan pruebas retrospectivas de múltiples conjuntos de parámetros en paralelo mediante multiprocesamiento; dentro de cada conjunto, se utilizan rutas eficientes como backtest_flash_steps para reducir la memoria y el cálculo.

En la primera ejecución o cuando cambian los parámetros, Numba compila las funciones relevantes, lo que puede introducir un retraso de inicio único; Las pruebas posteriores del mismo tipo reutilizarán el caché y se ejecutarán más rápido.

2.3 Breve comparación con VectorBT

Artículo de comparación

qteasy

VectorBT

Dimensión del tiempo

Paso adelante secuencialmente, vectorizado dentro de cada paso.

Operaciones matriciales de una sola vez en toda la línea de tiempo, sin ningún bucle de tiempo explícito

Estados y restricciones

Mantiene explícitamente T+1, liquidación, MOQ, etc., coincidiendo estrechamente con el comercio real.

Curvas de acciones en su mayoría simplificadas; no enfatiza la liquidación/MOQ

Escenarios aplicables

Cuando necesite simular con precisión reglas de acciones A, fusionar múltiples estrategias y modelar costos y liquidaciones detalladas

Detección rápida de combinaciones masivas de parámetros; backtesting orientado a la investigación

Con la premisa de garantizar corrección del estado y reglas configurables, qteasy equilibra la velocidad mediante secuenciación del eje de tiempo + vectorización del eje del instrumento + ejecución de un solo paso de Numba; Mientras tanto, la optimización multiparámetro compensa la diferencia de “no poder transmitir la matriz completa en una sola ejecución” mediante el paralelismo de multiprocesamiento.

6.3. 3. 本目录与相关文档