Indicador RSI combinado com estratégia de negociação de Bandas de Bollinger


Data de criação: 2023-12-21 11:17:19 última modificação: 2023-12-21 11:17:19
cópia: 0 Cliques: 809
1
focar em
1623
Seguidores

Indicador RSI combinado com estratégia de negociação de Bandas de Bollinger

Uma visão geral da estratégia

Esta estratégia é chamada de estratégia de stop loss do RSI Bollinger Bands TP/SL. Esta estratégia combina o RSI com o indicador de Bollinger Bands para posicionar a tendência e realizar transações de ruptura.

2. Princípios de estratégia

1. O RSI determina a reversão

O indicador RSI pode determinar se uma ação está em um intervalo de overbought e oversold. Quando o RSI é maior do que a linha de overbought definida, é um overbought, quando é menor do que a linha de overbought definida, é um oversold. Esta estratégia define a linha de overbought como 50 e a linha de oversold como 50.

2. Tendências de julgamento de Brin.

A faixa de Brin calcula a diferença padrão do preço das ações e obtém a trajetória ascendente e descendente das ações. A trajetória ascendente é a linha de resistência e a trajetória descendente é a linha de suporte.

3. A combinação do RSI com o indicador de correlação

Quando o indicador RSI aparece um sinal de inversão inferior, enquanto o preço da ação quebra a faixa de Brin para baixo, considere que o mercado se reverte de baixo para cima, fazendo mais; Quando o indicador RSI aparece um sinal de inversão superior, enquanto o preço da ação cai acima da faixa de Brin, considere que o mercado se reverte de cima para baixo, fazendo o zero.

Três, vantagens estratégicas

1. Filtragem de duplo indicador para aumentar a precisão do sinal

Os indicadores RSI e Brinks são usados para determinar tendências e pontos de reversão. Usados em conjunto, eles podem melhorar a precisão de identificação de verdadeiros sinais de compra e venda e evitar falsas rupturas.

2. Controle de risco do mecanismo de suspensão

A estratégia estabelece um ponto de parada e um ponto de parada para o preço de entrada.(1 + Stop Loss Ratio), o ponto de parada é o preço de entrada(1- Stop Loss Ratio); por outro lado, o shorting pode ser usado para bloquear o lucro, evitar perdas e controlar o risco.

3. Direção de compra e venda personalizada

A estratégia pode optar por apenas fazer mais, apenas fazer menos ou negociar em dois sentidos, o usuário pode escolher diferentes direções de acordo com a situação do mercado, controlando o risco com flexibilidade.

Riscos estratégicos

1. Parâmetros sensíveis à faixa de Bryn

O tamanho padrão da faixa de brinquedos afeta a largura da faixa de brinquedos, afetando a geração de sinais de negociação. Se os parâmetros forem configurados incorretamente, um grande número de sinais errados pode ser gerado.

2. Risco de perda de estacionamento

Se ocorrer uma reversão em V, a configuração de stop loss pode ser muito radical, causando prejuízos desnecessários.

3. Parâmetros sensíveis ao RSI

Os parâmetros do RSI também afetam a forma da curva RSI. Se os parâmetros do RSI estiverem erroneamente definidos, a precisão do sinal de inversão do RSI será reduzida.

Cinco, estratégias de otimização

1. Optimizar o RSI

É possível testar mais variedades de parâmetros de comprimento RSI para encontrar a melhor combinação de parâmetros.

2. Optimizar os parâmetros da faixa de Bryn

É possível testar mais tamanhos de faixa de Bryn e parâmetros de desvio padrão para encontrar a melhor combinação de parâmetros.

3. Teste diferentes proporções de stop loss

Os melhores parâmetros de stop-loss podem ser encontrados através da retrospectiva.

VI. Conclusão

Esta estratégia utiliza um conjunto de indicadores RSI e indicadores de Brinch para determinar tendências e reversões, juntamente com o controle de risco do mecanismo de stop-loss, que pode identificar automaticamente os pontos de compra e venda e parar o stop-loss a tempo. A estratégia também possui alguns riscos e pode ser melhorada principalmente por meio de métodos como otimização de parâmetros.

Código-fonte da estratégia
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BigCoinHunter

//@version=5
strategy(title="RSI_Boll-TP/SL", overlay=true, 
     pyramiding=0, default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, initial_capital=1000, 
     currency=currency.USD, commission_value=0.05, 
     commission_type=strategy.commission.percent, 
     process_orders_on_close=true)

//----------- get the user inputs --------------

//---------- RSI -------------
price = input(close, title="Source")

RSIlength = input.int(defval=6,title="RSI Length") 
RSIoverSold = input.int(defval=50, title="RSI OverSold", minval=1)
RSIoverBought = input.int(defval=50, title="RSI OverBought", minval=1)

//------- Bollinger Bands -----------
BBlength = input.int(defval=200, title="Bollinger Period Length", minval=1)
BBmult = input.float(defval=2.0, minval=0.001, maxval=50, step=0.1, title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
fill(plot1=p1, plot2=p2, title="Bollinger BackGround", color=color.new(color.aqua,90), fillgaps=false, editable=true)

//---------- input TP/SL ---------------
tp = input.float(title="Take Profit:", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss:  ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01

longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")

//---------- backtest range setup ------------
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay     = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth   = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear    = input.int(defval = 2042, title = "To Year", minval = 2010)

//------------ time interval setup -----------
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish    = timestamp(toYear, toMonth, toDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//------- define the global variables ------
var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
//--------- Colors ---------------

TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na
//bgcolor(switch2?(color.new(TrendColor,50)):na)


//--------- calculate the input/output points -----------
longProfitPrice  = strategy.position_avg_price * (1 + tp)     // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl)        // sl -> stop loss percentage

shortProfitPrice  = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)


//---------- RSI + Bollinger Bands Strategy -------------
vrsi = ta.rsi(price, RSIlength)

rsiCrossOver = ta.crossover(vrsi, RSIoverSold)
rsiCrossUnder = ta.crossunder(vrsi, RSIoverBought)

BBCrossOver = ta.crossover(source, BBlower)
BBCrossUnder = ta.crossunder(source, BBupper)

if (not na(vrsi))

    if rsiCrossOver and BBCrossOver
        long := true
        
    if rsiCrossUnder and BBCrossUnder
        long := false

//------------------- determine buy and sell points ---------------------
buySignall = window() and long  and (not stoppedOutLong)
sellSignall = window() and (not long)  and (not stoppedOutShort)

//---------- execute the strategy -----------------
if(longEntry and shortEntry)
    if long 
        strategy.entry("LONG", strategy.long, when = buySignall, comment = "ENTER LONG")
        stoppedOutLong := true
        stoppedOutShort := false
    else 
        strategy.entry("SHORT", strategy.short, when = sellSignall, comment = "ENTER SHORT")
        stoppedOutLong  := false
        stoppedOutShort := true

else if(longEntry)
    strategy.entry("LONG", strategy.long,  when = buySignall)
    strategy.close("LONG", when = sellSignall)
    if long 
        stoppedOutLong := true
    else
        stoppedOutLong  := false

else if(shortEntry)
    strategy.entry("SHORT", strategy.short, when = sellSignall)
    strategy.close("SHORT", when = buySignall)
    if not long
        stoppedOutShort := true
    else
        stoppedOutShort := false
    

//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment="Long TP/SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment="Short TP/SL Trigger")

else if(tp>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, comment="Long TP Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, comment="Short TP Trigger")
        
else if(sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG",  stop=longStopPrice, comment="Long SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT",  stop=shortStopPrice, comment="Short SL Trigger")