Estratégia de RSI de média móvel de rastreamento de tendências

Autora:ChaoZhang, Data: 2023-11-23 17:13:06
Tags:

img

Resumo

A estratégia de RSI de média móvel de rastreamento de tendências é uma estratégia de negociação de ações automatizada que utiliza tanto a análise de tendências quanto os indicadores de sobrecompra e sobrevenda.

Estratégia lógica

A estratégia consiste em três partes principais:

  1. Julgamento da tendência: Calcula a tendência de longo prazo com média móvel simples de 200 dias e a tendência de curto prazo com médias móveis simples de 30 dias e 50 dias.

  2. Análise de sobrecompra e sobrevenda: Calcula o indicador RSI de 14 dias. RSI acima de 80 é a zona de sobrecompra e abaixo de 20 é a zona de sobrevenda. Os sinais de negociação são gerados quando o indicador RSI cai da zona de sobrecompra ou sobe da zona de sobrevenda.

  3. Entradas e saidas: Quando são identificados sinais de sobrecompra ou sobrevenda, se a direção for consistente com a análise da tendência, as posições longas/cortas serão abertas.

Com esta estratégia, é possível entrar no mercado em tempo hábil quando os preços revertem, ao mesmo tempo em que se filtram algumas transacções ruidosas através da incorporação de análise de tendências, com um controlo de retirada relativamente excelente.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Combinar análise de tendências e indicadores de sobrecompra e sobrevenda para filtrar o ruído e identificar mudanças no mercado.
  2. Considerando tendências tanto a longo como a curto prazo para julgamentos mais precisos.
  3. Utilização de médias móveis como métodos de stop loss para que os pontos de stop loss possam ser definidos com base na volatilidade do mercado.
  4. Condições de entrada rigorosas ajudam a evitar falsas fugas de forma eficaz.

Riscos e soluções

Há também alguns riscos com esta estratégia:

  1. As negociações frequentes insignificantes podem ocorrer se o mercado permanecer limitado ao intervalo por um tempo prolongado.
  2. Há um certo risco de atraso de tempo, que pode ser mitigado através da redução dos parâmetros do ciclo médio móvel.
  3. Os sinais do RSI podem ser influenciados por ações e mercados. Mais fatores como padrões de velas devem ser combinados para julgar a eficácia.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Adicionando mais filtros como volume, padrões de velas para melhorar ainda mais a qualidade do sinal.
  2. Otimizar os parâmetros do ciclo da média móvel e do RSI para corresponderem às diferentes características das ações.
  3. Construção de médias móveis dinâmicas para ajustar automaticamente os parâmetros com base na volatilidade do mercado e no apetite pelo risco.
  4. Usando técnicas mais avançadas como aprendizagem de máquina para determinar tendências de mercado com maior precisão.

Resumo

Em geral, a estratégia de RSI de média móvel de rastreamento de tendências é uma idéia de estratégia muito prática, filtrando o ruído do mercado até certo ponto, combinando análise de tendências e indicadores de sobrecompra e sobrevenda, tornando os sinais de negociação mais precisos e válidos.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mattehalen

// INPUT per TIMEFRAME
// 5min     = Legnth = 9, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 4, LongMA = 10
// 30min    = Legnth = 7, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 10, LongMA = 20

strategy("Mathias & Christer Timeframe RSI", shorttitle="M&C_RSI",overlay=true, process_orders_on_close = true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
len = input(9, title="Length", type=input.integer)
src = input(ohlc4, title="Source", type=input.source)
//show4h = input(true, title="show 4h", type=input.bool)
maxLoss = input(3000)

rsiCurrent = rsi(src, len)
//rsi4h = security(syminfo.ticker, "240", rsi(src, len))
rsi4h   = rsi(src, len)

//--------------------------------------------------
//MA
trendMAInput = input(200, title="trendMA", type=input.integer)
shortMAInput = input(30, title="shortMA", type=input.integer)
longMAInput = input(50, title="longMA", type=input.integer)

trendMA = ema(close,trendMAInput)
shortMA = ema(close,shortMAInput)
longMA  = ema(close,longMAInput)
plot(trendMA, color=color.black, linewidth=5)
plot(shortMA, color=color.red, linewidth=2)
plot(longMA, color=color.green, linewidth=2)
bgcolor(crossunder(shortMA,longMA) ? color.black : na, transp=10)

//--------------------------------------------------
//RSI
BuySignalBarssince = barssince(rsi4h[1]<rsi4h[0] and rsi4h[1]<20)
BuySignal       = (rsi4h[1]<rsi4h[0] and rsi4h[1]<20 and BuySignalBarssince[1]>10)
BuySignalOut   = crossunder(longMA[1],shortMA[1])
bgcolor(BuySignal ? color.green : na, transp=70)
bgcolor(BuySignalOut ? color.green : na, transp=10)



SellSignalBarssince = barssince(rsi4h[1]>rsi4h[0] and rsi4h[1]>80)
SellSignal      = (rsi4h[1]>rsi4h[0] and rsi4h[1]>80 and SellSignalBarssince[1]>10)
SellSignalOut   = crossunder(shortMA[1],longMA[1])
bgcolor(SellSignal ? color.red : na, transp=70)
bgcolor(SellSignalOut ? color.red : na, transp=10)


if BuySignal
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

if BuySignalOut
    strategy.close("long", comment = "Exit Long")
if SellSignal
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
if SellSignalOut
    // Force trade exit.
    strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//ATR
MyAtr = atr(10)
AtrFactor = 10
mySLBuy  = close[BuySignalBarssince]
mySLSell = close[SellSignalBarssince]

plotchar(BuySignal, "BuySignal", "⬆", location.belowbar, color.lime,size =size.huge )
plotchar(BuySignalOut, "BuySignalOut", "█", location.belowbar, color.lime,size =size.small)
plotchar(SellSignal, "SellSignal", "⬇", location.abovebar ,color.red,size =size.huge)
plotchar(SellSignalOut, "SellSignalOut", "█", location.abovebar, color.red,size =size.small)




Mais.