11. Backtester motor de backtesting de estrategia

La clase Backtester se utiliza para realizar pruebas retrospectivas de objetos de operador.

Los atributos de esta clase incluyen todos los parámetros necesarios para los cálculos del backtest, así como los datos de resultados generados durante el backtest. Estos datos de resultados se almacenan como ndarrays y se conservan durante la vida útil del objeto y se pueden actualizar repetidamente.

Solo se puede crear una instancia de esta clase después de que se haya creado el objeto operador, porque la clase Backtester depende del objeto operador para generar señales comerciales y ejecutar operaciones. El uso típico es el siguiente:

operator = Operator( ... )  # 创建Operator对象
backtested = Operator.backtest( signal_count=100, share_count=10, **kwargs)  # 创建Backtester对象
# get backtest raw results:
backtested.cash_investment_array
backtested.own_cashes
...
# get backtest results as DataFrame:
result_df = backtested.value_records()
trade_log_df = backtested.trade_logs()
trade_summary_df = backtested.trade_summary()
class qteasy.backtest.Backtester(op: Operator, shares: list[str], cash_plan: CashPlan, cash_investment_array: ndarray, cash_inflation_array: ndarray, delivery_day_indicators: ndarray, cost_params: ndarray, signal_parsing_params: dict, trading_moq_params: dict, trading_delivery_params: dict, trade_price_data: ndarray, benchmark_data: Optional[Union[DataFrame, Series]] = None, evaluate_price_data: Optional[DataFrame] = None, enable_tracing: bool = False, logger: Optional[Logger] = None)[fuente]

La clase Backtester se utiliza para realizar una prueba retrospectiva de un objeto operador. Los atributos de esta clase incluyen todos los parámetros necesarios para los cálculos del backtest, así como los datos de resultados generados durante el backtest. Estos datos de resultados se almacenan como ndarrays y se conservan durante la vida útil del objeto y se pueden actualizar repetidamente.

Solo se puede crear una instancia de esta clase después de que se haya creado el objeto operador, porque la clase Backtester depende del objeto operador para generar señales comerciales y ejecutar operaciones. El uso típico es el siguiente:

operator = Operator( ... )  # 创建Operator对象
backtested = Operator.backtest( signal_count=100, share_count=10, **kwargs)  # 创建Backtester对象
# get backtest raw results:
backtested.cash_investment_array
backtested.own_cashes
...
# get backtest results as DataFrame:
result_df = backtested.value_records()
trade_log_df = backtested.trade_logs()
trade_summary_df = backtested.trade_summary()
op

Un objeto de operación comercial que incluye la lógica para generar señales comerciales y ejecutar operaciones.

Type:

Operator

clear_backtest_buffers()[fuente]

Borre los datos de los resultados de la prueba retrospectiva almacenados en caché y restablezca los datos de los resultados de la prueba retrospectiva a una matriz vacía para que se pueda volver a calcular la prueba retrospectiva.

Tipo del valor devuelto:

None

evaluate_result(indicators: str) dict[fuente]

Genera un informe de evaluación de los resultados comerciales y lo guarda en el atributo self.evaluate_result

Parámetros:

indicators (str) – Métricas de evaluación de resultados de backtest; consulte la función qteasy.evaluate.evaluate() para obtener más detalles

generate_trade_logs(save_to_file_path: Optional[str] = None) DataFrame[fuente]

Genere un registro comercial basado en los resultados del backtest. El registro comercial es un archivo de registro comercial completo que contiene la siguiente información para cada período comercial.

Cada período de negociación contiene 8 filas de datos, de la siguiente manera:

  • 0, trade signal: la señal comercial del período actual para cada acción

  • 1, price: el precio de negociación del período actual para cada acción

  • 2, traded amounts: la cantidad negociada en el período actual para cada acción; 0 si no hay comercio

  • 3, cash changed: el monto del cambio de efectivo del período actual para cada acción; Negativo para compras y positivo para ventas.

  • 4, trade cost: el costo de negociación del período actual para cada acción

  • 5, own amounts: la cantidad de existencias al final del período para cada acción

  • 6, available amounts: la cantidad disponible al final del período para cada stock

  • 7, summary: el valor de posición de cada acción para el período actual, incluyendo también datos resumidos (efectivo retenido al final del período actual, efectivo disponible, valor total de los activos)

La información anterior se guarda en forma de DataFrame. El índice de fila es un MultiIndex: el primer/segundo nivel son los índices del grupo de tiempo/estrategia, y el tercer nivel son las 8 categorías de datos anteriores. El archivo de registro comercial se puede guardar en formato CSV con el nombre de archivo trade_log.csv.

