Negociación de tendencias con doble sistema de intercambio de EMA

El autor:¿ Qué pasa?, Fecha: 2023-10-26 17:15:46
Las etiquetas:

img

Resumen general

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.

Cómo funciona

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.

Ventajas

  • 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

Los riesgos

  • 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:

  1. Selección de instrumentos con tendencias fuertes y pausa de la negociación cuando la tendencia es débil

  2. Optimización de los períodos de EMA para minimizar las señales falsas

  3. Introducción de indicadores adicionales para la confirmación en las zonas de alerta/transición

  4. Implementación de un stop loss para controlar las pérdidas por operación

Oportunidades de mejora

El sistema puede mejorarse aún más en los siguientes ámbitos:

  1. Incorporar más indicadores como MACD, KDJ para la confirmación de la señal

  2. Añadir filtros como la expansión del volumen en las zonas comerciales para mejorar la tasa de éxito comercial

  3. Ajustar dinámicamente los períodos de EMA en función de las condiciones del mercado para los parámetros optimizados

  4. Implementar estrategias de stop loss para salir de operaciones con ciertos porcentajes de pérdida

  5. Optimizar el tamaño de las posiciones y la gestión del dinero

  6. 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.

Conclusión

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")




        

Más.