Estrategia de reversión de ruptura de tres y cuatro barras

El autor:¿ Qué pasa?, Fecha: 2023-12-18 10:39:53
Las etiquetas:

img

Resumen general

La estrategia Three Bar y Four Bar Breakout Reversion identifica tres o cuatro barras de línea K con un fuerte impulso, y toma operaciones contra tendencia después de que varias barras K de pequeño rango forman niveles de soporte / resistencia y surgen señales de reversión. Pertenece a la estrategia de reversión media.

Estrategia lógica

La lógica central de identificación de esta estrategia incluye:

  1. Reconocer las barras de gran alcance (Gap Bars): Break 1.5 x ATR, con un porcentaje de cuerpo superior al 65%. Se considera que tienen un fuerte impulso.

  2. Reconocer barras de bajo rango (barras de recolección): Una o dos barras de pequeño rango posteriores después de las barras de brecha, con niveles altos / bajos cercanos a los de las barras de brecha. Representan un impulso y una consolidación desacelerados, formando niveles de soporte / resistencia.

  3. Reconocer las barras de señal de reversión: si una barra rompe el alto / bajo de las barras anteriores después de la consolidación, se puede considerar una señal de reversión.

  4. Stop Loss y Take Profit: Establezca el stop loss por debajo/por encima de los puntos bajos/altos de Gap Bar.

Análisis de ventajas

Las principales ventajas de esta estrategia:

  1. Identificar tendencias y reversiones utilizando la acción del precio en bruto, sin necesidad de indicadores.

  2. Las normas estrictas sobre las barras de diferencia y las barras de recopilación garantizan la exactitud en la captura de las tendencias y consolidaciones reales.

  3. Juzgar las barras de inversión por los cuerpos reduce las señales falsas.

  4. Cada operación sólo toma 3-4 barras.

  5. Las reglas claras sobre stop loss y take profit facilitan la gestión del riesgo.

Análisis de riesgos

Los principales riesgos:

  1. Los parámetros sueltos aumentan las señales falsas y pierden operaciones.

  2. Vulnerable a las fugas falsas y incapaz de filtrar todas las señales falsas.

  3. El riesgo de quedar atrapado en las consolidaciones después de los intentos fallidos de fuga.

  4. Un amplio rango de pérdidas de parada significa grandes pérdidas en ocasiones cuando están atrapados.

Para reducir los riesgos:

  1. Optimizar los parámetros para la identificación de barras de separación y barras de recopilación.

  2. Añadir filtros como barras de confirmación antes de ingresar posiciones.

  3. Optimizar los algoritmos de stop loss para hacerlos más adaptables.

Direcciones de optimización

Direcciones principales de optimización:

  1. Se añaden filtros compuestos para evitar falsas rupturas, por ejemplo, que requieren un aumento de volumen.

  2. Combinar con medias móviles, tomando señales sólo cuando se rompen los niveles MA clave.

  3. Requerir un acuerdo en múltiples plazos antes de entrar en operaciones.

  4. Ajustar dinámicamente los objetivos de ganancia en función de la volatilidad del mercado y la preferencia de riesgo.

  5. Combinar con el sistema de identificación del régimen de mercado, sólo habilitar la estrategia en entornos de tendencia.

Estas optimizaciones pueden mejorar aún más la estabilidad y la rentabilidad.

Conclusión

La estrategia Three Bar y Four Bar Breakout Reversion tiene como objetivo capturar movimientos de tendencia de alta calidad y operaciones de reversión. Tiene la ventaja de períodos de retención cortos y alta frecuencia. También hay riesgos inherentes que deben reducirse a través de la optimización continua. Al identificar eficazmente las señales de tendencia y reversión autónomas de la acción del precio en bruto, esta estrategia justifica una mayor investigación y aplicación.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Three (3)-Bar and Four (4)-Bar Plays Strategy", shorttitle="Three (3)-Bar and Four (4)-Bar Plays Strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 1, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 1, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

garBarSetting1 = input(defval = 1.5, minval = 0.0, maxval = 100.0, title = "Gap Bar Size", type = input.float)
garBarSetting2 = input(defval = 0.65, minval = 0.0, maxval = 100.0, title = "Gap Bar Body Size", type = input.float)
TopSetting = input(defval = 0.10, minval = 0.0, maxval = 100.0, title = "Bull Top Bar Size", type = input.float)

