Tendencia cruzada promedio móvil de impulso siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2023-10-24 12:31:44
Las etiquetas:

img

Resumen general

Esta estrategia combina cruces de promedio móvil e indicadores de impulso para rastrear e invertir tendencias de manera efectiva. Primero utiliza promedios móviles rápidos y lentos para generar señales largas de cruz dorada y señales cortas de cruz de muerte. Luego, con indicadores de impulso de ciertos parámetros, si el impulso en el MA rápido vuelve a aparecer después de la cruz de oro, la tendencia se considera continua y la posición larga se mantendrá. Cuando el impulso baja, se considera una inversión de tendencia y la posición existente se cerrará. La misma lógica se aplica a las señales cortas de cruz de muerte al rastrear las reversiones de tendencia.

Estrategia lógica

La lógica central de esta estrategia se basa en las señales de tendencia de los cruces MA y las señales de inversión de tendencia de los indicadores de impulso.

  1. Calcular el precio del MA rápido1 (HMA de 5 períodos) y el precio del MA lento2 (HMA de 7 períodos).

  2. La cruz de oro con el precio1 cruzando por encima del precio2 genera una señal larga. La cruz de la muerte con el precio1 cruzando por debajo del precio2 genera una señal corta. Este es el uso común de los MA.

  3. Después de la señal larga, si el impulso del precio roc1 vuelve a aparecer, se considera que la tendencia continúa y se mantendrá la posición larga.

  4. Cuando el impulso roc1 disminuye, se considera una inversión de tendencia y la posición existente se cerrará.

  5. Introduzca el umbral de ADX para evitar señales incorrectas cuando no está en el estado de tendencia.

Análisis de ventajas

En comparación con las estrategias simples de MA, la mayor ventaja de esta estrategia es la introducción de indicadores de impulso para determinar las inversiones de tendencia de manera más rápida y precisa.

  1. Los MAs mismos retrasan los cambios de precios, mientras que los indicadores de impulso pueden capturar rápidamente las señales de reversión para detener las pérdidas oportunas o invertir la negociación.

  2. Las señales de reversión basadas en el impulso son más confiables, evitando órdenes de apertura/cierre innecesarias durante la negociación de tendencias.

  3. ADX evita señales erróneas en mercados que no están en tendencia, manteniendo la estrategia más centrada en tendencias con mayores probabilidades de ganar.

  4. La lógica es simple y fácil de entender, adecuada para principiantes en el comercio de algo.

  5. Gran espacio de optimización mediante el ajuste de los períodos de MA, parámetros de impulso, etc. para diferentes mercados.

Análisis de riesgos

Los principales riesgos de esta estrategia provienen de:

  1. La naturaleza tardía de los MAs, que puede causar señales retrasadas, falta de los mejores puntos de entrada.

  2. Falso escape causando entradas o salidas innecesarias. Necesita una mayor optimización de parámetros o filtros adicionales.

  3. La detección de la inversión de tendencia se basa en el impulso, que puede tambalearse durante los grandes cambios de mercado.

  4. ADX es imperfecto en la detección de tendencias y consolidaciones.

  5. No se tienen en cuenta los costos de negociación, se debe establecer un stop loss adecuado cuando se aplica en el comercio real.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Pruebe otros tipos de MA o ajuste los parámetros de MA para obtener mejores efectos de suavizado.

  2. Optimizar la longitud del indicador de impulso para una mayor sensibilidad para detectar las reversiones de precios.

  3. Establezca filtros de precios cuando el impulso se invierta para evitar ser engañado por las fluctuaciones a corto plazo.

  4. Mejorar el uso de ADX mediante el uso de diferentes parámetros en diferentes niveles de ADX.

  5. Introducir indicadores de volumen, etc., para mejorar la calidad de la señal y filtrar las fallas.

  6. Añadir mecanismos de stop loss para controlar la pérdida de una sola operación.

Resumen de las actividades

Esta estrategia combina las ventajas de los indicadores de MA e impulso para rastrear tendencias y capturar reversiones. En comparación con las estrategias de seguimiento de tendencias puras, puede ser más flexible para lidiar con diferentes etapas del mercado, evitando las pérdidas del clímax de la tendencia mientras se mantiene el comercio de tendencia. Se pueden realizar mejoras adicionales a través de la optimización de parámetros e introducción de condiciones auxiliares. En general, la estrategia tiene una lógica clara y simple, muy adecuada para que los principiantes en el comercio de algo aprendan y apliquen.


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

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(open, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"])

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
adxthreshold = input(20, title="ADX threshold")

dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	
sig = adx(dilen, adxlen)

//study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="")

//plot(sig, color=color.red, title="ADX")

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


//longCondition = price1> price2
longCondition = price1> price2 and sig > adxthreshold
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = price1 < price2 and sig > adxthreshold
if (shortCondition)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1] and sig > adxthreshold
if (longexitCondition)
    strategy.close("Long")
    
    



Más.