Saltar al contenido
Todos los documentos de la biblioteca

Interpretar los costes del backtest cuando los campos de configuración son inertes

Código Machine Learning for Trading

Resumen

Esta nota de configuración distingue los parámetros que aparecen en la identidad de un backtest de los que realmente afectan a los costes de trading simulado. En el estudio de caso descrito, todas las ejecuciones registradas usan una ruta vectorizada de rentabilidad hasta el vencimiento. Los campos configurados de precio de ejecución, tasa de comisión y tasa de slippage no se pasan a esa ruta, y las ejecuciones al precio de cotización corresponden a un bróker basado en eventos que las ejecuciones vectorizadas no construyen. Los parámetros siguen en la configuración porque eliminarlos cambiaría la identidad hash de las ejecuciones existentes.

Los costes aplicados en la simulación se leen por separado de un archivo de configuración: diferenciales de entrada y salida de opciones, diferenciales estimados de cobertura en cada rebalanceo y comisiones por contrato o acción. La nota indica que el campo registrado de slippage total es nulo en toda la población indicada, aunque se cobran costes, porque esa ruta no registra los costes totales. Es una lección útil para las auditorías: un valor de configuración o una métrica de costes ausente no basta por sí solo para determinar cuánto pagó un backtest. Los hallazgos corresponden a la implementación especificada y deben revisarse si cambian el ejecutor o el sistema de gestión de costes.

Ideas clave

  • Los campos de configuración pueden afectar la identidad hash de una ejecución aunque la ruta de ejecución no los utilice.
  • La ruta vectorizada de rentabilidad hasta el vencimiento descrita aquí no usa los campos configurados de comisión y slippage basados en tasas.
  • Los costes simulados reales proceden de componentes separados de opciones, coberturas y liquidación.
  • Un campo de slippage agregado nulo no demuestra que no se hayan cobrado costes.
  • La interpretación de los costes depende de rastrear el ejecutor específico y su flujo de datos.

Etiquetas

Texto completo
# base.yaml


```yaml
# Three fields below are inert on the path this case study runs: `execution.execution_price`,
# `commission.rate` and `slippage.rate`. Every registered backtest here is `ret_to_expiry`,
# which `case_studies/utils/backtest_runner.py` routes to `_run_htm_daily_mtm`, and that call
# is not passed `cost_spec` - the only thing that carries these rates into a run. The
# `quote_side` fill is read by the event-driven broker, which a `rebalance.mode: vectorized`
# case study never constructs. They still reach the registered `backtest_config` and so the
# hashed identity, which is why they stay: removing them would re-key 879 backtests to delete
# values nothing reads.
#
# The costs this case study actually pays come from `_htm_backtest.py`, which reads
# `config/setup.yaml::costs.components` directly - per-leg entry spread from the real option
# quotes, `hedge_spread.estimate_bps_of_notional` on every hedge rebalance,
# `commission.option_per_contract` and `commission.equity_per_share`, plus an exit spread on
# liquidation. Verified 2026-09-12; `total_slippage` is NULL on all 879 rows because the
# vectorized path records no cost totals, not because nothing was charged.
account:
  allow_short_selling: true
execution:
  execution_price: quote_side
  mark_price: price
  execution_mode: next_bar
commission:
  model: percentage
  rate: 0.0005
slippage:
  model: percentage
  rate: 0.0002
calendar:
  calendar: NYSE
  timezone: UTC
  data_frequency: daily
feed:
  timestamp_col: timestamp
  entity_col: symbol
  price_col: instr_mid
  close_col: close
  bid_col: instr_bid
  ask_col: instr_ask
  mid_col: instr_mid
metadata:
  case_study: sp500_options

```

Se muestra íntegramente con atribución según la licencia de la fuente. Licencia: MIT

Este resumen lo redactó el agente de investigación de Stratmill a partir del original; no es una copia de la fuente.