Estrategia de cruce de promedio móvil de Larry Williams

El autor:¿ Qué pasa?, Fecha: 2023-12-26 15:03:16
Las etiquetas:

img

Resumen general

Esta es una estrategia simple y clásica de cruce de promedios móviles creada por el famoso operador Larry Williams. La estrategia utiliza promedios móviles simples de 9 días como línea rápida y promedios móviles exponenciales de 21 días como línea lenta.

Estrategia lógica

La estrategia se basa en el cruce dorado y cruce de muerte de los promedios móviles para determinar oportunidades largas y cortas. Cuando la línea rápida se rompe por encima de la línea lenta desde abajo, es un cruce dorado, lo que indica un cambio a una tendencia alcista. Tal ruptura se utiliza para ir largo. Cuando la línea rápida se rompe por debajo de la línea lenta desde arriba, es un cruce de muerte, lo que indica un cambio a una tendencia bajista.

Para evitar falsas rupturas que conducen a pérdidas virtuales, la línea de 21 días también se utiliza para determinar la tendencia principal. Solo cuando la línea rápida se rompe y el precio también rompe la línea de 21 días, se tomarán acciones comerciales. Esto puede filtrar efectivamente muchas rupturas falsas.

Específicamente, la señal larga se activa cuando: la línea rápida se rompe por encima del máximo de ayer y se rompe por encima de la línea de 21 días. La señal corta se activa cuando: la línea rápida se rompe por debajo del mínimo de ayer y se rompe por debajo de la línea de 21 días.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. La idea de la estrategia es simple y fácil de entender e implementar.
  2. La técnica de la media móvil es madura y ampliamente utilizada.
  3. La introducción de la línea de 21 días filtra efectivamente las fallas.
  4. Usar los puntos extremos de ayer para entrar en posiciones puede evitar quedar atrapados.
  5. Los parámetros estratégicos son relativamente robustos sin sobreajuste fácil.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. En los mercados volátiles, las medias móviles se retrasan y pueden perder los mejores puntos de entrada.
  2. En los mercados de rango con acción lateral de los precios, pueden producirse pérdidas pequeñas frecuentes.
  3. No puede responder eficazmente a eventos repentinos y cambios significativos de tendencia.

Para hacer frente a estos riesgos, se pueden realizar optimizaciones en los siguientes aspectos:

  1. Introduzca el indicador MACD para más señales en tiempo real.
  2. Aumentar los parámetros del período de gestión del mercado para reducir la frecuencia de operaciones.
  3. Añadir estrategias de stop loss para controlar el monto de pérdida de una sola operación.

Direcciones de optimización

Las principales direcciones de optimización para esta estrategia incluyen:

  1. Optimización de parámetros: se pueden utilizar métodos más sistemáticos para probar diferentes combinaciones de períodos de MA para encontrar mejores parámetros.

  2. Agregue stop loss. Establezca el stop loss móvil adecuado, el stop loss porcentual, etc. para controlar eficazmente la pérdida de una sola operación.

  3. Combinar otros indicadores, introducir señales del MACD, ATR, KD, etc. para obtener más dimensiones de confirmación y mejorar la estabilidad de la estrategia.

  4. Investigar diferentes tipos de métodos de salida como salidas de señal de reversión, salidas de movimiento para obtener beneficios, etc.

Conclusión

En resumen, esta estrategia de cruce de promedios móviles es una estrategia de seguimiento de tendencias muy típica y práctica. Tiene la ventaja de ser fácil de entender e implementar, y también tiene margen de mejora. A través de métodos como optimización de parámetros, optimización de pérdidas de parada, combinación de múltiples indicadores, etc., se pueden hacer mejoras continuas para convertirlo en un sistema de trading más estable y práctico.


// @_benac
//@version=5
strategy('Larry', overlay=true , initial_capital=1000 )


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                 Codigo Operacional                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

// Usage for Stocks , or Criptos with value bigger then 1, cuz of 0.01 ´pip.
// Daily timeframe
//Observation Point
start     = timestamp(2020, 00, 00, 00, 00)         // backtest start window
finish    = timestamp(2022, 01, 07, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"  

if time < start 
    strategy.close_all("Closing All")

// Take infos from inputs. 
inp_mmshort = input.int(defval = 9, title = "Media Curta"  )
inp_mminter = input.int(defval = 21, title = "Media Curta"  )

// Risk Manager, here define max and min 
inp_max = input.int(defval = 15, title = "Percentual Ganho"  )
inp_min = input.int(defval = 5, title = "Percental  Perda"  )

// Converting the input to % 
pmax = (inp_max / 100 )
pmin =  (inp_min / 100)

// Infos From Moving Average
mm_short = ta.sma(close , inp_mmshort)
mm_inter = ta.ema(close , inp_mminter)


// Trend Logic
//Long Condition 

//Setup do Larry Willians Bem Simples , media virou para cima e rompeu a maxima de referencia, compra. 
tendencia_alta = mm_short[2] > mm_short[1] and mm_short > mm_short[1] and close > high[1] and close > mm_short and mm_short > mm_inter
tendencia_baixa = mm_short[2] < mm_short[1] and mm_short < mm_short[1] and close > low[1] and close < mm_short and mm_short < mm_inter

// Creating the entry
if tendencia_alta 
    strategy.entry("Compra" , strategy.long , stop = low - 0.01  )
    stop_inst = low - 0.01 
if tendencia_baixa 
    strategy.entry("Venda" , strategy.short , stop= high + 0.01  )
    stop_inst = high + 0.01


// TrailingStop Creation

// Sell Position
if strategy.position_size < 0 
    gain_p = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * pmax) 
    stop_p = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * pmin) 
    // Managing the position
    if close < gain_p 
        strategy.close_all(comment = " 1 - Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    if close > stop_p 
        strategy.close_all(comment = " 2 - Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    
    if  high > mm_short[1]
        strategy.close_all(comment = " 3 - Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
      

// Buy Position    
if strategy.position_size > 0
    gain_p = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * pmax) 
    stop_p = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * pmin) 
    // Managing the position
    if close > gain_p 
        strategy.close_all(comment = " 1- Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    if close < stop_p 
        strategy.close_all(comment = " 2 -Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
    if low < mm_short[1]
        strategy.close_all(comment = " 3 -Ganho : " + str.tostring( gain_p) + " Perda : " + str.tostring( stop_p)  )
        



Más.