Estratégia de reversão de acompanhamento de tendências com base em MACD e RSI


Data de criação: 2023-12-18 17:53:38 última modificação: 2023-12-18 17:53:38
cópia: 0 Cliques: 660
1
focar em
1621
Seguidores

Estratégia de reversão de acompanhamento de tendências com base em MACD e RSI

Visão geral

A estratégia utiliza três indicadores, MACD, EMA e RSI, para acompanhamento de tendências e negociação de reversão. Gera um sinal de compra quando o MACD passa pela linha de sinal para cima e o preço de fechamento está acima da linha média da EMA; Gera um sinal de venda quando o MACD desce e o preço de fechamento está abaixo da linha média da EMA, para capturar a tendência.

Princípio da estratégia

  1. Calcular MACDdiffs e EMA
   fastMA = ema(close, fast)  
   slowMA = ema(close, slow)
   macd = fastMA - slowMA
   signal = sma(macd, 9)
   ema = ema(close, input(200))
  1. Gera um sinal de compra: MACD diferencial ((macd-signal) atravessa o eixo 0 e o preço de fechamento é superior à linha média EMA
   delta = macd - signal 
   buy_entry= close>ema and delta > 0
  1. Geração de um sinal de venda: o MACD rompe o eixo 0 com o diferencial e o preço de fechamento está abaixo da linha média da EMA.
   sell_entry = close<ema and delta<0 
  1. Quando o RSI entra na zona de sobrecompra e sobrevenda, execute uma reversão.
   if (rsi > 70 or rsi < 30)
       reversal := true

Análise de vantagens

  1. A combinação de acompanhamento de tendências e negociação de reversão permite tanto o acompanhamento das principais tendências quanto o lucro em pontos de reversão.
  2. O MACD é usado para determinar a direção das principais tendências e evitar falsas rupturas.
  3. O EMA filtra alguns dos ruídos.
  4. O indicador RSI determina pontos de reversão, aumentando a estratégia de lucro.

Análise de Riscos

  1. No mercado de tendências, o reverso pode causar prejuízos.
  2. Os parâmetros não são corretos, o que aumenta a frequência de transações e os custos de deslizamento.
  3. O sinal de retorno pode ser atrasado, perdendo o melhor momento de entrada.

Solução:

  1. Optimizar parâmetros para encontrar a melhor combinação de parâmetros.
  2. Ajustar adequadamente os limites do RSI para a inversão.
  3. Considere a inclusão de stop loss para controlar os prejuízos.

Direção de otimização

  1. Teste o parâmetro da linha média EMA de diferentes comprimentos.
  2. Optimizar os parâmetros MACD para encontrar a melhor combinação de parâmetros.
  3. Teste diferentes limites de inversão do RSI.
  4. Considere a combinação com outros indicadores.

Resumir

Esta estratégia utiliza um conjunto de indicadores MACD, EMA e RSI, permitindo uma combinação orgânica de acompanhamento de tendências e negociação de reversão. O MACD determina a direção da tendência principal, o EMA detecta o ruído e o RSI capta o ponto de reversão. Esta combinação de vários indicadores permite avaliar com mais precisão o movimento do mercado, reduzindo a probabilidade de negociação errada e aumentando a probabilidade de lucro.

Código-fonte da estratégia
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 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/
// © mbuthiacharles4

//Good with trending markets
//@version=4
strategy("CHARL MACD EMA RSI")

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)

ema = ema(close, input(200))

rsi = rsi(close, input(14))
//when delta > 0  and close above ema buy

delta = macd - signal

buy_entry= close>ema and delta > 0
sell_entry = close<ema and delta<0 
var bought = false
var sold = false
var reversal = false
if (buy_entry and bought == false and rsi <= 70) 
    strategy.entry("Buy",true , when=buy_entry)
    bought := true
    
strategy.close("Buy",when= delta<0 or rsi > 70)
if (delta<0 and bought==true)
    bought := false

//handle sells

if (sell_entry and sold == false and rsi >= 30)
    strategy.entry("Sell",false , when=sell_entry)
    sold := true

strategy.close("Sell",when= delta>0 or rsi < 30)
if (delta>0 and sold==true)
    sold := false
    
if (rsi > 70 or rsi < 30)
    reversal := true
    placing = rsi > 70 ? high :low
    label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny)
if (reversal == true)
    if (rsi < 70 and sold == false and delta < 0)
        strategy.entry("Sell",false , when= delta < 0)
        sold := true
        reversal := false
    else if (rsi > 30 and bought == false and delta > 0)
        strategy.entry("Buy",true , when= delta > 0)
        bought := true
        reversal := false