Esta estrategia combina el promedio móvil exponencial (EMA) y el indicador de súper tendencia para generar señales de compra y venta. Una señal de compra se genera cuando el precio se rompe por encima de la EMA de 20 días y el indicador de súper tendencia está en una tendencia alcista. Una señal de venta se genera cuando el precio se rompe por debajo de la EMA de 20 días y el indicador de súper tendencia está en una tendencia bajista.
Esta estrategia genera señales de compra y venta mediante la combinación de la EMA de 20 días y el indicador de Supertrend, con el objetivo de capturar las condiciones de tendencia del mercado. Las ventajas de la estrategia se encuentran en su simplicidad y la combinación de la EMA y el indicador de Supertrend, que pueden reducir eficazmente las señales falsas. Sin embargo, en los mercados agitados, la estrategia puede operar con frecuencia y carece de medidas de gestión de riesgos. Las mejoras futuras pueden considerar la incorporación de métodos de stop-loss, dimensionamiento de posiciones y optimización de parámetros para mejorar la estrategia. En general, esta estrategia proporciona un enfoque simple y efectivo de la tendencia de negociación, pero se necesita una mayor optimización y refinamiento para la aplicación práctica.
/*backtest start: 2023-06-11 00:00:00 end: 2024-06-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("20 EMA and Supertrend Strategy", overlay=true) // Inputs emaLength = input(20, title="EMA Length") supertrendMultiplier = input.float(3.0, title="Supertrend Multiplier") supertrendPeriod = input(10, title="Supertrend Period") // EMA Calculation ema = ta.ema(close, emaLength) // Supertrend Calculation Periods = supertrendPeriod src = hl2 Multiplier = supertrendMultiplier changeATR= input.bool(true, title="Change ATR Calculation Method?") showsignals = input.bool(true, title="Show Buy/Sell Signals?") highlighting = input.bool(true, title="Highlighter On/Off?") atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = na(up[1]) ? up : up[1] up := close[1] > up1 ? math.max(up, up1) : up dn = src + (Multiplier * atr) dn1 = na(dn[1]) ? dn : dn[1] dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := na(trend[1]) ? trend : trend[1] trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 plotshape(series=buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0)) plotshape(series=buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.white) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 plotshape(series=sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0)) plotshape(series=sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.white) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1) longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 90) : color.new(color.white, 0)) : color.new(color.white, 0) shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 90) : color.new(color.white, 0)) : color.new(color.white, 0) fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor) alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!") alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!") changeCond = trend != trend[1] alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!") // Buy and Sell Signals based on EMA and Supertrend buySignalEMA = ta.crossover(close, ema) and trend == 1 sellSignalEMA = ta.crossunder(close, ema) and trend == -1 // Plot EMA plot(ema, color=color.blue, title="20 EMA") // Plot Buy and Sell Signals plotshape(series=buySignalEMA, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=sellSignalEMA, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL") // Strategy Entries and Exits if (buySignalEMA) strategy.entry("Buy", strategy.long) if (sellSignalEMA) strategy.close("Buy")