La idea central de esta estrategia es construir una señal de trading
Esta estrategia utiliza múltiples EMA con períodos diferentes, específicamente:
Los cruces de líneas rápidas son de color azul (arriba) y naranja (abajo). Los cruces de líneas lentas son de color verde (arriba) y rojo (abajo). Cuando las líneas azules rápidas pasan de gris a líneas verdes lentas, se generan señales largas, y viceversa, de verde a gris para cerrar largas; las transiciones de gris a rojo generan señales cortas.
La estrategia también proporciona dos modos: el modo estable solo opera después de que las EMA rápidas y lentas determinen la dirección; el modo agresivo genera señales sobre cualquier cambio direccional rápido de la EMA.
Esta estrategia combina las ventajas de un sistema de media móvil dual, que puede capturar oportunamente las oportunidades de negociación en plazos más cortos, al tiempo que utiliza líneas más lentas para filtrar señales falsas excesivas.
También hay algunos riesgos:
Los riesgos pueden controlarse ajustando las combinaciones de EMA rápida/lenta o utilizando stop losses.
La estrategia puede mejorarse en varios aspectos:
La estrategia Super Guppy considera sintéticamente factores a través de múltiples marcos de tiempo, mejorando la rentabilidad mientras controla los riesgos.
/*backtest start: 2023-11-13 00:00:00 end: 2023-11-20 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // A strategized version Daryl Guppy Super EMA's with additional options // by default "early signals" is enabled, which will trade any green/gray or red/gray transitions of the guppy. Disable to only take longs while green, and shorts while red. //@version=4 strategy(title="Super Guppy Strategy", shorttitle="Super Guppy Strat", overlay = true, initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0) useShorts = input(true, "Test w/Shorts?") useEarlySignals = input(true, "Use Early Signals?") show200Ema = input(false, "Show 200 EMA?") daysBackMax = input(defval = 100000, title = "Max Days Back to Test", minval = 0) daysBackMin = input(defval = 0, title = "Min Days Back to Test", minval = 0) msBackMax = 1000 * 60 * 60 * 24 * daysBackMax msBackMin = 1000 * 60 * 60 * 24 * daysBackMin src = close, len1 = input(3, minval=1, title="Fast EMA 1") len2 = input(6, minval=1, title="Fast EMA 2") len3 = input(9, minval=1, title="Fast EMA 3") len4 = input(12, minval=1, title="Fast EMA 4") len5 = input(15, minval=1, title="Fast EMA 5") len6 = input(18, minval=1, title="Fast EMA 6") len7 = input(21, minval=1, title="Fast EMA 7") //Slow EMA len8 = input(24, minval=1, title="Slow EMA 8") len9 = input(27, minval=1, title="Slow EMA 9") len10 = input(30, minval=1, title="Slow EMA 10") len11 = input(33, minval=1, title="Slow EMA 11") len12 = input(36, minval=1, title="Slow EMA 12") len13 = input(39, minval=1, title="Slow EMA 13") len14 = input(42, minval=1, title="Slow EMA 14") len15 = input(45, minval=1, title="Slow EMA 15") len16 = input(48, minval=1, title="Slow EMA 16") len17 = input(51, minval=1, title="Slow EMA 17") len18 = input(54, minval=1, title="Slow EMA 18") len19 = input(57, minval=1, title="Slow EMA 19") len20 = input(60, minval=1, title="Slow EMA 20") len21 = input(63, minval=1, title="Slow EMA 21") len22 = input(66, minval=1, title="Slow EMA 22") len23 = input(200, minval=1, title="EMA 200") //Fast EMA ema1 = ema(src, len1) ema2 = ema(src, len2) ema3 = ema(src, len3) ema4 = ema(src, len4) ema5 = ema(src, len5) ema6 = ema(src, len6) ema7 = ema(src, len7) //Slow EMA ema8 = ema(src, len8) ema9 = ema(src, len9) ema10 = ema(src, len10) ema11 = ema(src, len11) ema12 = ema(src, len12) ema13 = ema(src, len13) ema14 = ema(src, len14) ema15 = ema(src, len15) ema16 = ema(src, len16) ema17 = ema(src, len17) ema18 = ema(src, len18) ema19 = ema(src, len19) ema20 = ema(src, len20) ema21 = ema(src, len21) ema22 = ema(src, len22) //EMA 200 ema23 = ema(src, len23) //Fast EMA Color Rules colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6 and ema6 > ema7) colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6 and ema6 < ema7) //Slow EMA Color Rules colslowL = ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12 and ema12 > ema13 and ema13 > ema14 and ema14 > ema15 and ema15 > ema16 and ema16 > ema17 and ema17 > ema18 and ema18 > ema19 and ema19 > ema20 and ema20 > ema21 and ema21 > ema22 colslowS = ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12 and ema12 < ema13 and ema13 < ema14 and ema14 < ema15 and ema15 < ema16 and ema16 < ema17 and ema17 < ema18 and ema18 < ema19 and ema19 < ema20 and ema20 < ema21 and ema21 < ema22 //Fast EMA Final Color Rules colFinal = colfastL and colslowL? color.aqua : colfastS and colslowS? color.orange : color.gray //Slow EMA Final Color Rules colFinal2 = colslowL ? color.lime : colslowS ? color.red : color.gray // iff colSlowL then lime, otherwise is colSlowS, then red, otherwise gray // open long: grey to green // close long: green to grey // open short: grey to red // close short: red to grey //Fast EMA Plots p1=plot(ema1, linewidth=2, color=colFinal) plot(ema2, linewidth=1, color=colFinal) plot(ema3, linewidth=1, color=colFinal) plot(ema4, linewidth=1, color=colFinal) plot(ema5, linewidth=1, color=colFinal) plot(ema6, linewidth=1, color=colFinal) p2=plot(ema7, linewidth=2, color=colFinal) //Slow EMA Plots p3=plot(ema8, linewidth=1, color=colFinal2) plot(ema9, linewidth=1, color=colFinal2) plot(ema10,linewidth=1, color=colFinal2) plot(ema11,linewidth=1, color=colFinal2) plot(ema12,linewidth=1, color=colFinal2) plot(ema13,linewidth=1, color=colFinal2) plot(ema14,linewidth=1, color=colFinal2) plot(ema15,linewidth=1, color=colFinal2) plot(ema16,linewidth=1, color=colFinal2) plot(ema17,linewidth=1, color=colFinal2) plot(ema18,linewidth=1, color=colFinal2) plot(ema19,linewidth=1, color=colFinal2) plot(ema20,linewidth=1, color=colFinal2) plot(ema21,linewidth=1, color=colFinal2) plot(ema22,linewidth=2, color=colFinal2) p4=plot(show200Ema==true ? ema23 : na, linewidth=2) var isLong = false var isShort = false long = not isLong and ((colFinal2 == color.lime and colFinal2[1] == color.gray) or (colFinal2 == color.gray and colFinal2[1] == color.red)) short = not isShort and ((colFinal2 == color.gray and colFinal2[1] == color.lime) or (colFinal2 == color.red and colFinal2[1] == color.gray)) if long isLong := true isShort := false if short isLong := false isShort := true openLong = colFinal2 == color.lime and colFinal2[1] == color.gray closeLong = colFinal2 == color.gray and colFinal2[1] == color.lime openShort = colFinal2 == color.red and colFinal2[1] == color.gray closeShort = colFinal2 == color.gray and colFinal2[1] == color.red // default - no early signals plotshape(openLong and not useEarlySignals, title="open long", text="open long", style=shape.labelup, location=location.belowbar, size=size.tiny, color=color.green, textcolor=color.white, transp=0) plotshape(closeLong and not useEarlySignals, title="close long", text="close long", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.gray, textcolor=color.white, transp=0) plotshape(openShort and useShorts and not useEarlySignals, title="open short", text="open short", style=shape.labelup, location=location.belowbar, size=size.tiny, color=color.red, textcolor=color.white, transp=0) plotshape(closeShort and useShorts and not useEarlySignals, title="close short", text="close short", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.black, textcolor=color.white, transp=0) // with early signals plotshape(long and useEarlySignals, title="long", text="long", style=shape.labelup, location=location.belowbar, size=size.tiny, color=color.green, textcolor=color.white, transp=0) plotshape(short and useEarlySignals and useShorts, title="short", text="short", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.red, textcolor=color.white, transp=0) plotshape(short and useEarlySignals and not useShorts, title="close long", text="close long", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.red, textcolor=color.white, transp=0) isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin))) strategy.entry("LONG", long=true, when=openLong and isWithinTimeBounds and not useEarlySignals) strategy.close("LONG", when=closeLong and isWithinTimeBounds and not useEarlySignals) strategy.entry("short", long=false, when=openShort and useShorts and isWithinTimeBounds and not useEarlySignals) strategy.close("short", when=closeShort and useShorts and isWithinTimeBounds and not useEarlySignals) strategy.entry("LONG", long=true, when=long and isWithinTimeBounds and useEarlySignals) strategy.close("LONG", when=short and isWithinTimeBounds and useEarlySignals) strategy.entry("short", long=false, when=short and useShorts and isWithinTimeBounds and useEarlySignals) strategy.close("short", when=long and useShorts and isWithinTimeBounds and not useEarlySignals)