RSI Estratégia dinâmica de stop loss e take profit

Autora:ChaoZhang, Data: 2024-03-19
Tags:

img

Estratégia geral: A estratégia é baseada na relação entre o indicador RSI e o preço, otimizando o desempenho comercial ajustando dinamicamente os níveis de take profit e stop loss. A ideia principal da estratégia é utilizar as características de sobrecompra e sobrevenda do indicador RSI, combinadas com mudanças no preço e volume de negociação, para tirar lucro em tempo hábil quando o RSI diverge, controlando o risco através de stop loss dinâmico.

Princípio de estratégia:

  1. Calcular o valor do indicador RSI e determinar os limiares de sobrecompra e sobrevenda com base nos parâmetros de entrada.
  2. Julgue se uma formação de pico (isPeak) ou formação de fundo (isBottom) aparece comparando o valor do RSI atual com os valores do RSI das velas anteriores.
  3. Quando aparece uma formação de pico, se o preço atual for superior ao máximo do pico anterior e o volume de negociação for menor do que o volume de negociação do pico anterior, é gerado um sinal de venda.
  4. Quando aparece uma formação de fundo, se o preço atual for inferior ao mínimo do fundo anterior e o volume de negociação for menor do que o volume de negociação do fundo anterior, é gerado um sinal de compra.
  5. Após um sinal de compra ser desencadeado, tire lucro quando o preço voltar para o mínimo do fundo anterior ou o volume de negociação for menor do que o volume de negociação do fundo anterior.
  6. Após o desencadeamento de um sinal de venda, tire lucro quando o preço se recuperar para o máximo do pico anterior ou o volume de negociação for menor do que o volume de negociação do pico anterior.
  7. Após a abertura de uma posição, definir o preço de stop loss numa certa percentagem (2%) do preço de abertura para controlar o risco.

Vantagens estratégicas:

  1. Ao tirar lucro dinamicamente, os lucros podem ser bloqueados em tempo hábil no início de uma inversão de tendência, melhorando os retornos da estratégia.
  2. Usar alterações no volume de negociação como condição de julgamento auxiliar pode filtrar efetivamente os falsos sinais e melhorar a precisão do sinal.
  3. A definição de stop losses pode controlar eficazmente a exposição ao risco de uma única transação e reduzir os drawdowns da estratégia.
  4. Os parâmetros são ajustáveis e aplicáveis a diferentes ambientes de mercado e variedades de negociação.

Riscos estratégicos:

  1. Em um mercado lateral, o indicador RSI pode gerar sinais de sobrecompra e sobrevenda frequentes, fazendo com que a estratégia produza mais sinais falsos.
  2. A definição de stop loss pode fazer com que a estratégia experimente grandes drawdowns a curto prazo.
  3. O desempenho da estratégia em mercados em tendência pode não ser tão bom como as estratégias que seguem tendências.

Direcção de otimização:

  1. Considere a introdução de outros indicadores técnicos, tais como MACD, Bandas de Bollinger, etc., para melhorar a fiabilidade dos sinais.
  2. Otimizar os limiares para a obtenção de lucros e para a suspensão de perdas e ajustá-los dinamicamente de acordo com as características das diferentes variedades e do ambiente de mercado.
  3. Adicionar um módulo de gestão de posições para ajustar o tamanho da posição em função da volatilidade do mercado e do estado do risco da conta.
  4. Realizar a otimização de parâmetros na estratégia para encontrar a combinação de parâmetros ideal.

Resumo: A estratégia RSI Dynamic Stop Loss and Take Profit estratégia de tirar lucro em tempo hábil no início de uma tendência, utilizando a relação de divergência entre o indicador RSI e o preço, combinado com mudanças no volume de negociação, enquanto estabelece perdas de parada dinâmicas para controlar o risco. As vantagens desta estratégia são que pode bloquear lucros no início de uma inversão de tendência, reduzir os drawdowns da estratégia e tem uma certa adaptabilidade. No entanto, em um mercado lateral, a estratégia pode gerar mais sinais falsos, por isso é necessário introduzir outros indicadores técnicos e otimizar os limiares de take profit e stop loss para melhorar o desempenho da estratégia. Além disso, adicionar gestão de posição e otimização de parâmetros também são direções importantes para melhorar ainda mais a estabilidade e os retornos da estratégia.


