Estrategia de alto/bajo roto

El autor:¿ Qué pasa?, Fecha: 2023-12-22 12:59:43
Las etiquetas:

img

Resumen general

La estrategia Broken High/Low es una estrategia de seguimiento de tendencias que rastrea las rupturas de precios más allá del máximo o mínimo del candelero anterior.

Estrategia lógica

Las condiciones clave para la entrada y salida determinadas por esta estrategia son:

  1. Identificar si el candelabro es verde o rojo para determinar si es una vela hacia arriba o hacia abajo vela
  2. Compruebe si la vela actual rompe el más alto o más bajo de la vela anterior
  3. Utilice promedios móviles rápidos y lentos para definir la dirección de la tendencia
  4. Ir largo cuando una vela arriba se rompe por encima de la altura de una vela abajo anterior, ir corto cuando una vela abajo se rompe por debajo de la baja de una vela arriba anterior
  5. Las condiciones de salida se activan mediante el stop loss o el trailing stop; también puede salir inmediatamente si aparece una vela de reversión

La estrategia también utiliza filtros basados en la segunda vela de reversión para evitar fallas y garantizar la fiabilidad de la señal.

Análisis de ventajas

  • Orientación estratégica clara, operaciones de fuga fáciles de entender
  • Asegura el correcto juicio de la tendencia mediante la combinación de dos medias móviles
  • La parada de trail ayuda a obtener más ganancias.
  • Los filtros de velas de inversión ayudan a evitar perseguir los máximos y matar los mínimos

Análisis de riesgos

  • Una ruptura fallida puede causar pérdidas de operaciones a muy corto plazo.
  • Mayor riesgo de ruptura falsa en los mercados de rango
  • Las medias móviles dobles pueden retrasarse, lo que conduce a errores de juicio

Medidas de control de riesgos:

  1. Seleccionar índices o índices de referencia principales para evitar el alto riesgo de las existencias individuales
  2. Optimizar los parámetros de la media móvil para mejorar la precisión del juicio
  3. Extensión razonable del intervalo de pérdida de parada para controlar la pérdida de una sola operación

Direcciones de optimización

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Prueba de diferentes combinaciones de parámetros de la media móvil
  2. Ensayos que incorporen otros indicadores técnicos para la evaluación combinada
  3. Optimización de los parámetros de los niveles de entrada y parada de pérdidas
  4. Añadir reglas de filtración cuantitativa para seleccionar el subyacente de alta calidad
  5. Incorporar algoritmos de aprendizaje automático para la optimización de parámetros adaptativos

Resumen de las actividades

La estrategia Broken High/Low es en general una estrategia madura de seguimiento de tendencias. Con la ayuda de promedios móviles para el juicio auxiliar, puede capturar cierto grado de tendencias. Los mecanismos de stop loss y trailing stop también ayudan a bloquear las ganancias.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Broken High/Low Strategy", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity)

useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy')
trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy')

fastMALength = input(5 , 'Fast MA length', group = 'Trend strength')
fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength')

slowMALength = input(10, 'Slow MA length', group = 'Trend strength')
slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength')

ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength')

useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy')
secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength')

longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings')
shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings')

fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength)
slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength)

FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters')
FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters')
FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters')
ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters')
ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters')
ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters')
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>time>=start and time<=finish?true:false
afterStartDate = time >= start and time<=finish?true:false
closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters')

trailStopMA = ta.ema(close, trailStopMALength)

isGreenCandle = close > open
isRedCandle = close < open
isBrokenHigh = close > open[1]
isPriorCandleRed = close[1] < open[1]
isPriorPriorCandleRed = close[2] < open[2]
isPriorPriorCandleGreen = close[2] > open[2]
isPriorCandleGreen = close[1] > open[1]
isBrokenLow = close < open[1]

isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh
isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow

isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false
isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false

longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled
longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA)
longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition

shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled
shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA)
shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition

if (longOpenCondition)
    strategy.entry("Long Entry", strategy.long)

if (longCloseCondition)
    strategy.close('Long Entry', 'Long Exit')

if (shortOpenCondition)
    strategy.entry("Short Entry", strategy.long)

if (shortCloseCondition)
    strategy.close('Short Entry', 'Short Exit')

if (closeTradesEOD and hour >= 14 and minute >= 30)
    strategy.close_all("EOD")

plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red)
plot(fastMA)
plot(ignoreSlowMA ? na : slowMA, linewidth = 4)

Más.