Estrategia de seguimiento de tendencias entre mercados basada en el stop loss dinámico bidireccional de la media móvil EMA


Fecha de creación: 2024-01-29 09:57:20 Última modificación: 2024-01-29 09:57:20
Copiar: 0 Número de Visitas: 587
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias entre mercados basada en el stop loss dinámico bidireccional de la media móvil EMA

Descripción general

Esta estrategia se basa en el EMA para realizar un seguimiento bidireccional y establecer una línea de parada de posición larga y corta dinámica para capturar la tendencia.

Principio de estrategia

  1. Cálculo de la línea EMA rápida (día 5) y la línea EMA lenta (día 20)
  2. Hacer más cuando la línea rápida cruza la línea lenta desde abajo; hacer espacio cuando la línea rápida cruza la línea lenta desde arriba
  3. Después de hacer más, establece una línea de stop loss dinámica como precio de entrada(1- porcentaje de pérdidas de la posición larga); después del cierre de la posición, se establece una línea de pérdidas dinámicas como precio de entrada(1 + porcentaje de pérdidas en posiciones cortas)
  4. Una vez que el precio haya activado la línea de stop loss correspondiente, se detiene la salida

Análisis de las ventajas

  1. La EMA tiene una gran capacidad de seguimiento de tendencias, y un cronómetro de formación de cruces bidireccionales que puede bloquear oportunidades de tendencias de manera efectiva
  2. Calculación dinámica de las líneas de stop loss, que se colocan en el mercado una vez que se obtienen ganancias, para maximizar los beneficios de la tendencia
  3. El uso de vWAP como condición de filtración adicional para evitar el enchufe y mejorar la calidad de la señal

Análisis de riesgos

  1. Las estrategias de tendencia pura, fácilmente engañadas en momentos de fluctuaciones
  2. El cierre de pérdidas es demasiado flexible y puede aumentar las pérdidas
  3. La latencia de la señal de generación de la EMA media puede haber perdido el punto óptimo de la operación

Se puede optimizar mediante el uso de ATR para el control de riesgos, la optimización de la estrategia de corto plazo para detener los pérdidas, o en combinación con otros indicadores para filtrar el ruido de las transacciones.

Dirección de optimización

  1. Combinación de indicadores de stop loss dinámicos como ATR o DONCH para establecer una línea de stop loss más adecuada para el mercado
  2. La adición de otras señales de filtro de indicadores técnicos, como MACD, KDJ, etc., reduce el error de entrada y salida
  3. Parámetros de optimización para encontrar la combinación de longitud de línea media rápida y lenta óptima
  4. Se puede probar un método de aprendizaje automático para encontrar el parámetro óptimo.

Resumir

Esta estrategia en su conjunto es una estrategia de seguimiento de tendencias muy típica. Los EMA dobles forman un tenedor de oro, un stop loss dinámico, que puede bloquear efectivamente la tendencia a la ganancia. Al mismo tiempo, existe un cierto riesgo de atraso y el riesgo de un stop loss demasiado amplio. Se puede obtener un mejor rendimiento de la estrategia mediante la optimización de parámetros, la gestión de riesgos y el filtrado de señales.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy("EMA Crossover Strategy", shorttitle="EMAC", overlay=true,calc_on_every_tick=true)

// Input parameters
shortEmaLength = input(5, title="Short EMA Length")
longEmaLength = input(20, title="Long EMA Length")
priceEmaLength = input(1, title="Price EMA Length")

// Set stop loss level with input options (optional)
longLossPerc = input.float(0.05, title="Long Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

shortLossPerc = input.float(0.05, title="Short Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

// Calculating indicators
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
//priceEma = ta.ema(close, priceEmaLength)
vwap = ta.vwap(close)

// Long entry conditions
longCondition = ta.crossover(shortEma, longEma) and close > vwap
// Short entry conditions
shortCondition = ta.crossunder(shortEma, longEma) and close > vwap

// STEP 2:
// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


if (longCondition)
    strategy.entry("Enter Long", strategy.long)
    strategy.exit("Exit Long",from_entry = "Enter Long",stop= longStopPrice)
plotshape(series=longCondition, title="Long Signal", color=color.green, style=shape.triangleup, location=location.belowbar)


if (shortCondition)
    strategy.entry("Enter Short", strategy.short)
    strategy.exit("Exit Short", from_entry = "Enter Short",stop = shortStopPrice)
plotshape(series=shortCondition, title="Short Signal", color=color.red, style=shape.triangledown, location=location.abovebar)

// Stop loss levels
//longStopLoss = (1 - stopLossPercent) * close
//shortStopLoss = (1 + stopLossPercent) * close

// Exit conditions
//strategy.exit("Long", from_entry="Long", loss=longStopLoss)
//strategy.exit("Short", from_entry="Short", loss=shortStopLoss)

// Plotting indicators on the chart
plot(shortEma, color=color.yellow, title="Short EMA")
plot(longEma, color=color.green, title="Long EMA")
plot(close, color=color.black, title="Close")
plot(vwap, color=color.purple, title="VWAP")

// Plot stop loss values for confirmation
plot(strategy.position_size > 0 ? longStopPrice : na,
     color=color.red, style=plot.style_line,
     linewidth=2, title="Long Stop Loss")

plot(strategy.position_size < 0 ? shortStopPrice : na,
     color=color.blue, style=plot.style_line,
     linewidth=2, title="Short Stop Loss")
// Plotting stop loss lines
//plot(longStopLoss, color=color.red, title="Long Stop Loss", linewidth=2, style=plot.style_line)
//plot(shortStopLoss, color=color.aqua, title="Short Stop Loss", linewidth=2, style=plot.style_line)