Backtesting con mayor precisión gracias a la Ampliación de Barras

May 30, 2022

Los poseedores de cuentas Premium pueden ahora obtener ejecuciones de órdenes más realistas en su backtesting de estrategias utilizando la opción Ampliación de Barra. Esta herramienta utiliza la inspección entre barras para obtener una mayor granularidad en el movimiento de los precios dentro de cada barra, lo que permite realizar ejecuciones de órdenes más precisas. Cuando se selecciona, el modo Ampliación de Barras sustituye las suposiciones que el emulador de brokers debe hacer sobre el movimiento de los precios únicamente con los valores OHLC del histórico de barras.

El marco temporal intrabarra utilizado con la Ampliación de Barras se ajusta dinámicamente con el marco temporal del gráfico. Esta tabla enumera el marco temporal entre barras utilizado para los marcos temporales de los gráficos progresivamente más altos:

Marco temporal del gráfico, T Marco temporal intrabarra utilizado
1S < T < 30S 1S
30S <= T < 5 5S
5 <= T < 30 15S
30 <= T < 60 1
60 <= T < 240 5
240 <= T < D 15
D <= T < W 60
W <= T < 2W 120
T >= 2W D

Tabla 1. Plazos intrabarras utilizados

Este es un ejemplo de una estrategia que utiliza una orden de stop sin utilizar la opción Ampliación de Barras:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = false)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

El emulador del broker coloca una orden de stop en la barra #10381 y llena una orden con un precio de 157,0 en la siguiente barra tan pronto como se cumpla la condición de stop = 157.0. El emulador del broker estima que, dentro de la propia barra, el precio pasa de «close» a «low», luego a «high» (desencadenando la entrada), a continuación a «close». Después de algunas barras (11 días para el marco temporal actual), se activa la condición de salida de la posición con el stop price = 156.0:

Cuando la Ampliación de Barras está activada (parámetro use_bar_magnifier = true), los precios de salida y entrada no se modifican; sin embargo, la salida de la posición se produce dentro de la misma barra en la que se produjo la entrada:

//@version=5
strategy("bar_magnifier_demo", overlay = true, use_bar_magnifier = true)

if bar_index  == 10381
    strategy.entry("Long", strategy.long, stop = 157.0)
    strategy.exit("Exit", stop = 156.0)

Si comprobamos el gráfico del marco temporal inferior para el mismo símbolo (un gráfico de 60 minutos, según la tabla del marco temporal intrabarra) y encontramos el rango de tiempo correspondiente a la barra 10382, podemos ver que en el marco temporal horario, después de alcanzar 157,0 y activar la entrada, el precio baja por debajo de 156,0, satisfaciendo la condición stop = 156.0:

Con la Ampliación de Barras activada, el emulador del broker tiene acceso a los cambios de precios de los marcos temporales más bajos durante el backtesting, lo que hace que su comportamiento sea más similar a lo que ocurriría durante la prueba a futuro de la estrategia para el mismo periodo de tiempo.

Este es un ejemplo de una estrategia que utiliza marcos temporales más bajos para conseguir ejecuciones más precisas en las órdenes limitadas y stop:

//@version=5
strategy(
 title                  =   "Magnifier On",
 overlay                =   true, 
 calc_on_order_fills    =   true,
 calc_on_every_tick     =   true,
 precision              =   3, 
 default_qty_type       =   strategy.cash, 
 currency               =   currency.USD, 
 default_qty_value      =   1000, 
 initial_capital        =   1000,
 use_bar_magnifier      =   true)

trailPoints = input.int(150, "Trail Points (in ticks)")
trailOffset = input.int(100, "Trail Offset (in ticks)")
stopSize    = input.int(300, "Stop Offset (in ticks)")

longCondition = bar_index % 25 == 0 and not (strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index)

if (longCondition)
    strategy.entry("Long", strategy.long)

strategy.exit("Exit", loss = stopSize, trail_points = trailPoints, trail_offset = trailOffset)

Con la opción de la Ampliación de Barras activada, los resultados de la estrategia se acercan más a lo que serían en tiempo real. Los beneficios de nuestra estrategia de prueba son un 50% peores cuando está activada, lo cual es desalentador para la propia estrategia, pero muestra lo importante que podría ser utilizar datos de plazos inferiores para obtener los datos de backtesting más precisos:

La opción de la Amplificación de Barras se puede conmutar activando la entrada correspondiente en la ventana «Ajustes/Propiedades» de la estrategia:

Después de desactivar la opción, la estrategia se vuelve a calcular con la antigua lógica, mostrándonos una información menos precisa sobre el comportamiento de la estrategia:

Para mantenerse informado de las nuevas características de Pine, esté atento a las Notas de Publicación del Manual de Usuario. La cuenta de PineCoders también difunde actualizaciones desde su canal Squawk Box Telegram, su cuenta de Twitter y desde el chat público «Pine Script™ Q&A» en TradingView.

Esperamos que estas mejoras le resulten útiles. Por favor, siga enviándonos sus comentarios. Construimos TradingView para nuestros usuarios y nos encanta saber de usted.

Look first Then leap

TradingView está hecho para usted, asegúrese de aprovechar al máximo nuestras increíbles funciones
Abrir gráfico