Un backtest puede mostrar una ejecución a un precio que el mercado nunca mostró. Por lo general, el simulador ha inferido una ejecución aparentemente plausible a partir de datos incompletos: el máximo y el mínimo de una barra, un punto medio o un precio límite alcanzado por una sola operación. Eso puede hacer que el registro de operaciones parezca preciso, aunque oculte lo que el mercado ofrecía en realidad.
Empieza por preguntarte con qué precio podría haber interactuado tu orden. Una barra de últimas operaciones indica a qué precios se negoció durante un intervalo. No te dice cuál era el bid y el ask cuando llegó tu orden, cuánto había disponible ni si tu orden podía ponerse al principio de la cola.
¿Por qué mi backtest muestra una ejecución fuera del precio de mercado?
Primero, precisa qué significa «fuera». Una compra ejecutada por debajo del mínimo de la barra o una venta por encima de su máximo es un error evidente de contabilidad o de sincronización. Incluso una ejecución dentro del rango máximo-mínimo puede ser ficticia: quizá el precio se negoció antes de que existiera la orden, al otro lado del spread o en una cantidad demasiado pequeña para completar tu orden.
Piensa en una barra de 1 minuto con una apertura de 100.00, un mínimo de 99.80 y un cierre de 100.10. Tu estrategia ve la barra completa, envía una compra y el simulador la ejecuta a 99.80. Ese mínimo pudo producirse cerca del comienzo del minuto, 50 segundos antes de la señal. La barra no aporta pruebas de que 99.80 estuviera disponible después de tomar la decisión.
| Datos disponibles | Qué permiten establecer | Qué no permiten establecer |
|---|---|---|
| Barra OHLCV | Rango observado de precios de negociación y volumen durante un intervalo | Secuencia de precios, bid y ask, o disponibilidad cuando llega la orden |
| Registros de operaciones | Ejecuciones informadas con marcas de tiempo y precios | Liquidez pasiva o tu posición en la cola |
| Cotizaciones del mejor nivel | Mejor bid y ask mostrados en los momentos muestreados | Profundidad más allá del mejor nivel o si una cotización se mantuvo entre muestras |
| Eventos del libro de órdenes | Cambios en la profundidad mostrada y eventos de cola, según la cobertura del feed | Liquidez oculta, acceso al mercado o prioridad garantizada |
Hay otra causa frecuente: confundir el punto medio con precios ejecutables. Si la cotización es 99.99 bid y 100.01 ask, una compra a 100.00, el punto medio, queda pulcra en el informe. Por lo general, una compra ejecutable paga el ask, más cualquier impacto de su tamaño. Considerar el punto medio como precio de ejecución elimina silenciosamente la mitad del spread.
¿Puede ejecutarse una orden límite solo porque el mercado tocó su precio?
Que el precio se haya tocado demuestra que se registró una operación a ese precio límite. No demuestra que tu orden pasiva se habría ejecutado. Si había otras órdenes por delante, el volumen negociado a ese precio pudo ser insuficiente para alcanzar tu posición en la cola. Además, la operación pudo haberse realizado en otro mercado mientras tu orden esperaba en otro lugar.
Supón que tu orden límite de compra está en 50.00 y, después de enviarla, el mercado negocia 200 acciones a ese precio. Un simulador basado en el toque ejecuta las 500 acciones. Un modelo más prudente pregunta cuánto se negoció a 50.00 o a un precio mejor después de la llegada, y luego tiene en cuenta una estimación de las órdenes que te preceden en la cola. Sin datos del libro a nivel de órdenes, esa cola es un supuesto. Debe quedar visible en los resultados, no colarse como si fuera una certeza.
En un sistema de investigación pequeño, prefiero explicitar ese supuesto y probar un rango de valores antes que fingir que los datos de velas revelan la prioridad en la cola. El rango adecuado depende del mercado, el tamaño de la orden y la frecuencia con que opera la estrategia. Una acción tranquila a la apertura y un contrato cripto poco líquido a las 03:00 UTC plantean problemas de ejecución distintos.
¿Cómo debería elegir un modelo de ejecución para datos de barras?
Ajusta el modelo tanto a los datos como a lo que afirma la estrategia. Un backtest basado en barras puede seguir siendo útil para estrategias lentas, pero sus ejecuciones deben respetar lo que las barras realmente permiten saber.
- Define las horas de decisión y llegada. Si una señal usa el cierre de la barra, envía la orden después de ese cierre. Simula la ejecución a partir del siguiente intervalo o cotización disponible, no del mínimo anterior de la barra completa.
- Usa el lado correcto del spread. Para compras ejecutables, parte del ask; para ventas, del bid. Si solo tienes barras de operaciones, estima el spread con una fuente aparte o indica que el modelo lo omite.
- Limita las ejecuciones a una liquidez plausible. Aplica un límite de participación al volumen observado e incluye comisiones e impacto de mercado. El volumen total de una barra no significa que todo estuviera disponible al precio que elegiste.
- Pon a prueba los supuestos. Compara las ejecuciones a la apertura siguiente con un deslizamiento conservador y comprueba si el resultado resiste una ejecución peor. No ajustes el modelo de ejecución hasta que la estrategia salga ganando.
Estas son decisiones de modelado, no una receta para recuperar la única ejecución verdadera a partir de datos incompletos. Si la estrategia depende de capturar unos pocos puntos básicos, quizá los datos de barras no basten para respaldar esa afirmación.
¿Cómo puedo averiguar en qué punto del backtest se introdujo la ejecución imposible?
Sigue una operación sospechosa desde la señal hasta el registro contable. Mantén como campos separados la marca de tiempo de la decisión, la de envío de la orden, la llegada simulada, la observación de mercado seleccionada, el precio y la cantidad de ejecución, y la comisión. Después, revisa lo siguiente en orden:
- ¿Se calculó la variable con datos de una barra que aún no había terminado cuando se tomó la decisión?
- ¿La ejecución usó el máximo, el mínimo o el cierre de la barra, aunque ese precio se hubiera producido antes de la llegada de la orden?
- ¿Se cruzó una compra con el bid o una venta con el ask?
- ¿La cantidad simulada superó el tamaño disponible en la cotización o el límite de participación del modelo?
- ¿Se aplicaron el redondeo de precios, el tamaño mínimo de variación del contrato y las comisiones después de elegir el precio de ejecución?
Si no puedes responder esas preguntas a partir del registro de operaciones, al backtest le faltan datos sobre la ejecución. Añade esos campos, reproduce a mano algunas operaciones con los datos sin procesar y comprueba que la ejecución informada podría haberse producido con el modelo que pretendías usar. Una curva de capital limpia no detectará un precio que solo existió dentro del simulador.
← Todos los artículos


