La idea central de esta estrategia es utilizar las señales de cruz dorada y cruz muerta del indicador EMA para tomar decisiones de compra y venta.
La estrategia primero define varias líneas EMA, incluyendo EMAs rápidas de ema1 a ema6 y EMAs lentas de ema7 a ema12. Luego define la señal de compra buy_signal y la señal de venta sell_signal:
La señal de compra buy_signal se genera cuando ema1 cruza por encima de ema3.
La señal de venta sell_signal se genera cuando ema1 se cruza por debajo de ema3.
Por lo tanto, cuando la EMA a corto plazo cruza por encima de la EMA a largo plazo, indica una tendencia al alza en el mercado y se activa una señal de compra.
La estrategia supervisa el cruce de las líneas EMA para determinar la dirección de la tendencia y tomar decisiones de compra/venta en consecuencia.
Las ventajas de esta estrategia incluyen:
El uso de líneas EMA para determinar la tendencia puede filtrar el ruido del mercado a corto plazo y hacer que las señales comerciales sean más confiables.
Los cruces entre los EMA rápidos y lentos ayudan a capturar puntos de inflexión importantes de la tendencia.
La estrategia es simple y clara. Las señales de negociación son generadas por cruces de la EMA, lo que facilita su comprensión e implementación para el comercio de cantidades.
Los parámetros de los períodos de EMA se pueden personalizar para adaptarse a diferentes productos y mercados.
Los riesgos de esta estrategia incluyen:
Las líneas EMA tienen efectos de retraso que pueden retrasar las señales de negociación.
La selección incorrecta de los parámetros de la EMA puede generar señales incorrectas.
Los cruces de la EMA no filtran las señales falsas en los mercados de variantes de manera efectiva.
Existen riesgos de sobreajuste debido al limitado espacio que se puede optimizar para los parámetros de la EMA.
Soluciones:
Añadir filtros con otros indicadores para evitar señales erróneas en los mercados variados.
Estabilidad de ensayo de diferentes parámetros de período para evitar el sobreajuste.
Ajustar los parámetros o añadir mecanismos de salida para controlar los riesgos.
La estrategia se puede optimizar aún más en los siguientes aspectos:
Se añadirán los valores de stop loss a las posiciones de salida cuando las pérdidas alcancen un umbral.
Implementar una lógica de reingreso con señales adicionales de compra/venta.
Optimizar los parámetros del período de cruce de la EMA para obtener los mejores resultados.
Incorporar otros indicadores para la validación multifactorial para mejorar la calidad de la señal.
Ajuste de parámetros de ensayo en diferentes productos para encontrar una aplicabilidad óptima.
Considere el deslizamiento en el comercio en vivo y optimizar a través de backtesting.
Esta es una estrategia simple de seguimiento de tendencias basada en el cruce de la EMA. Puede identificar cambios de tendencia, pero también tiene riesgos como efectos de retraso y frenos. Las mejoras con stop loss, optimización de parámetros, validación multifactorial, etc. pueden mejorar aún más el rendimiento de la estrategia en backtesting y trading en vivo.
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Companion Strategy script to my Cloud Study. Enjoy! -MP // study("MP's Cloud Study", overlay=true) strategy(title="MP's Cloud Strat'", shorttitle="MP's Cloud Strat", overlay=true, precision=6, pyramiding=0, initial_capital=10000, currency="USD", default_qty_type=strategy.percent_of_equity,calc_on_order_fills= false, calc_on_every_tick=false, default_qty_value=100.0, commission_type=strategy.commission.percent, commission_value=0.05) //bgcolor ( color=black, transp=20, title='Blackground', editable=true) src = close, len1 = input(2, minval=1, title="Short EMA") src2 = close, len3 = input(7, minval=1, title="Long EMA") emaShort = ema(src, len1) emaLong = ema(src2, len3) StartYear = input(2018, "Start Year") StartMonth = input(01, "Start Month") StartDay = input(18, "Start Day") StopYear = input(2018, "Stop Year") StopMonth = input(12, "Stop Month") StopDay = input(26, "Stop Day") tradeStop = timestamp(StopYear,StopMonth,StopDay,0,0) //src = close, //len1 = input(3, minval=1, title="Fast EMA 1") len2 = input(3, minval=1, title="Fast EMA 2") //len3 = input(8, minval=1, title="Fast EMA 3") len4 = input(5, minval=1, title="Fast EMA 4") len5 = input(8, minval=1, title="Fast EMA 5") len6 = input(10, minval=1, title="Fast EMA 6") //Slow EMA len7 = input(30, minval=1, title="Slow EMA 7") len8 = input(35, minval=1, title="Slow EMA 8") len9 = input(40, minval=1, title="Slow EMA 9") len10 = input(45, minval=1, title="Slow EMA 10") len11 = input(50, minval=1, title="Slow EMA 11") len12 = input(60, minval=1, title="Slow EMA 12") //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) //Slow EMA ema7 = ema(src, len7) ema8 = ema(src, len8) ema9 = ema(src, len9) ema10 = ema(src, len10) ema11 = ema(src, len11) ema12 = ema(src, len12) //Fast EMA Color Rules //colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6) colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6) //Slow EMA Color Rules //colslowL = ema7 > ema8 and ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12 //colslowS = ema7 < ema8 and ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12 //Fast EMA Final Color Rules //colFinal = colfastL and colslowL? aqua : colfastS and colslowS? orange : gray //Slow EMA Final Color Rules //colFinal2 = colslowL ? lime : colslowS ? red : gray //Fast EMA Plots p1=plot(ema1, title="Fast EMA 1", style=line, linewidth=2, color=silver) plot(ema2, title="Fast EMA 2", style=line, linewidth=1, color=silver) plot(ema3, title="Fast EMA 3", style=line, linewidth=1, color=silver) plot(ema4, title="Fast EMA 4", style=line, linewidth=1, color=silver) plot(ema5, title="Fast EMA 5", style=line, linewidth=1, color=silver) p2=plot(ema6, title="Fast EMA 6", style=line, linewidth=2, color=silver) fill(p1,p2,color=silver, transp=60) //Slow EMA Plots //p3=plot(ema7, title="Slow EMA 7", style=line, linewidth=4, color=colFinal2) //plot(ema8, title="Slow EMA 8", style=line, linewidth=3, color=colFinal2) //plot(ema9, title="Slow EMA 9", style=line, linewidth=3, color=colFinal2) //plot(ema10, title="Slow EMA 10", style=line, linewidth=3, color=colFinal2) //plot(ema11, title="Slow EMA 11", style=line, linewidth=3, color=colFinal2) //p4=plot(ema12, title="Slow EMA 12", style=line, linewidth=4, color=colFinal2) //fill(p3,p4, color=silver, transp=60) //Plot the Ribbon ma1=plot( emaShort,color=rising(emaShort,2)?green:red,linewidth=1,join=true,transp=20,title="Short") ma2=plot( emaLong,color=rising(emaLong,2)?green:red,linewidth=1,join=true,transp=20,title="Long") fcolor = emaShort>emaLong?green:red fill(ma1,ma2,color=fcolor,transp=80,title="Ribbon Fill") //fast = 4, slow = 16 //fastMA = ema(close, fast) //slowMA = ema(close, slow) //plot(fastMA, color=green, title = "buy/sell") //plot(slowMA, color=red, title = "base") //Conditions buy_signal = crossover(ema1,ema3) sell_signal = crossunder(ema1,ema3) plotshape(sell_signal, style=shape.triangleup, color = red, text="Start Short") plotshape(buy_signal, style=shape.triangledown, color = green, text="Start Long") alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01') alertcondition(buy_signal, title = 'Buy/Long', message = 'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01') //alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency') //alertcondition(buy_signal, title = 'Buy/Long', message = 'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency') testStartYear = input(2018, "From Year") testStartMonth = input(1, "From Month") testStartDay = input(1, "From Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2019, "To Year") testStopMonth = input(1, "To Month") testStopDay = input(1, "To Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => true if testPeriod() if buy_signal strategy.entry("Long", true) if sell_signal strategy.close("Long")