Tendência baseada no MACD e no RSI após uma estratégia de reversão

Autora:ChaoZhang, Data: 2023-12-18 17:53:38
Tags:

img

Resumo

Esta estratégia combina os indicadores MACD, EMA e RSI para implementar a negociação de tendência e reversão. Gerar sinais de compra quando o MACD sobe através da linha de sinal e o preço de fechamento está acima da EMA; e vender sinais quando o MACD cai abaixo da linha de sinal e o preço de fechamento está abaixo da EMA para capturar tendências. Enquanto isso, negocia reversões quando o RSI atinge níveis de sobrecompra ou sobrevenda.

Estratégia lógica

  1. Calcular diferenças MACD e EMA.

    fastMA = ema(close, fast)
    slowMA = ema(close, slow) 
    macd = fastMA - slowMA
    signal = sma(macd, 9)
    ema = ema(close, input(200))
    
  2. Gerar sinal de compra: MACD dif (macd - sinal) sobe acima de 0 e o preço de fechamento está acima da EMA.

    delta = macd - signal
    buy_entry= close>ema and delta > 0 
    
  3. Gerar sinal de venda: MACD diferença vai abaixo de 0 e preço de fechamento está abaixo da EMA.

    sell_entry = close<ema and delta<0
    
  4. Reversões comerciais quando o RSI atinge níveis de sobrecompra ou sobrevenda.

    if (rsi > 70 or rsi < 30)
        reversal := true
    

Análise das vantagens

  1. Combinar a negociação de tendências e de reversão para lucrar com as tendências e as reversões.
  2. Use o MACD para julgar as direções da tendência e evitar falhas.
  3. Filtrar ruído com EMA.
  4. Aumentar a rentabilidade com RSI para negócios de reversão.

Análise de riscos

  1. As operações de reversão podem incorrer em perdas em mercados de forte tendência.
  2. O ajustamento inadequado dos parâmetros pode aumentar a frequência de negociação e os custos de deslizamento.
  3. Os sinais de reversão podem ter algum atraso, perdendo os melhores preços de entrada.

Soluções:

  1. Otimize os parâmetros para encontrar a melhor combinação.
  2. Ajustar adequadamente os limiares de inversão do RSI.
  3. Considerar a adição de stop loss às perdas de controlo.

Orientações de otimização

  1. Teste os comprimentos da EMA.
  2. Otimizar os parâmetros do MACD.
  3. Teste diferentes limiares de reversão do RSI.
  4. Considere a combinação com outros indicadores.

Resumo

Esta estratégia combina o MACD, EMA e RSI para implementar organicamente o seguimento da tendência e a negociação de reversão. O MACD julga as direções da tendência, o EMA filtra o ruído e o RSI capta os pontos de reversão. Tal combinação de múltiplos indicadores pode determinar melhor os movimentos do mercado, melhorando a lucratividade enquanto reduzindo falsos sinais. A otimização de parâmetros e o gerenciamento de stop loss podem ser melhorados para reduzir perdas desnecessárias.


/*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



Mais.