Estrategia dinámica de detención de la media móvil doble

El autor:¿ Qué pasa?, Fecha: 2024-02-26 11:13:17
Las etiquetas:

img

Resumen general

Esta es una estrategia dinámica de stop trailing basada en líneas de EMA duales. Utiliza EMAs de 9 días y 20 días para determinar la dirección de la tendencia del mercado, combinado con el indicador RSI para filtrar falsas rupturas. También utiliza el indicador ATR para calcular niveles de stop loss dinámicos y tomar ganancias. Esta estrategia es adecuada para tenencias a medio y largo plazo.

Estrategia lógica

La estrategia utiliza la EMA de 9 días como línea a corto plazo y la EMA de 20 días como línea a mediano plazo para determinar la tendencia de precios. Se hace largo cuando el precio cruza por encima de la línea a corto plazo y el precio de cierre es mayor que el máximo del día anterior, con un RSI inferior a 70 y cierre superior a la EMA de 20 días menos 1 ATR. Se hace corto cuando el precio cruza por debajo de la línea a corto plazo y el precio de cierre es menor que el mínimo del día anterior, con un RSI superior a 30 y cierre superior a la EMA de 20 días menos 1 ATR.

El stop loss se establece en el precio de cierre menos 1.5 veces ATR. El take profit se establece en el precio de cierre más ATR multiplicado por un coeficiente de take profit. También utiliza 2 veces ATR para establecer el stop loss que sigue a la tendencia.

Análisis de ventajas

  1. El uso de EMAs duales para determinar las principales tendencias del mercado, evita la presión del ruido
  2. Combinando el indicador de RSI para filtrar las fallas, mejora la precisión de entrada
  3. Las operaciones de stop loss y take profit se adaptan a la volatilidad del mercado
  4. El seguimiento de la tendencia de stop loss maximiza las ganancias

Análisis de riesgos

  1. Las líneas EMA tienen un efecto de retraso, pueden perder oportunidades a corto plazo
  2. La configuración incorrecta del parámetro RSI puede perder entradas
  3. La relación stop loss/take profit puede ser demasiado flexible o estricta.
  4. Las pérdidas de detención pueden ser penetradas durante violentas oscilaciones del mercado

Direcciones de optimización

  1. Prueba diferentes combinaciones de EMA para encontrar parámetros óptimos
  2. Optimizar los parámetros del RSI para equilibrar la precisión de entrada y las oportunidades de captura
  3. Prueba diferentes relaciones stop loss/take profit para encontrar la configuración óptima
  4. Añadir más condiciones de filtro para reducir la probabilidad de penetración de pérdida de parada

Resumen de las actividades

En general, esta es una estrategia de tenencia relativamente estable de mediano a largo plazo. Utiliza EMAs duales para determinar la tendencia principal del mercado, evitando verse afectado por el ruido a corto plazo. La adición de RSI también filtra las roturas falsas hasta cierto punto. Además, el mecanismo dinámico de stop loss / take profit permite que la estrategia se ajuste en función de la volatilidad del mercado. Sin embargo, todavía hay riesgos como el retraso de los promedios móviles y el potencial de penetración de stop loss. Necesitamos encontrar la configuración óptima a través del ajuste de parámetros y la optimización durante la aplicación práctica.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("CJTrade", overlay=true)

short = ema(close, 9)
medium = ema(close, 20)
long = ema(close, 50)
very_long = ema(close, 200)

plot(short, color=color.gray, linewidth=1)
plot(medium, color=color.red, linewidth=1)
plot(long, color=color.black, linewidth=1)
plot(very_long, color=color.blue, linewidth=1)

rsiValue = rsi(close, 14)

near20EMA = close > medium - atr(14)

longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA
shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA

strategy.entry("Long", strategy.long, when=longCond)
strategy.entry("Short", strategy.short, when=shortCond)

atrValue = atr(14)
stopLossLevel = close - atrValue * 1.5

// Dynamic take profit level based on ATR
takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1)
takeProfitLevel = close + atrValue * takeProfitMultiplier

// Trailing stop loss for long positions
longTrailingStop = close - atrValue * 2
strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop)

// Trailing stop loss for short positions
shortTrailingStop = close + atrValue * 2
strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop)

strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)


Más.