Estrategia dinámica de cruce entre SMMA y SMA

El autor:¿ Qué pasa?, Fecha: 2024-02-02 11:38:08
Las etiquetas:

img

Resumen general

Esta estrategia utiliza las señales de cruce entre el promedio móvil suavizado de 50 períodos (SMMA) y el promedio móvil simple de 20 períodos (SMA) para determinar entradas y salidas. Genera señales de compra cuando la línea SMA rápida cruza por encima de la línea SMMA lenta, y genera señales de venta cuando la SMA cruza por debajo de la SMMA lenta. Al mismo tiempo, la estrategia prefiere niveles fijos de toma de ganancias y stop loss dinámicos para bloquear las ganancias y controlar el riesgo.

Estrategia lógica

  1. Calcular y trazar el SMMA de 50 períodos y el SMA de 20 períodos.
  2. Cuando la SMA cruza por encima de la SMMA desde abajo, se genera una señal de compra.
  3. En caso de que se produzcan señales de compra y venta, establecer posiciones Comprar y Vender, respectivamente.
  4. Establezca un nivel fijo de ganancia de 150 ticks para cada posición.
  5. Establecer un nivel de stop loss dinámico al precio de cierre de la siguiente barra después de la barra de señal.
  6. Si el precio alcanza el nivel de take profit, se produce el take profit.

Los puntos fuertes

  1. Las estrategias de media móvil dual son fáciles de operar con principios simples y fáciles de entender.
  2. La SMMA es una mejora respecto a la SMA para captar mejor las tendencias.
  3. La combinación de SMA y SMMA de diferentes períodos ayuda a filtrar el ruido mientras se captan las tendencias.
  4. La adopción de un stop loss dinámico puede ajustar el nivel de stop en función de los cambios del mercado para controlar eficazmente los riesgos.
  5. El nivel de toma de ganancias preestablecido ayuda a bloquear las ganancias de manera oportuna.

Los riesgos

  1. Las estrategias de promedios móviles dobles tienden a generar señales falsas y ser golpeadas.
  2. Se puede considerar mover la utilidad o la utilidad basada en la proporción de utilidad.
  3. En condiciones volátiles, el stop loss dinámico puede acercarse demasiado al precio de mercado, por lo que debe considerarse ampliar adecuadamente el rango de stop loss.
  4. Las diferencias entre productos y plazos requieren atención.

Direcciones de optimización

  1. Prueba de combinaciones de diferentes parámetros (períodos de ciclo, criterios de filtro, etc.) para encontrar el óptimo.

  2. Incorpore otros factores como picos de volumen para filtrar las señales.

  3. Emplear herramientas de optimización de parámetros para encontrar parámetros óptimos.

  4. Considere la integración de otros métodos de toma de ganancias como las salidas basadas en la parada de seguimiento o la relación de ganancias.

  5. Calcular el intervalo dinámico de pérdidas de detención basado en la volatilidad del mercado.

Conclusión

Esta estrategia tiene una lógica relativamente simple, capturando las direcciones de tendencia a través de medias móviles duales. El uso flexible de beneficios fijos y stop loss dinámicos para la toma de beneficios y el control de riesgos logra un equilibrio entre riesgo y recompensa.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("50 SMMA and 20 SMA Crossover with TP and SL", overlay=true)

// Define 50 SMMA
smma50 = sma(close, 50)

// Define 20 SMA
sma20 = sma(close, 20)

// Plotting the SMMA and SMA
plot(smma50, color=color.blue, title="50 SMMA")
plot(sma20, color=color.red, title="20 SMA")

// Initialize TP and SL variables
tp = 150
var float sl_price = na

// Buy Signal
buySignal = crossover(sma20, smma50)
strategy.entry("Buy", strategy.long, when = buySignal)
strategy.exit("Take Profit/Stop Loss", from_entry="Buy", profit=tp, loss=sl_price)

// Sell Signal
sellSignal = crossunder(sma20, smma50)
strategy.entry("Sell", strategy.short, when = sellSignal)
strategy.exit("Take Profit/Stop Loss", from_entry="Sell", profit=tp, loss=sl_price)

// Update stop loss level on every crossover
if (buySignal or sellSignal)
    sl_price := close[bar_index + 1]

// Plot Stop Loss level
plotshape(series=sl_price != na, title="Stop Loss Level", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)


Más.