Parámetros:

save_to_file_path (str, optional) – Si se proporciona una ruta de archivo, guarde el registro comercial como un archivo CSV; el valor predeterminado es Ninguno.

Devuelve:

trade_log – datos de resultados de simulación comercial

Tipo del valor devuelto:

pd.DataFrame

generate_trade_summary(share_names: Optional[list[str]] = None, save_to_file_path: Optional[str] = None) DataFrame[fuente]

Genere la tabla de resumen de operaciones (una tabla de resumen de operaciones más compacta que contiene la información clave para cada operación, presentada de una manera más legible para los humanos y filtra los registros sin operaciones). La entrada de la función trade_log_df es el valor de retorno de la función generate_trade_logs().

Parámetros:
  • share_names (list[str], optional) – Lista de nombres de instrumentos comerciales; si no hay ninguno, utilice “N/A” como nombre.

  • save_to_file_path (str, optional) – Si se proporciona una ruta de archivo, guarde la tabla de resumen comercial como un archivo CSV; el valor predeterminado es Ninguno (no guardar un archivo).

plot_result(plot_title: str, show_positions: bool, buy_sell_markers: bool) None[fuente]

Genere resultados comerciales en forma de gráfico

Parámetros:
  • plot_title (str) – El título del gráfico

  • show_positions (bool) – Si se muestra información del intervalo de posición. Si se establece en Verdadero, muestra el tipo de posición para cada intervalo en el gráfico de curva de retorno como bandas rojas/verdes (el verde indica que se mantiene una posición larga, el rojo indica que se mantiene una posición corta). Cuanto más oscuro sea el color, mayor será la relación de posición.

  • buy_sell_markers (bool) – Si mostrar puntos de compra/venta en el gráfico de curva de retorno. Si se establece en Verdadero, los puntos de compra/venta se marcan en el gráfico de la curva de retorno con pequeñas flechas rojas/verdes.

Tipo del valor devuelto:

None

report_result(trade_log: Optional[str] = None, trade_summary: Optional[str] = None) str[fuente]

Generar un informe detallado de los resultados del backtest. El informe está en formato de texto sin formato y se puede imprimir usando el comando de impresión.

Parámetros:
  • trade_log (str, optional) – Ruta de almacenamiento para el archivo de registro comercial. El valor predeterminado es Ninguno. Si se proporciona esta ruta, la ruta de almacenamiento del registro comercial se imprime en el informe.

  • trade_summary (str, optional) – Ruta de almacenamiento para el archivo de registro de resumen comercial. El valor predeterminado es Ninguno. Si se proporciona, imprima la ruta de almacenamiento del registro de resumen comercial en el informe.

Devuelve:

report_str – Informe de resultados de la prueba retrospectiva formateado para imprimir

Tipo del valor devuelto:

str

run() Backtester[fuente]

Ejecute los cálculos del backtest, genere los datos de los resultados del backtest y guárdelos en los atributos del objeto.

save_complete_values(save_to_file_path: Optional[str] = None) Optional[str][fuente]

Guarde complete_values ​​como un archivo CSV (llamado por qt_operator cuando trade_log=True)

Parámetros:

save_to_file_path (str, optional) – Guardar ruta; si Ninguno, no se escribe nada

Devuelve:

Devuelve la ruta guardada en caso de éxito; de lo contrario devolver Ninguno

Tipo del valor devuelto:

str or None

trace_result_df() Optional[DataFrame][fuente]

Generar un registro del proceso comercial basado en los resultados del backtest; la salida está en formato DataFrame

La alineación entre las filas de seguimiento y op_signal_index está garantizada por Operator al escribir (update_trace_step utiliza el número de fila de señal global). Aquí solo concatenamos por estrategia y luego configuramos el índice en op_signal_index.

Devuelve:

trade_trace – datos del proceso de simulación comercial

Tipo del valor devuelto:

pd.DataFrame

trade_result_df() DataFrame[fuente]

Generar registros de valor de activos basados ​​en los resultados del backtest; la salida está en formato DataFrame.

Devuelve:

value_history – datos de resultados de simulación comercial

Tipo del valor devuelto:

pd.DataFrame

trade_result_final_value()[fuente]

Calcule y devuelva directa y rápidamente el resultado del valor final del backtest.

trade_result_max_drawdown()[fuente]

Calcule y devuelva directa y rápidamente el resultado de reducción máxima del backtest.

trade_result_volatility()[fuente]

Calcule y devuelva directa y rápidamente el resultado de volatilidad del backtest.