profitMultiplier = input(defval = 2.0, minval = 1.0, maxval = 100.0, title = "Profit Multiplier", type = input.float)

// ========== 3-Bar and 4-Bar Play Setup ==========
barSize = abs(high - low)
bodySize = abs(open - close)

gapBar = (barSize > (atr(1000) * garBarSetting1)) and (bodySize >= (barSize * garBarSetting2))  // find a wide ranging bar that is more than 2.5x the size of the average bar size and body is at least 65% of bar size

bullTop = close > close[1] + barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bull bar)
bullTop2 = close > close[2] + barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bear bar)
bearTop = close < close[1] - barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bull bar)
bearTop2 = close < close[2] - barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bear bar)

collectingBarBull = barSize < barSize[1] / 2 and low > close[1] - barSize[1] / 2 and bullTop  // find a collecting bull bar
collectingBarBear = barSize < barSize[1] / 2 and high < close[1] + barSize[1] / 2 and bearTop  // find a collecting bear bar
collectingBarBull2 = barSize < barSize[2] / 2 and low > close[2] - barSize[2] / 2 and bullTop2  // find a second collecting bull bar
collectingBarBear2 = barSize < barSize[2] / 2 and high < close[2] + barSize[2] / 2 and bearTop2  // find a second collecting bear bar

triggerThreeBarBull = close > close[1] and close > close[2] and high > high[1] and high > high[2]  // find a bull trigger bar in a 3 bar play
triggerThreeBarBear = close < close[1] and close < close[2] and high < high[1] and high < high[2]  // find a bear trigger bar in a 3 bar play
triggerFourBarBull = close > close[1] and close > close[2] and close > close[3] and high > high[1] and high > high[2] and high > high[3]  // find a bull trigger bar in a 4 bar play
triggerFourBarBear = close < close[1] and close < close[2] and close < close[3] and high < high[1] and high < high[2] and high < high[3]  // find a bear trigger bar in a 4 bar play

threeBarSetupBull = gapBar[2] and collectingBarBull[1] and triggerThreeBarBull  // find 3-bar Bull Setup
threeBarSetupBear = gapBar[2] and collectingBarBear[1] and triggerThreeBarBear  // find 3-bar Bear Setup
fourBarSetupBull = gapBar[3] and collectingBarBull[2] and 
   collectingBarBull2[1] and triggerFourBarBull  // find 4-bar Bull Setup
fourBarSetupBear = gapBar[3] and collectingBarBear[2] and 
   collectingBarBear2[1] and triggerFourBarBear  // find 4-bar Bear Setup

labels = input(title="Show Buy/Sell Labels?", type=input.bool, defval=true)

plotshape(threeBarSetupBull and labels, title="3-Bar Bull", text="3-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(threeBarSetupBear and labels, text="3-Bar Bear", title="3-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
plotshape(fourBarSetupBull and labels, title="4-Bar Bull", text="4-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(fourBarSetupBear and labels, text="4-Bar Bear", title="4-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

alertcondition(threeBarSetupBull or threeBarSetupBear or fourBarSetupBull or fourBarSetupBear, title="3-bar or 4-bar Play", message="Potential 3-bar or 4-bar Play")
float sl = na
float tp = na
sl := nz(sl[1], 0.0)
tp := nz(tp[1], 0.0)
plot(sl==0.0?na:sl,title='SL', color = color.red)
plot(tp==0.0?na:tp,title='TP', color = color.green)
if (true)
    if threeBarSetupBull and strategy.position_size <=0
        strategy.entry("3 Bar Long", strategy.long, when=threeBarSetupBull)
        sl :=low[1]
    if threeBarSetupBear and strategy.position_size >=0
        strategy.entry("3 Bar Short", strategy.short, when=threeBarSetupBull)
        sl :=high[1]
    if fourBarSetupBull and strategy.position_size <=0
        strategy.entry("4 Bar Long", strategy.long, when=fourBarSetupBull)
        sl :=min(low[1], low[2])
    if fourBarSetupBear and strategy.position_size >=0
        strategy.entry("4 Bar Short", strategy.short, when=fourBarSetupBear)
        sl :=max(high[1], high[2])

if sl !=0.0
    if strategy.position_size > 0
        tp := strategy.position_avg_price + ((strategy.position_avg_price - sl) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)

    if strategy.position_size < 0
        tp := strategy.position_avg_price - ((sl - strategy.position_avg_price) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)

Más.