Estratégia de reversão de ruptura de três bares e quatro bares

Autora:ChaoZhang, Data: 2023-12-18 10:39:53
Tags:

img

Resumo

A estratégia de reversão de ruptura de três barras e quatro barras identifica três ou quatro barras de linha K com forte impulso e realiza negociações contra-tendência depois que várias barras K de pequeno intervalo formam níveis de suporte / resistência e surgem sinais de reversão.

Estratégia lógica

A lógica central de identificação desta estratégia inclui:

  1. Reconhecer barras de grande alcance (Gap Bars): Break 1,5 x ATR, com uma percentagem de corpo superior a 65%.

  2. Reconhecer barras de baixo intervalo (Collecting Bars): Uma ou duas barras de pequeno intervalo subsequentes seguindo as Gap Bars, com níveis altos/baixos próximos dos Gap Bars. Eles representam a desaceleração do ímpeto e a consolidação, formando níveis de suporte/resistência.

  3. Reconhecer barras de sinal de reversão: se uma barra quebra o alto / baixo das barras anteriores após a consolidação, pode ser considerada um sinal de reversão.

  4. Stop loss e take profit: definir stop loss abaixo/acima dos pontos mais baixos/mais altos da Gap Bar.

Análise das vantagens

As principais vantagens desta estratégia:

  1. Identificar tendências e reversões utilizando a ação bruta dos preços, sem necessidade de indicadores.

  2. Regras rigorosas relativas às barras de diferença e às barras de recolha garantem a precisão na captação das tendências e das consolidações reais.

  3. Julgar as barras de inversão por corpos reduz os falsos sinais.

  4. Cada troca leva apenas 3-4 barras.

  5. Regras claras sobre stop loss e take profit facilitam a gestão do risco.

Análise de riscos

Os principais riscos:

  1. Os parâmetros soltos aumentam os sinais falsos e as operações perdedoras.

  2. Vulnerável a falsas fugas e incapaz de filtrar todos os sinais falsos.

  3. Risco de ficarem presos em consolidações após tentativas fracassadas de fuga.

  4. Largo intervalo de stop loss significa grandes perdas ocasionalmente quando presos.

Para reduzir os riscos:

  1. Otimizar os parâmetros para a identificação das barras de separação e de recolha.

  2. Adicionar filtros como barras de confirmação antes de inserir posições.

  3. Otimizar algoritmos de stop loss para torná-los mais adaptáveis.

Orientações de otimização

Principais direcções de otimização:

  1. Adicionar filtros compostos para evitar falhas, por exemplo, que exigem um aumento do volume.

  2. Combinar com as médias móveis, tomando apenas sinais quando os níveis MA principais são quebrados.

  3. Exigir acordo em vários prazos antes de entrar em negociações.

  4. Ajustar dinamicamente as metas de lucro com base na volatilidade do mercado e na preferência de risco.

  5. Combinar com o sistema de identificação do regime de mercado, apenas habilitar a estratégia em ambientes de tendências.

Estas otimizações podem melhorar ainda mais a estabilidade e a rendibilidade.

Conclusão

A estratégia Three Bar e Four Bar Breakout Reversion visa capturar movimentos de tendência de alta qualidade e negociações de reversão. Tem a vantagem de períodos de retenção curtos e alta frequência. Há também riscos inerentes que precisam ser reduzidos através de otimização contínua. Ao identificar efetivamente os sinais de tendência e reversão autocontidos da ação do preço bruto, essa estratégia garante mais pesquisa e aplicação.


/*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)

Mais.