Estrategia de backtesting de daytrading, ¿cómo manejar el spread?

Actualmente estoy desarrollando una aplicación de comercio diario que, basada en reglas y algoritmos, compra o vende acciones, que en este momento podría comprar/vender una acción en la magnitud de 100 por día.

Estoy tratando de probar mi estrategia, pero no sé cómo manejar la diferencia entre la oferta y la demanda. Si, por ejemplo, en mi backtesting asumo que puedo comprar al precio actual, podría obtener un resultado sesgado ya que comprar al último precio supone que alguien todavía está dispuesto a vender a ese precio, lo que podría no ser el caso.

¿Hay mejores prácticas aquí? Uno de mis grandes problemas es que no tengo acceso a la profundidad histórica de pedidos para cada punto de datos, por lo que no conozco la demanda y la oferta. Aquí hay un par de opciones que he considerado (para comprar una acción):

  • Use el precio más reciente (en el mundo real, es posible que no pueda comprar a este precio)
  • Calcule el movimiento promedio entre transacciones en la acción, y agréguelo al precio más reciente y utilícelo.

Y si tuviera acceso a la profundidad del pedido:

  • Usar la oferta actual (¿Qué pasa si el volumen de esa oferta es mucho más pequeño que mi volumen?)
  • Use el promedio de la demanda y la oferta (¿Debería dar un buen valor, suponiendo que la mitad de las veces el próximo precio será la demanda actual y la mitad de las veces será la oferta?)
¿Qué tipos de órdenes usaría en la vida real y en las pruebas retrospectivas? Se ve desde su escenario de órdenes de mercado. ¿Ha considerado utilizar órdenes de stop buy y stop sell?
Sí, mi plan es usar órdenes de mercado. Pero incluso si uso órdenes de detención, ¿no tendré el mismo problema? Digamos que una acción alcanza (desde un precio más alto) $ 5,00 es mi disparador, y luego quiero comprar a $ 5,00, pero la demanda actual es de $ 5,01, por lo que no podré comprar a $ 5,00.
Las órdenes stop SON órdenes de mercado. Una orden stop normal solo significa que si el precio alcanza el punto X, la orden se envía al mercado. Con un límite de parada, la orden de límite se envía en su lugar, pero el valor predeterminado es el mercado para "órdenes de parada".
No se puede realizar una prueba retrospectiva perfecta de una estrategia sin datos históricos. E incluso entonces, no será absolutamente preciso porque no tendrá datos de marca por marca que indiquen el tamaño del volumen disponible en un momento dado.

Respuestas (3)

Sin utilizar datos de profundidad, la mejor aproximación sería una función de volatilidad y liquidez. Los pesos dependerán de tu talla. Sin ir tan lejos, el método más simple sería esperar a que el precio se negocie a través de su precio por encima del x por ciento. Esto supone que los tamaños de sus posiciones se ajustan de antemano a la liquidez del instrumento.

Esta fue mi idea original, de alguna manera calcular un "margen promedio" para una acción determinada, en función de la volatilidad y la liquidez. Probaré esto para ver si puedo encontrar un buen cálculo para el "diferencial promedio"
El problema clásico con el uso de algo como el diferencial promedio es cuando los precios son más volátiles e impactan más en los resultados, generalmente el diferencial también es más amplio y menos líquido, lo que crea un sesgo poco frecuente pero enorme, ya que todos los factores a menudo son todos simultáneamente. correlacionado.
Eso es muy cierto. Supongo que comparar la volatilidad a muy corto plazo con la volatilidad "promedio" a largo plazo podría ayudar un poco, pero no reemplaza la profundidad real. Todo se reducirá a si los cambios mediocres en el deslizamiento determinan la viabilidad de la estrategia o no.

Aconsejaría las pruebas de avance.

Supongamos que sus compras y ventas no están afectando al mercado. Eso es un error, pero consciente. Permanecerá pequeño mientras usted permanezca pequeño.

Lo que puede hacer entonces es simular la ejecución real de la estrategia. Tendría cuidado no solo de seleccionar aleatoriamente días o períodos para ejecutar una simulación, sino también de definir las condiciones de mercado que desea representar. Toro/oso: interrupciones, trimestrales, anuales, etc.

Si su(s) método(s) e hipótesis sobreviven a la prueba directa, esa es una prueba mucho más sólida que la prueba retrospectiva. No importa cuán cuidadoso sea el backtesting, siempre terminas (de alguna manera) validando tus hipótesis con los mismos datos que se usaron para crearlas, que es la negligencia científica más común y peligrosa (en mi humilde opinión).

Como observa correctamente, realmente necesita acceso a los datos de profundidad de pedidos para evitar una variedad de sesgos relacionados con el diferencial/liquidez. Se recomienda encarecidamente intentar obtener esos datos lo antes posible, ya que es excepcionalmente difícil realizar una prueba retrospectiva precisa de cualquier estrategia comercial sin ellos. Si / cuando tiene datos de profundidad de pedido, necesita usar los supuestos más pesimistas y cercanos al mundo real cuando ejecuta su modelo:

  • Siempre debe permitir que su estrategia solo compre la oferta actual
  • Solo permitirle comprar/vender la liquidez que estaba disponible
  • Si su estrategia sugirió que los precios más profundos en el libro de órdenes también fueran compras/ventas, también debería comprarlos en las liquidezes relevantes
  • Debe modelar las fluctuaciones de sus fondos a través de Kelly o cualquier sistema de administración de dinero que esté utilizando para asegurarse de mantenerse solvente durante el período de tiempo utilizando dicha estrategia.

Dos citas más que siempre vale la pena recordar cuando se realiza una prueba retrospectiva de cualquier estrategia:

"Nunca he visto un mal backtest"

--Dimitris Melas

"El primer principio es que no debes engañarte a ti mismo, y eres la persona más fácil de engañar"

--Richard Feynman

Gracias, intentaré ver si también puedo obtener los datos de profundidad, pero creo que será difícil.