
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.
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.
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.
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.
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.
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.
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.
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.
Se ocorrer uma reversão em V, a configuração de stop loss pode ser muito radical, causando prejuízos desnecessários.
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.
É possível testar mais variedades de parâmetros de comprimento RSI para encontrar a melhor combinação de parâmetros.
É 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.
Os melhores parâmetros de stop-loss podem ser encontrados através da retrospectiva.
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.
/*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")