Indicador de impulso MACD Estrategia de prueba posterior

El autor:¿ Qué pasa?, Fecha: 2023-09-24 13:21:54
Las etiquetas:

Resumen general

Esta estrategia combina el indicador de impulso del MACD con el indicador de sobrecompra/sobreventa del RSI. Cuando el MACD cruza hacia arriba o hacia abajo, comprueba si el RSI también completa la inversión de fondo/tope correspondiente durante el período de retroceso para generar señales comerciales más confiables.

Estrategia lógica

  1. Calcule el MACD DIFF, DEA e histograma. El cruce de DIFF por encima de DEA da una señal de cruce alcista, y el cruce por debajo da una señal de cruce de muerte.

  2. Calcular el RSI para identificar los rebotes de sobreventa y las ventas de sobrecompra.

  3. Cuando ocurre un cruce alcista del MACD, si el RSI se ha recuperado de la sobreventa dentro de la ventana de retroceso, se genera una señal larga.

  4. Se establece el stop loss después de entrar en control del riesgo.

Ventajas

  1. El MACD identifica con sensibilidad los cambios de tendencia. El RSI juzga eficazmente los niveles de sobrecompra/sobreventa.

  2. Requerir ambas señales MACD y RSI filtra las señales falsas.

  3. La ventana de retroceso mejora la fiabilidad de la señal.

  4. El stop loss ayuda a gestionar el riesgo.

Los riesgos

  1. El retraso del MACD y el RSI puede causar entradas óptimas perdidas.

  2. Una menor probabilidad de que se produzca una señal de doble indicador significa menos operaciones.

  3. No tener en cuenta la dirección de la tendencia más amplia corre el riesgo de quedar atrapado.

  4. La regulación de la pérdida de parada puede ser demasiado amplia o demasiado apretada.

Soluciones posibles:

  1. Ajuste los parámetros MACD y RSI para reducir el retraso.

  2. Ampliar los rangos de umbral del indicador para proporcionar más señales.

  3. Añadir un filtro de tendencia para evitar entradas contra tendencia.

  4. Prueba diferentes parámetros de stop loss para obtener niveles óptimos.

Direcciones de optimización

  1. Prueba SMA y otras medias móviles.

  2. Añadir pérdida de parada para paradas flexibles.

  3. Incorporar la fuerza de la tendencia para juzgar la calidad de entrada.

  4. Utilice el aprendizaje automático para predecir los movimientos de los indicadores.

  5. Combine más factores para optimizar el tiempo de entrada.

Resumen de las actividades

Esta estrategia filtra señales de reversión confiables utilizando MACD y RSI coordinados. La lógica es clara y los parámetros flexibles para mejoras como selección de indicadores, filtros de tendencia, técnicas de stop loss, etc. para adquirir más operaciones mientras se mantiene la estabilidad, pero se deben evitar los riesgos de sobre-optimización.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//based on Range Strat - MACD/RSI 
// strategy("MACD/RSI - edited", 
//      overlay=true,
//      default_qty_type=strategy.percent_of_equity,
//      default_qty_value=10, precision=2, initial_capital=100000,
//      pyramiding=2,
//      commission_value=0.05)

//Backtest date range
StartDate = input(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = true

// RSI Input Settings
rsisrc = input(title="RSI Source", defval=close, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" )
rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings")

// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
co = ta.crossover(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)

// Function looking for a happened condition during lookback period
f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed


coCheck = f_somethingHappened(co, rsi_lookback)
cuCheck = f_somethingHappened(cu, rsi_lookback)

// MACD Input Settings
macdsrc = input(title="MACD Source", defval=close, group="MACD Settings")
fast_length = input(title="Fast Length", defval=12, group="MACD Settings")
slow_length = input(title="Slow Length", defval=26, group="MACD Settings")
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9, group="MACD Settings")
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"], group="MACD Settings")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings")


// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal

MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)

// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01

// Calculating Stop Loss
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)



// Strategy Entry
if (not na(vrsi))
	if (inDateRange and MACDcrossover and coCheck)
		strategy.entry("LONG", strategy.long, comment="LONG")
	if (inDateRange and MACDcrossunder and cuCheck)
		strategy.entry("SHORT", strategy.short, comment="SHORT")

// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
    strategy.exit(id="SHORT STOP", stop=shortStopPrice)

Más.