Esta estrategia utiliza el indicador EMA y MACD de 255 períodos para identificar oportunidades comerciales de reversión.
La EMA de 255 períodos se utiliza para determinar la dirección de la tendencia a medio y largo plazo.
Las bandas superior e inferior se establecen en función de la EMA, con el ancho de banda ajustado dinámicamente por el indicador ATR.
Cuando el precio está por encima de la banda superior, está en la región de sobrecompra. Cuando está por debajo de la banda inferior, está en la región de sobreventa.
El indicador MACD utiliza parámetros estándar (12, 26, 9).
En combinación con las señales de sobrecompra/sobreventa de la EMA y MACD, se toman posiciones inversas cuando el precio está lejos de la EMA y se produce una reversión de la MACD.
La EMA de 255 períodos puede determinar muy bien las tendencias a medio y largo plazo.
Los cruces del MACD pueden capturar de manera sensible las oportunidades de reversión a corto plazo.
Las bandas de la EMA ayudan a identificar regiones sobrecompradas/sobrevendidas para evitar la búsqueda de tendencias.
El comercio inverso permite entradas tempranas antes de las inversiones de precios, con algunos rasgos basados en el plan.
El ATR dinámico de stop loss puede controlar los riesgos de manera efectiva.
Las señales MACD pueden tener falsas inversiones, lo que conduce a pérdidas innecesarias.
Es probable que las reversiones fallen en escenarios de tendencias fuertes, por lo que se deben evitar las reversiones ciegas.
El límite de pérdida demasiado ajustado puede detenerse prematuramente, mientras que demasiado amplio puede resultar en un control insuficiente del riesgo.
El ajuste incorrecto de parámetros también puede afectar el rendimiento de la estrategia, lo que requiere una optimización iterativa.
Los costes de negociación también pueden afectar a la rentabilidad final y deben tenerse en cuenta.
Pruebe diferentes períodos de EMA para encontrar un mejor indicador de tendencia a medio y largo plazo.
Trate de combinar otros indicadores con la EMA para identificar el exceso de compra/sobreventa, por ejemplo, bandas de Bollinger, KD, RSI.
Optimizar los parámetros MACD para una mejor sensibilidad o estabilidad.
Prueba otros métodos de stop loss, como el stop de trailing para bloquear las ganancias.
Optimizar los parámetros en diferentes productos y plazos para la robustez.
Incorporar un filtro de fuerza de tendencia para evitar inversiones en tendencias fuertes.
Esta estrategia combina la tendencia de mediano a largo plazo de la EMA y las reversiones a corto plazo del MACD, operando a la inversa en regiones sobrecompradas / sobrevendidas. Es una estrategia de reversión básica con pros y contras.
/*backtest start: 2023-09-12 00:00:00 end: 2023-09-19 00:00:00 period: 15m basePeriod: 5m 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/ // © bufirolas //--- From 15 Trading Examples by Trader Alyx --- // Seems like this strategy works better if we reverse the EMA filter logic. // "Description: This basic scalping strategy allows you to enter the market based upon sentiment // provided by the EMA, set at 255 periods. When price is trading below the 255 EMA, you would // look to enter a LONG BUY positions, and when price is trading above the 255 EMA, you would // look to enter a SELL SHORT position. The MACD lagging indicator will show you clear signals for // when to do this. When the MACD lines cross in a bullish manner and price is below the 255 // EMA, buy. When the MACD lines cross in a bearish manner and price is above the 255 EMA, // sell. // NOTE: Make sure that price is trading away from the 255EMA before entering a LONG or SHORT // position. As you can see in the chart below, the clearest signs for trade entry were presented // when price was trading AWAY from the 255EMA" //@version=4 // strategy("255 EMA Strategy", overlay=true, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=100, commission_value = 0.04, initial_capital=100) //Inputs i_reverse=input(false, title="Trade Reverse") i_EMAreverse=input(true, title="EMA Reverse Entry") i_EMAlength=input(defval=255, title="EMA Length") i_EMAexpander=input(defval=5, title="EMA Expander") i_MACDmult=input(defval=1, minval=1, title="MACD Mult") //SL & TP Calculations i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit") i_SwingLookback=input(20, title="Swing Lo/Hi Lookback") i_SLExpander=input(defval=0, step=.2, title="SL Expander")*.01 i_TPExpander=input(defval=0, step=.2, title="TP Expander")*.01 //Strategy Variables EMA=ema(close,i_EMAlength) [macdLine, signalLine, histLine]=macd(close, 12*i_MACDmult, 26*i_MACDmult, 9*i_MACDmult) EMAupper=EMA+((atr(100))*i_EMAexpander) EMAlower=EMA-((atr(100))*i_EMAexpander) //SL & TP Variables SwingLow=lowest(i_SwingLookback) SwingHigh=highest(i_SwingLookback) //Calculations EMAbuy=i_EMAreverse ? close > EMAupper : close < EMAlower EMAsell=i_EMAreverse ? close < EMAlower : close > EMAupper MACDbuy=crossover(macdLine, signalLine) MACDsell=crossunder(macdLine, signalLine) //SL & TP Calculations bought=strategy.position_size != strategy.position_size[1] lSL=valuewhen(bought, SwingLow, 0)*(1-i_SLExpander) sSL=valuewhen(bought, SwingHigh, 0)*(1+i_SLExpander) lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))*(1-i_TPExpander)) sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price)*(1+i_TPExpander*100) islong=strategy.position_size > 0 isshort=strategy.position_size < 0 SL= islong ? lSL : isshort ? sSL : na TP= islong ? lTP : isshort ? sTP : na //Entries strategy.entry("long", long=not i_reverse?true:false, when=EMAbuy and MACDbuy) strategy.entry("short", long=not i_reverse?false:true, when=EMAsell and MACDsell) //Exits if i_SL strategy.exit("longexit", "long", stop=SL, limit=TP) strategy.exit("shortexit", "short", stop=SL, limit=TP) //Plots plot(EMA, "EMA", color=color.white, linewidth=2) plot(EMAupper, "EMA Upper Band") plot(EMAlower, "EMA Lower Band") plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL") plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")