Estratégia de tendência baseada no RSI e na EMA

Autora:ChaoZhang, Data: 2024-01-25 12:19:32
Tags:

img

Resumo

Esta estratégia combina o índice de força relativa (RSI) e os indicadores técnicos da média móvel exponencial (EMA) para implementar uma estratégia quantitativa de negociação baseada na tendência.

Estratégia lógica

Seleção de indicadores

  • A estratégia usa uma EMA de 20 dias, 50 dias e 200 dias. Quando o preço está acima dessas EMAs, uma tendência de alta é identificada.
  • RSI para identificar os níveis de sobrecompra/supervenda Um RSI padrão de 14 períodos, com limite de sobrecompra em 70 e limite de sobrevenda em 30.

Regras de entrada

sinal de entrada longo:

  • RSI abaixo do nível 30, indicando condições de sobrevenda em que o preço pode recuperar
  • Preço acima da EMA de 20 dias, 50 dias ou 200 dias, mostrando uma tendência de mercado ascendente

Quando ambos os critérios são cumpridos, é introduzida uma posição longa.

Gestão de riscos

A perda máxima para cada negociação é limitada a 3% do valor total da conta.

O valor da posição deve ser calculado de acordo com o método de classificação da posição.

Isto controla efetivamente o risco por comércio.

Regras de saída

Sinais de saída principais:

  • RSI sobe acima do nível 70, o preço pode cair devido a condições de sobrecompra
  • Preços abaixo da EMA de 20 dias, 50 dias ou 200 dias, inversão da tendência

Quando ocorre qualquer um dos sinais, a posição é fechada.

Análise das vantagens

A estratégia combina as vantagens da tendência seguindo e a reversão média. A EMA determina a tendência geral, em seguida, os sinais de entrada acontecem em zonas de reversão potencial, beneficiando-se tanto da tendência quanto das reversões para estabilidade. Os parâmetros do RSI também podem ser otimizados para diferentes mercados, tornando a estratégia robusta.

A perda máxima fixa por transacção protege o capital através do controlo direto do nível de risco comercial.

Análise de riscos

A estratégia funciona bem em mercados com tendências óbvias. Em ambientes complexos e voláteis, o uso da EMA para a tendência pode ter limitações.

A colocação de stop loss é crítica para a PnL, necessitando de testes cuidadosos para diferentes mercados. Se muito larga, a perda única pode se expandir; se muito apertada, o ruído pode desencadear paradas indesejadas.

Orientações de otimização

Testar diferentes parâmetros do RSI para se adequar a mais mercados. Encontrar proporções ótimas de tamanho do comércio. Adicionar outros indicadores técnicos para construir sistemas de entrada / saída mais robustos. Todas essas opções valem a pena explorar.

Conclusão

A estratégia integra os pontos fortes das estratégias de reversão de tendência e média. A entrada ocorre em reversão potencial enquanto se identifica a tendência maior. A otimização do RSI o adapta a mais regimes de mercado. O nível de risco comercial fixo mantém a operação estável no médio a longo prazo. Outras melhorias são possíveis através de ajustes e testes de robustez usando diferentes mercados e estilos.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Stratégie RSI et EMA avec Gestion du Risque", overlay=true)

// Paramètres de la stratégie
rsiLength = input(14, "Longueur du RSI")
rsiOverbought = input(70, "Niveau de Surachat RSI")
rsiOversold = input(30, "Niveau de Survente RSI")

// Calcul du RSI
rsiValue = rsi(close, rsiLength)

// Paramètres des EMA
ema20 = ema(close, 20)
ema50 = ema(close, 50)
ema200 = ema(close, 200)

// Paramètre du risque par trade
riskPerTrade = input(0.03, "Risque par Trade (3%)")

// Distance du stop-loss en pips (à ajuster selon votre stratégie)
stopLossPips = input(1, "Distance du Stop-Loss en pips")

// Calcul de la taille de position et du stop-loss
calculatePositionSize(entryPrice, stopLossPips) =>
    stopLossPrice = entryPrice - stopLossPips * syminfo.mintick
    riskPerTradeValue = strategy.equity * riskPerTrade
    positionSize = riskPerTradeValue / (entryPrice - stopLossPrice)
    positionSize

// Conditions d'entrée
longCondition = (rsiValue < rsiOversold) and (close > ema20 or close > ema50 or close > ema200)
if longCondition
    strategy.entry("Long", strategy.long, qty=1)

// Conditions de sortie
exitCondition = (rsiValue > rsiOverbought) or (close < ema20 or close < ema50 or close < ema200)
if exitCondition
    strategy.close("Long")

// Affichage des EMA et RSI sur le graphique
plot(ema20, color=color.red)
plot(ema50, color=color.green)
plot(ema200, color=color.blue)
hline(rsiOverbought, "Niveau de Surachat RSI", color=color.red)
hline(rsiOversold, "Niveau de Survente RSI", color=color.blue)
plot(rsiValue, "RSI", color=color.purple)

Mais.