Estrategia de negociación dinámica de la EMA de varios plazos

El autor:¿ Qué pasa?, Fecha: 2023-12-12 12:18:41
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es generar señales comerciales basadas en el cruce de múltiples promedios móviles exponenciales (EMA). Se hace largo cuando la EMA a corto plazo cruza la EMA a largo plazo desde abajo, y cierra posiciones cuando la EMA a corto plazo cruza la EMA a largo plazo. Esta estrategia permite configurar múltiples períodos de EMA, y cada EMA se puede habilitar de forma independiente. La estrategia operará cruces en todas las EMA habilitadas.

Nombre de la estrategia

Estrategia de negociación dinámica de la EMA de varios plazos

Principio de la estrategia

La estrategia establece 8 períodos de EMA: 8 días, 13 días, 21 días, 34 días, 55 días, 89 días, 144 días y 233 días.

Se generan señales largas cuando la EMA a corto plazo cruza la EMA a largo plazo desde abajo. Se generan señales de salida cuando la EMA a corto plazo cruza la EMA a largo plazo desde arriba.

Por ejemplo, si se habilitan la EMA de 55 días y la EMA de 89 días, la estrategia se prolongará cuando la EMA de 55 días cruce la EMA de 89 días, y saldrá cuando la EMA de 55 días cruce la EMA de 89 días. Esto permite a la estrategia ajustar dinámicamente las combinaciones de EMA utilizadas, cambiando de marcos de tiempo más largos a más cortos o viceversa.

El tamaño de las posiciones se establece en función del capital de la cuenta dividido por el cierre dividido por el número de EMA habilitados.

Análisis de ventajas

  • Flexibilidad para ajustar los plazos mediante la configuración de diferentes EMA
  • Cada EMA puede activarse o desactivarse de forma independiente, altamente personalizable
  • Posiciones distribuidas de manera uniforme entre las AEM, beneficiosas para la gestión del riesgo
  • Utiliza múltiples EMA, puede cambiar a EMA más adecuadas para diferentes etapas del mercado
  • Lógica simple y clara, fácil de entender y depurar

Análisis de riesgos

  • La EMA por sí sola no puede determinar la estructura del mercado, propensa a señales falsas
  • Los mercados de la sierra conducen a cruces excesivos de la EMA, aumentando la frecuencia de las operaciones y el coste del deslizamiento
  • Necesidades de optimización de los parámetros de la EMA para diferentes mercados
  • Puede necesitar otros indicadores para confirmar las señales

Considere combinar EMA con otros indicadores, por ejemplo, canales u osciladores para filtrar señales, o incorporar indicadores de tendencia y reversión.

Direcciones de optimización

La estrategia se puede optimizar en varios aspectos:

  1. Optimice los parámetros de la EMA mediante el escaneo de parámetros y el análisis de avanzada para encontrar las mejores combinaciones de la EMA.

  2. Añadir condiciones de filtro en los cruces de la EMA para evitar señales falsas, por ejemplo, filtro de volumen, filtro de volatilidad, etc.

  3. Combina con otros indicadores como MACD, KDJ, Bandas de Bollinger para aprovechar la complementariedad.

  4. Ajustar dinámicamente el tamaño de las posiciones en cada EMA en función de la volatilidad del mercado o la fuerza de la tendencia.

  5. Optimizar los niveles de stop loss y obtener ganancias para lograr la mejor relación riesgo-recompensa.

Conclusión

En general, esta es una estrategia muy simple y directa que genera señales de los cruces de la EMA para captar tendencias a corto y mediano plazo. Su principal ventaja radica en la alta configurabilidad y flexibilidad para permitir a los operadores seleccionar las EMA adecuadas para ellos. Sin embargo, la EMA sola puede dar señales falsas fácilmente, lo que es el mayor riesgo. La combinación con otros indicadores y la optimización de parámetros puede conducir a un mejor rendimiento comercial.


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

//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)

// Revision:        1
// Author:          @ToS_MavericK

buyprice = 0.0
buyprice := buyprice[1]

// === INPUT SMA ===
EMA1  = input(8)
EMA2  = input(13)
EMA3  = input(21)
EMA4  = input(34)
EMA5  = input(55)
EMA6  = input(89)
EMA7  = input(144)
EMA8  = input(233)

EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)

//Profit  = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss    = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
FromMonth   = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear    = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay   = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear  = input(defval = 2020, title = "To Year", minval = 2012)


// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)

count = -1
if (EnableEMA1 == true)
    count := count + 1
if (EnableEMA2 == true)
    count := count + 1
if (EnableEMA3 == true)
    count := count + 1
if (EnableEMA4 == true)
    count := count + 1
if (EnableEMA5 == true)
    count := count + 1
if (EnableEMA6 == true)
    count := count + 1
if (EnableEMA7 == true)
    count := count + 1
if (EnableEMA8 == true)
    count := count + 1

// set position size
Amount = 1 / (close * count)

// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))

strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))

strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))

strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))

strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))

strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))

strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))

plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line)  // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line)    // plot SlowMA

//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line)    // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line)    // plot SlowMA


Más.