
La idea central de esta estrategia es generar señales de negociación basadas en el cruce de múltiples EMAs. Cuando el EMA de corto plazo está en el EMA de largo plazo, haga más; cuando el EMA de corto plazo está en el EMA de largo plazo, apague. Esta estrategia permite la configuración de varios períodos de EMA, cada EMA puede activarse de forma independiente, y la estrategia se cruza en todos los EMAs activados.
La estrategia establece 8 períodos de EMA, los cuales son: línea 8, 13, 21, 34, 55, 89, 144 y 233. Estos EMA están configurados para que puedan ser activados o desactivados de forma independiente.
Cuando el EMA más corto se cruza con el EMA más largo desde abajo, se genera una señal de compra; cuando el EMA más corto se cruza con el EMA más largo desde arriba hacia abajo, se genera una señal de venta. Si ambos EMA están activados, shorterEMA > longerEMA es una señal múltiple, y shorterEMA < longerEMA es una señal de liquidación.
Por ejemplo, si el EMA de 55 días y el EMA de 89 días están activados, se hace más cuando el EMA de 55 días está sobre el EMA de 89 días; cuando el EMA de 55 días está debajo del EMA de 89 días, se hace un par. Esto permite que esta estrategia ajuste dinámicamente la combinación de EMA utilizada, cambiando de un período más largo a un período más corto, o viceversa.
El número de posiciones se establece como el derecho a la cuenta dividido por el número de grupos de EMA activados. Esto asegura que el tamaño de la posición en cada EMA sea el mismo.
Se puede considerar el uso de EMA en combinación con otros indicadores, como el indicador de canal o el indicador de convulsión para filtrar señales, o en combinación con el indicador de tendencia y el indicador de reversión. Además, la optimización de los parámetros de EMA es muy importante y requiere ajustes para diferentes mercados.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimización de parámetros de la EMA. Se puede encontrar la combinación óptima de parámetros de la EMA a través de la exploración de parámetros y el método de Análisis Avanzado.
Se pueden agregar condiciones de filtración adicionales para evitar señales erróneas, como filtros de volumen de transacción, filtros de fluctuación, etc. en los cruces de EMA.
En combinación con otros indicadores. Se puede combinar la EMA con otros indicadores, como MACD, KDJ, Brin Belt, para aprovechar su complementariedad.
Las posiciones en cada EMA se pueden ajustar dinámicamente según la volatilidad del mercado o la fuerza de la tendencia.
Optimización de la relación de ganancias y pérdidas. Optimización del nivel de parada de pérdidas para encontrar la mejor relación de riesgo y ganancias.
La estrategia en su conjunto es muy sencilla y directa, captando las tendencias a corto y medio plazo a través de EMA cruzados. Su ventaja reside en su alta configurabilidad y flexibilidad, permitiendo a los operadores elegir la combinación de EMA que mejor se adapte a ellos. Sin embargo, los EMA como indicador único son propensos a generar señales erróneas, que es el mayor riesgo de la estrategia.
/*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