Alex: nos enviaste dos curvas de capital y una queja. La ruptura del máximo de 20 días se ve impecable en el backtest. La cuenta paper, que ejecuta el mismo código con los mismos valores, toma más o menos la mitad de las entradas y luego se detiene en días en que el backtest ni se inmutó. Preguntaste si nuestra pasarela paper está descartando órdenes. No es así. Tus barras diarias están pegando dos sesiones y etiquetando el resultado como un día.
Busqué el valor de mediana capitalización que marcaste, del 22 de octubre. El máximo diario del proveedor es $41.86. En horario regular no se negoció por encima de $41.12. Ese $41.86 corresponde a una operación de 800 acciones a las 7:41 PM, hora del Este, dentro de un diferencial de 22 centavos. Tu señal marcó un nuevo máximo de 20 días y dejó una orden de compra para la siguiente apertura. La sesión paper, que ejecutamos de 9:30 a 16:00, hora del Este, salvo que la cambies, nunca vio la ruptura. No había nada que comprar.
¿Qué máximo aparece en esa fila?
En acciones de EE. UU., «diaria» es una comodidad del proveedor. Puedes recibir al menos tres barras distintas para la misma fecha del calendario, y la mayoría de las exportaciones CSV no te dirán cuál obtuviste.
| Barra | Horario | De dónde salen el máximo y el mínimo | Qué habría implicado operar al máximo |
|---|---|---|---|
| Horario regular | 9:30-16:00 ET, más las dos subastas | El libro continuo y los cruces de apertura y cierre | Estar en la sesión regular, a menudo en una subasta |
| Extendida | Aproximadamente de 4:00-9:30 y de 16:00-20:00; depende del bróker | Operaciones escasas antes de la apertura y después del cierre | Una sesión para la que quizá tu cuenta de efectivo ni siquiera tenga permiso |
| Compuesta | Lo que haya unido el proveedor | Una mezcla de lo anterior, a veces con lotes impares y operaciones TRF | Una operación que quizá haya sido de 80 acciones con una cotización amplia |
Las criptomonedas te enseñaron a tratar la medianoche UTC como el comienzo del día de negociación. Las acciones no tienen por qué seguir esa regla. El motor de casación al que realmente puedes acceder desde una cuenta de efectivo long-only ofrece seis horas y media de casación continua y dos cruces. El resto reúne a otro tipo de participantes, tiene otro diferencial y, a menudo, otro último precio.
Todavía conservo un directorio de CSV de Yahoo de 2015, cuando estaba convencido de haber encontrado un estupendo Donchian para biotecnológicas pequeñas. Los máximos eran operaciones fuera de horario tras eventos binarios. Estaba haciendo backtesting de ventas de pánico de otras personas por 200 acciones y llamándolo canal. Tú haces una versión más respetable de lo mismo con un feed de pago.
Si tu agente de investigación pidió OHLCV diario a un proveedor y no especificó la sesión, da por hecho que es compuesto. Los agentes usan la opción predeterminada por comodidad. Y así una operación de las 7:41 PM acaba dentro de una ruptura.
Por qué paper parece fallar en ambos sentidos
Cuando la sesión del archivo y la de la cuenta no coinciden, no obtienes simplemente un recuento menor. Aparecen tres tipos de desviación, y te tocaron los tres.
- Ruptura en un máximo de horario extendido. El backtest entra en la siguiente apertura regular. Paper nunca tuvo señal. Esas son las ocho entradas que te faltan.
- Stop por debajo del mínimo de ayer, tomado de la barra compuesta. El backtest ya había salido por una mecha fuera de horario. Paper, que solo marca el horario regular, mantiene la posición durante un día en que el backtest ya aparece plano.
- El stop opuesto: paper marca el último precio e incluye el premercado; una operación de las 5:10 AM te saca, mientras el backtest de horario regular sigue dentro porque esa operación no aparece en su barra.
El caso del stop es más duro que la ruptura perdida. Las entradas que faltan se ven como menos operaciones. Los stops que se disparan en una sala con siete personas se reflejan en importes distintos en las operaciones que sí hiciste, y por eso culpaste a la pasarela.
En barras de 1 minuto, el mismo error es más sutil. Filtra por sesión en America/New_York. Si el archivo no tiene una etiqueta de sesión, el filtro es puro teatro.
Fija la sesión antes de retocar el período de cálculo
Volví a ejecutar tu estrategia del máximo de 20 días con barras diarias de horario regular, los mismos valores y las mismas fechas. Quedan seis rupturas. Esa es la cuenta paper. Las otras ocho dependían de una operación que habrías tenido que tomar a las 7:41 PM por 800 acciones. No te pases una semana ajustando un parámetro de deslizamiento paper para compensar una discrepancia de sesión.
Para cada serie de acciones, incluye tres valores booleanos en el contrato de investigación: includes_premarket, includes_afterhours, includes_odd_lots. Luego elige la sesión habilitada para la estrategia y haz que el modelo de ejecución opere en esa sesión. Si de verdad quieres operar en horario extendido, dilo y dimensiona las posiciones teniendo en cuenta las 7:41 PM: diferenciales más amplios, cancelaciones más lentas y un libro que parece una cotización pero en realidad es un solo lote.
Si un proveedor no puede decirte qué sesión usó para una fila diaria, trátala como compuesta hasta que pueda hacerlo. Pídeselo por escrito. Un gráfico web no te dará la respuesta. Y si más adelante decides que la estrategia debería operar al cierre, esa es otra carta: el cierre oficial es una subasta a la que tienes que sumarte.
Vuelve a ejecutarla con la sesión fijada. Después hablamos de las seis.
← Todos los artículos


