Estrategia de reversión de tendencia basada en MACD y RSI


Fecha de creación: 2023-12-18 17:53:38 Última modificación: 2023-12-18 17:53:38
Copiar: 0 Número de Visitas: 660
1
Seguir
1621
Seguidores

Estrategia de reversión de tendencia basada en MACD y RSI

Descripción general

La estrategia utiliza un conjunto de tres indicadores, MACD, EMA y RSI, para realizar un seguimiento de la tendencia y un cambio de tendencia. La estrategia genera una señal de compra cuando el MACD pasa por la línea de señal hacia arriba y el precio de cierre está por encima de la media de la EMA; genera una señal de venta cuando el MACD se desvía hacia abajo y el precio de cierre está por debajo de la media de la EMA, para capturar la tendencia; y, al mismo tiempo, realiza un cambio de tendencia cuando el RSI alcanza la zona de sobreventa.

Principio de estrategia

  1. Calcular los MACDdiffs y el EMA.
   fastMA = ema(close, fast)  
   slowMA = ema(close, slow)
   macd = fastMA - slowMA
   signal = sma(macd, 9)
   ema = ema(close, input(200))
  1. Genera una señal de compra: la diferencia MACD ((macd-signal) pasa por el eje 0 y el precio de cierre está por encima de la línea media EMA.
   delta = macd - signal 
   buy_entry= close>ema and delta > 0
  1. Genera una señal de venta: el MACD rompe el eje 0 y el precio de cierre está por debajo de la línea media de la EMA
   sell_entry = close<ema and delta<0 
  1. Cuando el RSI entra en una zona de sobrecompra y sobreventa, se realiza una inversión.
   if (rsi > 70 or rsi < 30)
       reversal := true

Análisis de las ventajas

  1. La combinación de seguimiento de tendencias y inversiones permite seguir las principales tendencias y obtener ganancias en los puntos de reversión.
  2. Utiliza el MACD para determinar la dirección de las principales tendencias y evitar falsas rupturas.
  3. El EMA filtra algunos de los ruidos.
  4. El indicador RSI determina el punto de reversión y aumenta el espacio de ganancia de la estrategia.

Análisis de riesgos

  1. En los mercados de tendencia, las inversiones pueden causar pérdidas.
  2. Los parámetros mal configurados aumentan la frecuencia de las transacciones y los costos de los puntos de deslizamiento.
  3. La señal de retorno puede ser retrasada, perdiendo el mejor momento de entrada.

La solución:

  1. Optimización de parámetros para encontrar la combinación óptima de parámetros.
  2. Ajuste adecuado del umbral RSI de las inversiones.
  3. Considere la inclusión de stop loss para controlar las pérdidas.

Dirección de optimización

  1. Prueba de los parámetros de la línea media EMA de diferentes longitudes.
  2. Optimización de los parámetros MACD para encontrar la combinación óptima de parámetros.
  3. Prueba de los diferentes umbrales del RSI.
  4. Considere la combinación de otros indicadores.

Resumir

Esta estrategia utiliza un conjunto de indicadores MACD, EMA y RSI para lograr una combinación orgánica de seguimiento de tendencias y inversiones. El MACD determina la dirección de la tendencia principal, el ruido de las ondas de la EMA y el RSI captura el punto de reversión. Esta combinación de múltiples indicadores permite determinar con mayor precisión el movimiento del mercado y aumentar la probabilidad de obtener ganancias al tiempo que reduce las operaciones erróneas.

Código Fuente de la Estrategia
/*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