Indice de força relativa e estratégia de cruzamento da média móvel

Autora:ChaoZhang, Data: 21-12-2023 11:30:27
Tags:

img

Resumo

O índice de força relativa (RSI) e a estratégia de cruzamento da média móvel combinam o indicador RSI e as médias móveis para tomar decisões quantitativas de negociação.

Estratégia lógica

  1. Calcule o valor do indicador RSI. O RSI mede a magnitude das mudanças recentes de preços para avaliar se um ativo está sobrecomprado ou sobrevendido.

  2. Calcular uma linha média móvel (MA) do RSI, utilizando uma média móvel exponencial (EMA) ou uma média móvel simples (SMA).

  3. Quando o RSI cruza acima de sua linha MA, um sinal de compra de cruz dourada é gerado.

  4. Quando o RSI sobe acima do limiar de sobrecompra, o ativo é considerado sobrecomprado e uma posição curta pode ser iniciada.

Análise das vantagens

  1. A combinação de sinais cruzados de indicadores com os níveis de sobrecompra/supervenda do RSI melhora a precisão das decisões de negociação.

  2. Os limiares de sobrecompra e sobrevenda do RSI determinam entradas e saídas ideais.

  3. Captura de reversões de tendência através da atuação em sinais cruzados de indicadores.

Análise de riscos

  1. O RSI pode gerar sinais incorretos durante mercados agitados ou laterais.

  2. As definições incorretas dos limiares de sobrecompra ou sobrevenda podem conduzir a sinais demasiado flexíveis ou demasiado rígidos.

  3. As médias móveis são sensíveis a anomalias de curto prazo e picos de volatilidade, aumentando a probabilidade de serem interrompidas prematuramente.

Orientações de otimização

  1. Otimizar o parâmetro RSI através do teste de diferentes períodos de duração.

  2. Determinar os períodos de média móvel ideais avaliando diferentes comprimentos MA.

  3. Teste vários níveis de limiar de sobrecompra e sobrevenda para refinar os sinais de entrada.

  4. Incorporar filtros adicionais para validar sinais e evitar trocas falsas.

Conclusão

A estratégia de cruzamento do RSI e da média móvel combina os níveis de sobrecompra/supervenda do RSI com os sinais de cruzamento do MA para identificar pontos de virada do mercado e capturar reversões.


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

//@version=3
//dfurrer45
strategy(title="Relative Strength Index", shorttitle="RSI", overlay=true)
src = close, len = input(13, minval=1, title="Length"), maLen = input(9, minval=1, title="MA Lenght"), exponential = input(false, title="Exponential")

// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay   = input(defval = 3, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)
// ===  BACKTEST END  ===
backtestdaterange = (time > timestamp(FromYear, FromMonth, FromDay, 00, 00))

rsioverbought = input(90, minval=1, title="RSI % start overbought")
rsioversold = input(10, minval=1, title="RSI % start oversold")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
ma = exponential ? ema(rsi, maLen) : sma(rsi, maLen)
rsimacrossup = cross(rsi,ma) and rsi > ma
rsimacrossdown = cross(rsi,ma) and rsi < ma
plotchar(rsimacrossup, char='⇧', location = location.belowbar, color = green, text = "", textcolor = green, size=size.small)
plotchar(rsimacrossdown, char='⇩', location = location.abovebar, color = red, text = "", textcolor = red, size=size.small)
plotchar(rsi > rsioverbought, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)
plotchar(rsi < rsioversold, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)


closetrade = rsimacrossup or rsimacrossdown
strategy.close_all(closetrade)
strategy.close_all((rsi > rsioverbought) or (rsi < rsioversold))
strategy.entry("Short Overbought",strategy.short, when=(rsi > rsioverbought) and backtestdaterange)
strategy.entry("Buy Overbought",strategy.long, when=(rsi < rsioversold) and backtestdaterange)
strategy.entry("Long Cross", strategy.long, when=rsimacrossup and backtestdaterange)
strategy.entry("Short Cross", strategy.short, when=rsimacrossdown and backtestdaterange)


Mais.