/*backtest
start: 2024-03-11 00:00:00
end: 2024-03-15 09:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RMM_byMR", overlay=true)

// RSI uzunluğu girişi
rsiLength = input(14, title="RSI Uzunluğu")

// Tepe ve dip seviyeleri için girişler
overboughtLevel = input(70, title="Aşırı Alım Seviyesi")
oversoldLevel = input(30, title="Aşırı Satım Seviyesi")

// RSI hesaplama
rsiValue = rsi(close, rsiLength)

// Son tepe noktalarını tespit etme // Son dip noktalarını tespit etme
isPeak = rsiValue[2] > overboughtLevel and rsiValue[2] > rsiValue[1] and rsiValue[2] > rsiValue[3] and (rsiValue[1] > rsiValue or rsiValue[3] > rsiValue[4])
isBottom = rsiValue[2] < oversoldLevel and rsiValue[2] < rsiValue[1] and rsiValue[2] < rsiValue[3] and (rsiValue[1] < rsiValue or rsiValue[3] < rsiValue[4])

// Önceki tepe noktalarını tespit etme
prevPeak = valuewhen(isPeak, rsiValue[2], 1)
prevPeakHighPrice = valuewhen(isPeak, high[2], 1)
volumePeak = valuewhen(isPeak, volume[1]+volume[2]+volume[3], 1)
prevPeakBarIndex = valuewhen(isPeak, bar_index, 1)

// Önceki dip noktalarını tespit etme
prevBottom = valuewhen(isBottom, rsiValue[2], 1)
prevBottomLowPrice = valuewhen(isBottom, low[2], 1)
volumeBottom = valuewhen(isBottom, volume[1]+volume[2]+volume[3], 1)
prevBottomBarIndex = valuewhen(isBottom, bar_index, 1)

// Tepe noktasında satış sinyali
isSellSignal = prevPeakBarIndex > prevBottomBarIndex and isPeak and rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice and (volume[1]+volume[2]+volume[3]) < volumePeak
isBuyTakeProfit = isPeak and ((rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice) or (rsiValue[2] < prevPeak and (volume[1]+volume[2]+volume[3]) < volumePeak))

// Dip noktasında alış sinyali
isBuySignal = prevBottomBarIndex > prevPeakBarIndex and isBottom and rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice and (volume[1]+volume[2]+volume[3]) < volumeBottom
isSellTakeProfit = isBottom and ((rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice) or (rsiValue[2] > prevBottom and (volume[1]+volume[2]+volume[3]) < volumeBottom))

sellTakeProfit = valuewhen(isSellTakeProfit, low, 1)
buyTakeProfit = valuewhen(isBuyTakeProfit, high, 1)

// isSellTakeProfit koşulu için işaretlemeyi yap
plotshape(isSellTakeProfit, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small, title="Sell Take Profit", offset=-2) 

// isBuyTakeProfit koşulu için işaretlemeyi yap
plotshape(isBuyTakeProfit, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small, title="Buy Take Profit", offset=-2)

buyComment = "Buy \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n Low:" + tostring(round(low[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2))
sellComment = "Sell \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n High:" + tostring(round(high[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2)) 

// Alış sinyali durumunda uzun pozisyon aç
if (isBuySignal)
    strategy.entry("Buy", strategy.long, comment = buyComment )
    strategy.exit("SL", "Buy", stop=close * 0.98)

// Satış sinyali durumunda kısa pozisyon aç
if (isSellSignal)
    strategy.entry("Sell", strategy.short, comment = sellComment )
    strategy.exit("SL","Sell", stop=close * 1.02)
// Limit değerini sonradan belirleme


// Alış sinyali durumunda uzun pozisyon kapat
if (isBuyTakeProfit)
    strategy.close("Buy", comment="TP")

// Satış sinyali durumunda kısa pozisyon kapat
if (isSellTakeProfit)
    strategy.close("Sell", comment="TP")

Mais.