En la carga de los recursos... Cargando...

Estrategia de negociación cruzada de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2023-11-02 14:21:24
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el cruce de medias móviles duales como señales de negociación, combinadas con paradas ATR para la tendencia después de la negociación.

Estrategia lógica

La estrategia utiliza principalmente dos conjuntos de promedios móviles para determinar la dirección de la tendencia. El promedio móvil rápido tiene una duración de 25 días, y el promedio móvil lento tiene una duración de 100 días.

Para filtrar algunas señales falsas, la estrategia agrega un contador de cruce llamado crossCount. Las señales solo se activan cuando el número de cruces para el MA rápido en el período de retroceso (default 25 días) es menor que maxNoCross (default 10).

Además, la estrategia tiene un mecanismo de confirmación, donde la señal también se confirma si el precio vuelve a entrar entre las dos medias móviles después de la señal inicial.

Después de ingresar posiciones, la estrategia utiliza ATR para establecer niveles de stop loss. ATR mide el rango de fluctuación de precios durante un cierto período, y aquí su 14x se utiliza como la distancia de parada. El nivel de parada flota de acuerdo con el movimiento del precio.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Utilizando dos cruces de MA con filtro, puede capturar eficazmente los movimientos de tendencia fuertes evitando señales falsas.

  2. El mecanismo de confirmación evita ser falsificado por falsas fugas.

  3. El ATR flotante ayuda a maximizar las ganancias al tiempo que limita las reducciones.

  4. Tiene pocos parámetros optimizables y es fácil de implementar.

  5. Aplicable en todos los mercados, incluidos los criptoactivos y los activos tradicionales.

  6. Combina varios indicadores técnicos de robustez.

Análisis de riesgos

Los principales riesgos de la estrategia incluyen:

  1. Los cruces frecuentes de MA durante los períodos de alcance pueden causar pérdidas múltiples.

  2. El ajuste incorrecto de los parámetros ATR puede dar lugar a que las paradas sean demasiado anchas o demasiado apretadas.

  3. Las grandes brechas pueden desencadenar directamente paradas.

  4. Los acontecimientos noticiosos importantes que causan una gran volatilidad también pueden detener las posiciones.

  5. Los parámetros MA inadecuados podrían dar lugar a tendencias faltantes o a demasiadas señales falsas.

  6. La acción reciente de los precios puede hacer que las paradas ATR sean obsoletas.

Direcciones de optimización

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

  1. Optimizar los parámetros de MA para encontrar mejores combinaciones, probando diferentes períodos y promedios ponderados.

  2. Prueba diferentes períodos de ATR para encontrar mejores distancias de parada.

  3. Añadir filtros adicionales como picos de volumen, indicadores de volatilidad para mejorar la calidad de la señal.

  4. Incorpore métricas de tendencia para evitar problemas en mercados agitados.

  5. Añadir algoritmos de aprendizaje automático para optimizar automáticamente los parámetros a través de backtesting.

  6. Busque más confirmación en plazos más largos para evitar ruido a corto plazo.

  7. Implementar las reglas de toma de beneficios escalonadas para escalar fuera de las posiciones rentables.

Resumen de las actividades

Esta estrategia combina dos cruces MA, filtrado de tendencias, confirmación y paradas ATR dinámicas para seguir una tendencia robusta.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)

//MA's for basic signals, can experiment with these values

fastEMA = sma(close, 25)
slowEMA = sma(close, 100)

//Parameters for validation of position

lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets

//Amount of crosses on MA to filter out noise

ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)

//Entries long

agrLong =  ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false

//Entries short

agrShort =  ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false

//ATR

atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15",  title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))

//Strategy

longCondition = ((agrLong or consLong) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)

//Stop multiplier 

stopMult = 4

//horizontal stoplosses

longStop = na
longStop :=  shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] 
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]

//Strategy exit functions

strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)

//Plots 

redgreen = (fastEMA > slowEMA) ? green : red
    
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) 
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) 
fill(p1, p2, color=redgreen)

s1 = plot(longStop, style=linebr, color=red, linewidth=2,     title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2,  title='Short ATR Stop')

fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)





    




Más.