Estrategia de ruptura de bandera de toros

El autor:¿ Qué pasa?, Fecha: 2024-02-22 16:41:04
Las etiquetas:

img

Resumen general

La estrategia de ruptura de la bandera de los toros es una estrategia de análisis técnico que identifica los patrones del gráfico de la bandera de los toros y entra en el punto de ruptura, con el objetivo de capturar el comienzo de una tendencia.

Estrategia lógica

Las principales etapas de esta estrategia son:

  1. Determine el poste de bandera: Requiere un nuevo máximo en el precio y la ruptura del canal ATR.
  2. Determinar la altura del poste: medir la distancia entre la parte superior del poste y la SMA anterior.
  3. Determinar el rango de la bandera: el fondo de la bandera es del 33% de la altura del poste como rango mínimo.
  4. Identificar el patrón de la bandera: juzgar si las últimas 3 barras están dentro del rango de la bandera.
  5. Entrada: Ir largo cuando aparece el patrón de la bandera.
  6. Salida: posición cerrada después de fijar 6 barras.

Al juzgar el asta y la bandera, la estrategia utiliza inteligentemente el indicador ATR para determinar breakouts significativos y limita estrictamente la altura de la bandera dentro del 33% de la altura del asta para evitar señales falsas excesivas. Además, requerir 3 barras consecutivas para formar la bandera mejora la confiabilidad.

Análisis de ventajas

Las principales ventajas de esta estrategia incluyen:

  1. El uso de patrones de bandera para determinar el inicio de la tendencia es un método clásico de análisis técnico con una alta tasa de éxito.
  2. ATR y las estrictas limitaciones de alcance evitan muchas señales falsas y mejoran la precisión de entrada.
  3. Fijación de bloqueos de salida de 6 bares en algunas ganancias y evita riesgos de inversión.
  4. Reglas claras, fáciles de aplicar, comprender y seguir.
  5. Puede encontrar oportunidades en diversas condiciones de mercado, flexible.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. Las banderas no pueden determinar completamente las tendencias, los fallos todavía existen.
  2. La salida de 6 bar puede ser prematura y la salida demasiado temprana.
  3. Los mercados agitados pueden producir fácilmente banderas falsas.
  4. Incapaz de controlar eficazmente el importe de una sola pérdida.

Para abordar los riesgos anteriores, podemos establecer stop losses, optimizar los mecanismos de salida para bloquear las ganancias al alcanzar cierta proporción de ganancias. También podemos filtrar con otros indicadores para evitar señales falsas en mercados agitados.

Direcciones de optimización

Algunas direcciones para optimizar la estrategia:

  1. Combine indicadores como MACD, KD para evitar señales falsas en mercados agitados.
  2. Parametrizar el multiplicador ATR, el período de salida basado en el régimen del mercado para mejorar la adaptabilidad.
  3. Establecer el stop loss de seguimiento o considerar la relación de extracción de ganancias para las salidas dinámicas.
  4. Prueba enfoques de aprendizaje automático para encontrar mejores características que determinen la altura de la bandera.
  5. Evaluar la tasa de ganancia real y la relación de ganancias, ajustar dinámicamente el tamaño de la posición.

Conclusión

En conclusión, la estrategia de ruptura de bandera alcista utiliza patrones técnicos para determinar los comienzos de tendencia, un método bastante clásico, y las reglas de entrada están rigurosamente diseñadas para filtrar muchas señales falsas.


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © smith26
//This strategy enters on a bull flag and closes position 6 bars later.  Average true range is used instead of a moving average.
//The reason for ATR instead of MA is because with volatile securities, the flagpole must stand up a noticable "distance" above the trading range---which you can't determine with a MA alone.
//This is broken up into multiple parts: Defining a flagpole, defining the pole height, and defining the flag, which will be constrained to the top third (33%) of the pole height to be considered a flag.
//@version=4
strategy("Bull Flag v1.00", overlay=true)

