El sistema Double EMA Crossover es un sistema de trading basado en dos promedios móviles exponenciales (EMA). Utiliza dos EMA con períodos diferentes para determinar la dirección de la tendencia actual y generar señales comerciales en consecuencia.
El núcleo de este sistema se basa en dos EMA, una más rápida y otra más lenta. Cuando la EMA rápida está por encima de la EMA lenta, se considera alcista.
Basándose en la relación de los precios con las dos EMA, las barras pueden clasificarse en diferentes zonas de negociación:
Cuando la EMA rápida está por encima de la EMA lenta y el precio está por encima de la EMA rápida (G1), es una zona de compra fuerte, se puede tomar una posición larga aquí.
Cuando la EMA rápida está por debajo de la EMA lenta y el precio está por debajo de la EMA rápida (R1), es una zona de venta fuerte, se puede tomar una posición corta aquí.
Cuando las dos EMA se cruzan, las zonas de advertencia (amarilla) y de transición (naranja) se determinan en función de la relación de los precios con las dos EMA.
Las señales comerciales se generan cuando el precio se mueve a través de diferentes zonas. En las zonas fuertes G1 y R1, las señales se pueden tomar directamente. En las zonas de advertencia y transición, se requiere confirmación adicional del indicador.
Las lecturas de sobreventa y sobrecompra de StochRSI pueden proporcionar señales adicionales de compra y venta.
Lógica simple y limpia que es fácil de entender e implementar
Captura eficazmente las tendencias a medio y largo plazo
Distingue las zonas fuertes de las zonas de alerta/transición, produciendo señales comerciales fiables
La inclusión de StochRSI mejora aún más los tiempos de entrada y salida
Como un sistema de seguimiento de tendencias puras, el rendimiento puede sufrir en los mercados no tendencia
La configuración inadecuada de los períodos de EMA puede provocar señales falsas
Las zonas de alerta y de transición conllevan mayores riesgos comerciales y deben tratarse con precaución
La falta de stop loss puede dar lugar a pérdidas acentuadas
Los riesgos pueden reducirse:
Selección de instrumentos con tendencias fuertes y pausa de la negociación cuando la tendencia es débil
Optimización de los períodos de EMA para minimizar las señales falsas
Introducción de indicadores adicionales para la confirmación en las zonas de alerta/transición
Implementación de un stop loss para controlar las pérdidas por operación
El sistema puede mejorarse aún más en los siguientes ámbitos:
Incorporar más indicadores como MACD, KDJ para la confirmación de la señal
Añadir filtros como la expansión del volumen en las zonas comerciales para mejorar la tasa de éxito comercial
Ajustar dinámicamente los períodos de EMA en función de las condiciones del mercado para los parámetros optimizados
Implementar estrategias de stop loss para salir de operaciones con ciertos porcentajes de pérdida
Optimizar el tamaño de las posiciones y la gestión del dinero
Prueba y ajuste fino de los parámetros en diferentes instrumentos para encontrar las mejores configuraciones
Al introducir más confirmación de señales, optimización de parámetros dinámicos, stop loss y una gestión adecuada del dinero, se puede mejorar la robustez del sistema y reducir los riesgos para obtener mejores resultados.
El sistema Double EMA Crossover es un sistema de seguimiento de tendencias basado en la comparación de dos EMA. Identifica diferentes zonas de negociación basadas en la relación del precio con las EMA para determinar la dirección de la tendencia y generar señales de negociación. Como un sistema con lógica clara y fácil implementación, puede capturar efectivamente las tendencias. Si bien existen riesgos, pueden reducirse a través de indicadores auxiliares, optimización dinámica, stop loss y gestión de dinero.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Vvaz_ //base-on CDC ActionZone By Piriya a simple 2EMA and is most suitable for use with medium volatility market //@version=4 strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2) //variable srcf = input(title="Source",type=input.source,defval=close) tffix = input(title="Fixed Timeframe",type=input.bool,defval=true) tfn = input(title="Timeframe in",type=input.resolution,defval="D") ema1 = input(title="Fast EMA",type=input.integer,defval=12) ema2 = input(title="Slow EMA",type=input.integer,defval=26) ema3 = input(title="EMA 100",type=input.bool,defval=true) smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2) fillbar =input(title="Fill Bar Color",type=input.bool,defval=true) emasw = input(title="Show EMA",type=input.bool,defval=true) bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true) plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true) plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2) //math xcross =ema(srcf,smooter) efast = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1) eslow = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2) ema3x = ema(xcross,100) //Zone Bull = efast > eslow Bear = efast < eslow G1 = Bull and xcross > efast //buy G2 = Bear and xcross > efast and xcross > eslow //pre-buy1 G3 = Bear and xcross > efast and xcross < eslow //pre-buy2 R1 = Bear and xcross < efast //sell R2 = Bull and xcross < efast and xcross < eslow //pre-sell1 R3 = Bull and xcross < efast and xcross > eslow //pre-sell2 //color bcl = G1 ? color.green : G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black barcolor(color=fillbar ? bcl : na ) //plots line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white) line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green) line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red) fillcl = Bull ? color.green : Bear ? color.red : color.black fill(line2,line3,fillcl) //actions buywhen = G1 and G1[1]==0 sellwhen = R1 and R1[1]==0 bullish = barssince(buywhen) < barssince(sellwhen) bearish = barssince(sellwhen) < barssince(buywhen) buy = bearish[1] and buywhen sell = bullish[1] and sellwhen bullbearcl = bullish ? color.green : bearish ? color.red : color.black //plot trend plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green) plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red) // Momentum Signal using StochRSI smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1) smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1) RSIlen = input(14,"RSI length",type=input.integer,minval=1) STOlen = input(14,"Stochastic length",type=input.integer,minval=1) SRsrc = input(close,"Source for StochasticRSI",type=input.source) OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00) OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00) rsil = rsi(SRsrc,RSIlen) K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK) D = sma(K,smoothD) buymore = iff( bullish ,iff(D < OSlel and crossover(K,D), 2, iff(D > OSlel and crossover(K,D), 1,0)),0) sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D), 2, iff(D < OBlel and crossunder(K,D), 1,0)),0) //plot momentum plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green) plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2009, title = "From Year", minval = 2009) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" //stratgy excuter strategy.entry("Long",true,when=window() and buy or buymore) strategy.close("Long",when=window() and sell or sellmore,comment="TP Long") strategy.entry("Short",false,when=window() and sell or sellmore) strategy.close("Short",when=window() and buy or buymore,comment="TP Short")