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


Data de criação: 2024-03-19 15:54:01 última modificação: 2024-03-19 15:54:01
cópia: 1 Cliques: 349
1
focar em
1230
Seguidores

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

Resumo da estratégia: A estratégia baseia-se na relação entre o indicador RSI e o preço, para otimizar o desempenho das negociações através do ajuste dinâmico do ponto de parada e perda. A principal idéia da estratégia é aproveitar a característica de sobrecompra e sobrevenda do indicador RSI, combinando as mudanças de preço e volume de transação, para parar em tempo hábil quando o RSI se desvia, enquanto controla o risco através de um stop loss dinâmico.

Princípios da estratégia:

  1. Calcule o valor do indicador RSI e determine os limites de sobrecompra e sobrevenda com base nos parâmetros de entrada.
  2. Comparando o valor do RSI atual com o valor do RSI das linhas K anteriores, determine se há um topo (isPeak) ou um fundo (isBottom).
  3. Quando uma forma de topo aparece, um sinal de venda é gerado se o preço atual for mais alto do que o pico do topo anterior e o volume de transação for menor do que o volume de transação do topo anterior.
  4. Quando uma forma de fundo aparece, um sinal de compra é gerado se o preço atual estiver abaixo do ponto mais baixo do anterior e o volume de transação for menor do que o volume de transação do anterior.
  5. Depois que o sinal de compra é acionado, o preço retrocede para o ponto mais baixo anterior ou o volume de transação é menor do que o volume de transação anterior.
  6. Depois de um sinal de venda ser acionado, o preço rebota para o pico anterior ou o volume de transação é menor do que o volume de transação anterior.
  7. Após a abertura da posição, o preço de stop-loss é definido como uma proporção do preço de abertura ((2%)), para controlar o risco.

Vantagens estratégicas:

  1. O stop-loss dinâmico permite o bloqueio de lucros em tempo hábil no início de uma reversão de tendência, aumentando a rentabilidade da estratégia.
  2. O uso da variação do volume de tráfego como critério auxiliar de julgamento pode filtrar efetivamente os sinais falsos e melhorar a precisão do sinal.
  3. A configuração de stop loss pode controlar eficazmente a abertura de risco de uma única transação, reduzindo a estratégia de retração.
  4. Os parâmetros são ajustáveis para diferentes ambientes de mercado e variedades de negociação.

Riscos estratégicos:

  1. Em mercados de turbulência, o RSI pode apresentar sinais de sobrevenda e sobrevenda frequentes, resultando em mais falsos sinais para a estratégia.
  2. A configuração de stop loss pode levar a uma maior retração da estratégia no curto prazo.
  3. A estratégia pode ser menos eficaz em mercados de tendência do que a estratégia de acompanhamento de tendências.

Otimização:

  1. Pode-se considerar a introdução de outros indicadores técnicos, como MACD, Brinks, etc., para melhorar a confiabilidade do sinal.
  2. Otimização do limiar de stop loss, ajustado de acordo com as características de diferentes variedades e a dinâmica do ambiente de mercado.
  3. Adicionar um módulo de gerenciamento de posições para ajustar o tamanho das posições de acordo com a volatilidade do mercado e o risco da conta.
  4. Optimizar os parâmetros da estratégia para encontrar a combinação ideal de parâmetros.

Resumo: A estratégia de parada de perda dinâmica do RSI usa o desvio do indicador do RSI do preço, combina mudanças de volume de transação e, no início da tendência, impõe uma parada de perda dinâmica para controlar o risco. A vantagem da estratégia é que ela pode bloquear o lucro no início da reversão da tendência, reduzir o recuo da estratégia e ter uma certa adaptabilidade. No entanto, em mercados turbulentos, a estratégia pode apresentar mais sinais falsos, portanto, é necessário introduzir outros indicadores técnicos e otimizar o valor da parada de perda para melhorar o desempenho da estratégia.

Código-fonte 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")