ATR = atr(10) //Average True Range over last 10 bars.

upperATR = ohlc4[1] + ATR[1]  //Open + High + Low + Close divided by 4, + prior ATR.  Just used here for visually plotting the ATR upper channel.
lowerATR = ohlc4[1] - ATR[1] //Open + High + Low + Close divided by 4, - prior ATR.  Just used here for visually plotting the ATR lower channel.

//uncomment these two lines to see ATR channels
plot(upperATR, color=color.orange)
plot (lowerATR, color=color.orange)

//Current close higher than previous close, and current close minus current open is greater than 3 times the previous ATR.  "3x ATR" is chosen because any less was not a noticeable distance above the trading range.
flagpole1 = close>close[1] and (close-open) > (ATR[1] * 3)
plotshape(flagpole1, text="flagpole1", style=shape.arrowdown, size=size.huge) //Plots an arrow for flagpole1 for QA testing

//Two consecutive close higer than their previous close, and current close minus PREVIOUS open is greater than 3 times the previous ATR.
flagpole2 = close>close[1] and close[1]>close[2] and (close-open[1]) > (ATR[1] * 3)
plotshape(flagpole2, text="flagpole2", style=shape.arrowdown, size=size.huge, color=color.yellow) //Plots an arrow for flagpole2 for QA testing

//Three consecutive close higer than their previous close, and current close minus open from 2 bars ago is greater than 3 times the previous ATR.
flagpole3 = close>close[1] and close[1]>close[2] and close[2]>close[3] and (close-open[2]) > (ATR[1] * 3)
plotshape(flagpole3, text="flagpole3", style=shape.arrowdown, size=size.huge, color=color.white) //Plots an arrow for flagpole3 for QA testing

//A flagpole can be any of the three definitions of flagpole.
flagpole = flagpole1 or flagpole2 or flagpole3

//This will return the number of bars since "flagpole" was true.  Not being used, but could be useful.
//since_flagpole = barssince(flagpole)

after_pole_1 = flagpole[1] //This marks the bar directly after a flagpole.  
//plotshape(after_pole_1, text="after_pole_1", style=shape.cross, size=size.large, color=color.white) //Plots a cross for after_pole_1 for QA testing
after_pole_2 = flagpole[2] //This marks the bar two bars after a flagpole.  
after_pole_3 = flagpole[3] //This marks the bar three bars after a flagpole.  

//This returns the price at the "top" of the flagpole (using close price) at the most recent occurence, 0.
pole_top = valuewhen(flagpole, close, 0)
//plot(pole_top, trackprice=true)  //plots a horizontal line at the most recent pole_top

//Measures the distance between last pole top and the previous SMA.
pole_height = pole_top - sma(close, 10)[1] 
//plot(pole_height)

//This marks 33% below the pole_top, which will be the lowest point a flag can be.
flag_bottom = pole_top - (.33 * pole_height)
//plot(flag_bottom)

//The first, second, and third bars after the pole are considered part of a flag when open and close are between the pole_top and flag_bottom
flag1 = after_pole_1 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag1, text="flag1", style=shape.flag, size=size.large, color=color.teal)
flag2 = after_pole_2 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag2, text="flag2", style=shape.flag, size=size.large, color=color.teal)
flag3 = after_pole_3 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag3, text="flag3", style=shape.flag, size=size.large, color=color.teal)

//When all three bars after a flagpole are a flag, the criteria are met and we have a "bull_flag"
//Specifically, when current bar is flag3, previous bar is flag2, and 2 bars ago is flag1, we have a bull_flag.
bull_flag = flag3 and flag2[1] and flag1[2]
plotshape(bull_flag, text="bull_flag", style=shape.flag, size=size.large, color=color.white) //Plots a flag for bull_flag for QA testing


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

if barssince(bull_flag) == 6 //close 6 bars after entry.
    strategy.close("Long")

Más.