Estrategia de prueba de retroceso de rotor alto bajo

El autor:¿ Qué pasa?, Fecha: 2023-11-27 15:37:13
Las etiquetas:

img

Resumen general

La estrategia High Low Breaker Backtest es una estrategia de seguimiento de tendencias que utiliza los máximos y mínimos históricos de una acción para determinar si el precio se rompe de estos rangos altos-bajos. Calcula el precio más alto y el precio más bajo durante un cierto período, y genera señales de compra cuando el precio del período actual excede el precio más alto durante un período reciente, y señales de venta cuando el precio se rompe por debajo del precio más bajo durante un período reciente. Como un tipo de estrategia de seguimiento de tendencias, puede capturar algunas características de tendencia de los precios de las acciones y tiene valor práctico para el comercio en vivo.

Estrategia lógica

La lógica básica de esta estrategia es calcular el precio más alto y el precio más bajo en un cierto número de barras (default 50 barras). Al calcular los precios más altos / más bajos, permite usar precios cerrados o precios altos / bajos reales (default para usar precios altos / bajos). Luego verifica si el precio de cierre o el precio alto del barro actual excede el precio más alto en el período reciente. Si es así y ha sido más de un número mínimo de barras (default 30 barras) desde la última barra de precios más altos, genera una señal de compra. Del mismo modo, si el precio de cierre o el precio bajo del barro actual rompe el precio más bajo en el período reciente y un número mínimo de barras desde el último precio más bajo pasado, genera una señal de venta.

Al generar señales de compra, la estrategia entra en posiciones largas a ese precio, con un precio de stop loss y un precio de take profit establecido.

Análisis de ventajas

Esta estrategia de backtest de alta y baja interruptor tiene las siguientes ventajas:

  1. La lógica es simple y fácil de entender/implementar.
  2. Puede capturar algunas características de tendencia de los precios de las acciones.
  3. Los parámetros se pueden optimizar para encontrar las mejores combinaciones de parámetros.
  4. Construido en stop loss y tomar control de beneficios riesgo.
  5. Las visualizaciones facilitan en gran medida el ajuste de parámetros y el análisis de resultados.

Análisis de riesgos

Esta estrategia también tiene algunos riesgos:

  1. Sujeto a múltiples intercambios y exceso de operaciones.
  2. Posiciones abiertas con frecuencia cuando el precio oscila.
  3. Se pierden oportunidades de tendencia importantes si los parámetros no se establecen correctamente.
  4. Sin tener en cuenta la frecuencia y magnitud de las fluctuaciones de precios.
  5. No hay validación de la señal con otros indicadores.

Los siguientes aspectos pueden ayudar a mitigar estos riesgos:

  1. Reducir la distancia de pérdida de parada para aumentar el tiempo de espera.
  2. Añadir más criterios de entrada para evitar entradas frecuentes.
  3. Optimice los parámetros para encontrar las combinaciones óptimas.
  4. Añadir las condiciones del filtro con otros indicadores.

Direcciones de optimización

Esta estrategia puede mejorarse de las siguientes maneras:

  1. Optimización de parámetros mediante pruebas más sistemáticas.
  2. Añadir filtros de señal con otros indicadores, por ejemplo, medias móviles.
  3. Considerar la volatilidad de los precios utilizando ATR para adaptar los umbrales de ruptura.
  4. Diferenciar entre tendencias y mercados oscilantes para adaptar los parámetros.
  5. Mejorar las reglas de dimensionamiento de posiciones, por ejemplo, dejar de abrir nuevas posiciones después de una pérdida significativa.

Resumen de las actividades

En resumen, la Estrategia de prueba de retroceso de alta baja es una estrategia simple y práctica de seguimiento de tendencias. Genera señales comerciales basadas en precios de ruptura periódicos más altos / más bajos. La estrategia tiene ventajas como la simplicidad, el seguimiento de tendencias y la optimización de parámetros, pero también riesgos como el exceso de negociación e incapacidad para manejar mercados oscilantes. Se pueden hacer optimizaciones adicionales en torno a parámetros, filtros de señal, tamaño de posición, etc. para mejorar su rendimiento.


/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)

// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100


candlesBack = input(title="Number of candles back",  defval=50)
useHighAndLows =  input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum =  input(title="Number of candles back to ignore for last high/low",  defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)

getIndexOfLowestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] <= current
            index := i
            current := series[i]
    index

getIndexOfHighestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] >= current
            index := i
            current := series[i]
    index

indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)

max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]

barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange

isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)

alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")

if high > max 
    max := high
    barsSinceLastHigh := 0

if low < min
    min := low
    barsSinceLastLow := 0 

plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)

// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)

goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)

strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)

strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
        
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)


Más.