Estratégia de ruptura de bandas de Bollinger de vários prazos que incorpore o RSI

Autora:ChaoZhang, Data: 2024-02-21 13:59:31
Tags:

img

Resumo

Esta estratégia incorpora Bandas de Bollinger, indicador RSI e análise de vários prazos para capturar a direção das tendências de médio a longo prazo. Identifica pontos de reversão de tendência através de breakouts de Bandas de Bollinger combinados com sinais de sobrecompra / sobrevenda do RSI para entrada de baixo risco. Enquanto isso, são aplicados prazos mais longos para filtrar mercados variados e evitar ser preso.

Estratégia lógica

  1. Aplicar Bandas de Bollinger para determinar as quebras de preço. A faixa do meio é a média móvel do preço de fechamento ao longo de N dias. As bandas superior e inferior são colocadas a uma distância de um desvio padrão em cada lado da faixa do meio. A quebra acima da faixa superior sinaliza alta, enquanto a quebra abaixo da faixa inferior sinaliza baixa.

  2. Incorpore o indicador RSI para identificar os níveis de sobrecompra/supervenda. RSI acima de 70 sugere condições de sobrecompra, enquanto abaixo de 30 sugere condições de supervenda. Uma quebra de RSI acima de 70 confirma o enfraquecimento do ímpeto de alta. Uma quebra de RSI abaixo de 30 confirma o enfraquecimento do ímpeto de baixa.

  3. Quando um sinal de ruptura surge no prazo diário, ele requer confirmação adicional dos prazos de 4 horas ou mais para evitar ser preso.

Vantagens

  1. A integração de vários indicadores aumenta a estabilidade e a rentabilidade da estratégia.

  2. A inclusão do RSI mitiga as perdas de falhas.

  3. A análise multi-tempo efetivamente filtra mercados variados e evita ser preso.

  4. A determinação do sinal de ruptura otimizada (rupturas em 3 barras consecutivas) garante uma maturidade de tendência suficiente antes das entradas.

  5. O indicador de vórtice determina a direcção da tendência nascente desde o início.

Riscos

  1. A parametrização inadequada das bandas de Bollinger leva a sinais errôneos de sobrecompra/supervenda.

  2. Os valores razoáveis dos parâmetros RSI devem ser determinados separadamente para os diferentes produtos.

  3. Os sinais de ruptura podem revelar-se falsos.

  4. Manter uma margem de stop loss suficiente, por exemplo, 3 vezes o ATR.

Oportunidades de melhoria

  1. Aplicar algoritmos de aprendizagem automática para ajustar automaticamente os parâmetros das bandas de Bollinger e do RSI.

  2. Otimizar os níveis de stop loss com base em métricas de volatilidade.

  3. Incorporar um módulo de dimensionamento de posições para calibrar as posições em risco com base nas condições de mercado em evolução.

  4. Restringir a perda máxima por transação com base nos princípios de gestão do dinheiro.

  5. Avaliar a estabilidade do sinal em diferentes sessões de negociação.

Conclusão

Esta estratégia examina de forma abrangente a determinação da tendência, as condições de sobrecompra/supervenda e vários prazos para controlar os riscos, ao mesmo tempo em que procura um momento de entrada ideal para capturar tendências de médio e longo prazo de alta qualidade para perfis de risco-recompensa atraentes.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Noway0utstorm
//@version=5
strategy(title='Vortex0.71.3 + bb 3bar breakout + rsi - close hit upper or lower', shorttitle='truongphuthinh', format=format.price, precision=4,overlay = true)

length = input(20, title="Length")
mult = input(2.0, title="Multiplier")
source = close

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)

upperBand = basis + dev
lowerBand = basis - dev

isClosedBar = ta.change(time("15"))

var bool closeAboveUpperBand = false
var bool closeBelowLowerBand = false


// Vortex Indicator Settings
period_ = input.int(14, title='Period', minval=2)

VMP = math.sum(math.abs(high - low[1]), period_)
VMM = math.sum(math.abs(low - high[1]), period_)
STR = math.sum(ta.atr(1), period_)
VIP = VMP / STR
VIM = VMM / STR

//
lengthrsi = input(14, title="RSI Length")
overboughtLevel = input(70, title="Overbought Level")
oversoldLevel = input(30, title="Oversold Level")

sourcersi = close
rsiValue = ta.rsi(sourcersi, lengthrsi)

shouldShort = rsiValue > overboughtLevel
shouldLong = rsiValue < oversoldLevel




if bool(isClosedBar[1]) and bool(isClosedBar[2]) and bool(isClosedBar[3])

    if close[1] > upperBand[1] and close[2] > upperBand[2] and close[3] > upperBand[3] and VIP > 1.25 and VIM < 0.7 and rsiValue > overboughtLevel
        strategy.entry("Short", strategy.short)
        closeAboveUpperBand := false  // Reset the condition when entering a new Short position
    if close[1] < lowerBand[1] and close[2] < lowerBand[2] and close[3] < lowerBand[3] and VIP < 0.7 and VIM > 1.25 and rsiValue < oversoldLevel
        strategy.entry("Long", strategy.long)
        closeBelowLowerBand := false  // Reset the condition when entering a new Long position



if strategy.position_size > 0  // Check if there is an open Long position
    closeAboveUpperBand := close > upperBand  // Update the condition based on close price
    if closeAboveUpperBand
        strategy.close("Long",disable_alert=true)  // Close the Long position if close price is above upper band

if strategy.position_size < 0  // Check if there is an open Short position
    closeBelowLowerBand := close < lowerBand  // Update the condition based on close price
    if closeBelowLowerBand
        strategy.close("Short",disable_alert=true)  // Close the Short position if close price is below lower band

// Plots
plot(basis, color=color.orange, title="Basis")
p1 = plot(upperBand, color=color.blue, title="Upper Band")
p2 = plot(lowerBand, color=color.blue, title="Lower Band")
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

Mais.