Estratégia de fuga bidirecional do RSI


Data de criação: 2023-11-08 12:11:03 última modificação: 2023-11-08 12:11:03
cópia: 0 Cliques: 669
1
focar em
1617
Seguidores

Estratégia de fuga bidirecional do RSI

Visão geral

A estratégia é baseada na concepção do indicador RSI, um indicador relativamente forte, e usa o princípio de compra e venda de RSI para realizar operações de ruptura bidirecionais. Quando o indicador RSI atravessa a linha de compra e venda definida, fazendo mais e quando o indicador RSI atravessa a linha de venda definida, fazendo menos, é uma estratégia de negociação típica de reversão.

Princípio da estratégia

  1. Os parâmetros do indicador RSI são calculados de acordo com as configurações de entrada do usuário, incluindo o comprimento do ciclo RSI, o limiar da linha de compra e o limiar de venda.

  2. De acordo com a curva RSI, a relação entre a posição da linha de superaquecimento e a linha de superaquecimento determina se você está em uma zona de superaquecimento ou de superaquecimento.

  3. Quando o indicador RSI quebra a linha de desvalorização correspondente a partir da zona de superalimento, execute a operação de abertura de posição na direção oposta. Por exemplo, quando a zona de superalimento quebra a linha de superalimento, considere que a tendência se inverte e abra uma posição maior; quando a zona de superalimento quebra a linha de superalimento, considere que a tendência se inverte e abra uma posição vazia.

  4. Depois de abrir uma posição, configure o Stop Loss Stop Line.

  5. A estratégia também oferece a opção de usar o EMA como um filtro. O preço deve romper o EMA para abrir uma posição somente quando o indicador RSI faz mais sinais de curto-circuito.

  6. A estratégia também oferece a função de negociar apenas em determinados períodos de negociação. O usuário pode configurar a negociação apenas em um determinado período de tempo, e sair da posição após o tempo de liquidação.

Análise de vantagens

  • A retomada é mais eficaz com o uso do princípio de ruptura clássico do RSI.
  • Pode ser ajustado de forma flexível para diferentes variedades.
  • Pode-se optar por usar os sinais de filtragem do EMA para evitar a abertura de posições frequentes devido a tremores de pequena amplitude.
  • Suporte para a função Stop Loss Stop para melhorar a estabilidade da estratégia.
  • Apoio para o estabelecimento de horários específicos de negociação, evitando negociações em horários impróprios.
  • O apoio ao uso de CFDs permite que os investidores se aproveitem das flutuações de mercado.

Análise de Riscos

  • O indicador RSI é suscetível a desvios, e pode gerar sinais de negociação imprecisos apenas com o indicador RSI. É necessário combinar tendências, medianças e outros julgamentos.
  • A configuração inadequada da barreira de sobrecompra e sobrevenda pode levar a oportunidades de negociação excessivamente frequentes ou perdidas.
  • A configuração inadequada do Stop Loss Stop pode levar a estratégias muito radicais ou conservadoras.
  • A configuração inadequada do filtro EMA também pode perder oportunidades de negociação ou filtrar sinais válidos.

Resolução de riscos:

  • Optimizar os parâmetros do RSI e ajustar os parâmetros para diferentes variedades.
  • A combinação de indicadores de tendências e outros julgamentos desvia a situação, evitando sinais errados.
  • Testar e otimizar parâmetros de parada de perda para encontrar o melhor parâmetro.
  • Teste e otimize os parâmetros do EMA para encontrar o melhor nível de filtragem.

Direção de otimização da estratégia

A estratégia pode ser melhorada em vários aspectos:

  1. Optimizar os parâmetros do RSI, procurando a melhor combinação de parâmetros de diferentes variedades. O melhor limite de superaquecimento pode ser encontrado através do rastreamento.

  2. Tente substituir ou combinar diferentes indicadores do RSI para formar um sinal de julgamento mais forte. Por exemplo, MACD, KD, faixa de Brin, etc.

  3. Optimizar a estratégia de stop loss para aumentar a estabilidade da estratégia. Pode ser definido a partir de stop loss de acordo com a volatilidade do mercado, ou com a função de rastreamento de stop loss.

  4. Otimizar os parâmetros do filtro EMA ou testar outros indicadores de filtro para evitar ainda mais o encaixe.

  5. Adicionar módulos de julgamento de tendências, evitando a reversão de ações de múltiplos ativos, ou a reversão de ações de múltiplos ativos.

  6. Testar diferentes parâmetros de tempo de negociação para determinar quais períodos são adequados para a estratégia e quais devem ser evitados.

Resumir

A estratégia de ruptura bidirecional do RSI é clara, usando o clássico princípio de venda e venda de RSI para a negociação de reversão. Pode aproveitar as oportunidades de reversão da zona de venda e venda, mas também pode controlar o risco com filtragem EMA e parada de perda. O espaço de otimização de parâmetros e módulos é grande, o que pode ser uma estratégia de reversão mais estável e confiável.

Código-fonte da estratégia
/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 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/
// © REV0LUTI0N

//@version=4

strategy("RSI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

// Strategy Backtesting
startDate  = input(timestamp("2021-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true
// Strategy

Length = input(12, minval=1)
src = input(close, title="Source")
overbought = input(70, minval=1)
oversold = input(30, minval=1)
xRSI = rsi(src, Length)
    
rsinormal = input(true, title="Overbought Go Long & Oversold Go Short")
rsiflipped = input(false, title="Overbought Go Short & Oversold Go Long")

// EMA Filter
noemafilter = input(true, title="No EMA Filter")
useemafilter = input(false, title="Use EMA Filter")
ema_length = input(defval=15, minval=1, title="EMA Length")
emasrc = input(close, title="Source")
ema = ema(emasrc, ema_length)
plot(ema, "EMA", style=plot.style_linebr, color=#cad850, linewidth=2)

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (xRSI > overbought and close > ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and close < ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and close > ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and close < ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI > overbought and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)