La estrategia de cruce de EMA es una estrategia de trading basada en el cruce de breakout de precios y el cruce de promedio móvil exponencial (EMA). La estrategia utiliza el precio más alto dentro de un período especificado como señal de compra y la EMA como señal de venta. Cuando el precio de cierre se rompe por encima del precio más alto dentro del período especificado, la estrategia genera una señal de compra. Cuando el precio de cierre cae por debajo de la EMA, la estrategia genera una señal de venta. La estrategia también establece un precio de stop-loss para controlar el riesgo. Además, la estrategia proporciona múltiples parámetros para que los usuarios se adapten para adaptarse a diferentes estilos de negociación y condiciones del mercado.
El principio básico de la estrategia de cruce de la EMA es capturar las tendencias del mercado utilizando el cruce de precios y la cruce de la EMA. Cuando el precio se rompe por encima del precio más alto dentro de un período especificado, indica que el mercado puede entrar en una tendencia alcista, por lo que la estrategia genera una señal de compra. Al mismo tiempo, la EMA sirve como un indicador de seguimiento de tendencia. Cuando el precio cae por debajo de la EMA, indica que la tendencia alcista puede terminar, por lo que la estrategia genera una señal de venta.
La estrategia utiliza los siguientes pasos para implementar la negociación:
A través de los pasos anteriores, la estrategia puede beneficiarse de la tendencia al alza en el mercado al tiempo que utiliza el stop-loss para controlar el riesgo a la baja.
La estrategia de cruce de la EMA BreakHigh tiene las siguientes ventajas:
Aunque la estrategia de cruce de la EMA BreakHigh tiene ciertas ventajas, también presenta los siguientes riesgos:
Para mitigar estos riesgos, pueden considerarse las siguientes medidas:
Para mejorar aún más el rendimiento de la estrategia de cruce de la EMA BreakHigh, se pueden considerar las siguientes direcciones de optimización:
A través de las medidas de optimización anteriores, se puede mejorar la estabilidad, la adaptabilidad y la rentabilidad de la Estrategia de Crossover BreakHigh EMA, lo que le permite lograr un buen rendimiento en más entornos de mercado.
La estrategia de cruce de la EMA BreakHigh es una estrategia simple y efectiva de seguimiento de tendencias que captura las tendencias del mercado mediante el uso de la ruptura de precios y el cruce de la EMA mientras se utiliza el stop-loss para controlar el riesgo a la baja. La lógica de la estrategia es clara, los parámetros son flexibles y es fácil de entender e implementar. Aunque la estrategia tiene ciertos riesgos, como el riesgo de volatilidad del mercado, el riesgo de inversión de tendencia y el riesgo de configuración de parámetros, estos riesgos se pueden mitigar a través de medidas apropiadas de control de riesgos, como ajustar parámetros, combinar con otros indicadores y establecer un stop-loss razonable. Además, la estrategia tiene espacio de optimización adicional, como el ajuste dinámico de parámetros, la introducción de un mecanismo de pérdida corta larga, la optimización del stop-loss y take-profit, y la combinación con el análisis fundamental, etc., para mejorar el rendimiento y la adaptabilidad de la estrategia.
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version = 5 strategy(title="BreakHigh Strategy", overlay=true) Period = input.int(34, "Number of previous bars(34,52 Recommend)") showbg = input(defval = false,title = "Show BackGround Color") showema = input(defval = true ,title = "Show Line") MarkBuySig = input(defval = true ,title = "Show Buy/Sell Signal") Risk_Per_Trade = input(2.5, '% of Risk Per Trade') / 100 // Risk% Per Trade Switch SLDAY = input(title='Lowest price of the previous number of bars', defval=9) Buysig = input(defval=true, title='Start Strategy') UseSl = input(defval=false, title='Use Stoploss Price') Compound = input(defval = false ,title = "Compound Profit") xtf = input.timeframe(title='** Fix chart to which time frame ? **)', defval='D') //BUY float buyLine = na buyLine := ta.highest(high,Period)[1] plot(showema ? buyLine : na, linewidth=1, style=plot.style_linebr, color=color.new(color.green, 0)) //SELL output = ta.ema(close, Period) show = request.security(syminfo.tickerid, xtf, output) FastL = plot(showema ? show : na, color=color.new(color.white, 0), linewidth=2, title='Slow EMA') //Buy-Sell Signal Green = close > buyLine // Buy Red = close < show // Sell buycond = Green and Green[1] == 0 sellcond = Red and Red[1] == 0 bullish = ta.barssince(buycond) < ta.barssince(sellcond) bearish = ta.barssince(sellcond) < ta.barssince(buycond) buy = bearish[1] and buycond sell = bullish[1] and sellcond plotshape(MarkBuySig ? buy : na, style=shape.labelup, text='Buy Next Bar', textcolor=color.new(color.black, 0), location=location.belowbar, color=color.new(color.green, 0)) plotshape(MarkBuySig ? sell : na, style=shape.labeldown, text='Sell Next Bar', textcolor=color.new(color.black, 0), location=location.abovebar, color=color.new(color.red, 0)) bgcolor(showbg ? bullish ? color.new(color.green,90) : color.new(color.red,90) : na ) // === BACKTEST RANGE === // use_date_range = input(true) FromYear = input.int(defval=2012, title='From Year', minval=1950) FromMonth = input.int(defval=1, title='From Month', minval=1) FromDay = input.int(defval=1, title='From Day', minval=1) ToYear = input.int(defval=9999, title='To Year', minval=1950) ToMonth = input.int(defval=1, title='To Month', minval=1) ToDay = input.int(defval=1, title='To Day', minval=1) in_date_range = use_date_range ? time > timestamp(FromYear, FromMonth, FromDay, 00, 00) and time < timestamp(ToYear, ToMonth, ToDay, 23, 59) : true //****************************************************************************// ////////////////////////////////////////////// // define strategy entry / exit // ////////////////////////////////////////////// //****************************************************************************// // LONG CONDITIONS Select_Long_Condition_1 = close > buyLine // Buy when Have Signal Open_Long_Condition = Select_Long_Condition_1 and strategy.opentrades == 0 //****************************************************************************// // STOP LOSS Price float longSL = na longSL := Open_Long_Condition ? ta.lowest(low, SLDAY)[1] : longSL[1] //****************************************************************************// // Cal StopLoss Long_Entry_Price = close Diff_OPEN_to_SL = math.abs(Long_Entry_Price - longSL) // Exit CONDITIONS Exit_Long_Condition = close < show // Sell when Have Signal //****************************************************************************// // POSITION SIZE CAP strategy.initial_capital = 50000 float portSize = Compound ? strategy.netprofit + strategy.initial_capital : strategy.initial_capital float LossAmoutUnit = portSize * Risk_Per_Trade //50 float PercentSL = ( Diff_OPEN_to_SL / Long_Entry_Price ) * 100 float PositionSize = LossAmoutUnit / Diff_OPEN_to_SL //****************************************************************************// // ENTRY/EXIT if Buysig if Open_Long_Condition and in_date_range strategy.entry('LONG', strategy.long, qty=PositionSize) if Exit_Long_Condition and in_date_range strategy.close('LONG') if close < longSL and UseSl strategy.close('LONG') //****************************************************************************// // PLOT STOP LOSS longPlotSL = strategy.opentrades > 0 and strategy.position_size > 0 ? longSL : na // label.new(bar_index, high, text=str.tostring(longPlotSL),color=color.white, textcolor=color.black) plot(longPlotSL, title="", linewidth=2, style=plot.style_linebr, color=color.new(color.red, 0)) //****************************************************************************//