
La estrategia de cruce de la brecha más alta de la EMA es una estrategia de negociación basada en el cruce de la brecha de precio y la media móvil del índice (EMA). La estrategia utiliza el precio más alto en un período determinado como una señal de compra y la EMA como una señal de venta.
El principio central de las estrategias de cruce de EMA de brechas en los precios es el uso de brechas en los precios y cruces de EMA para capturar la tendencia del mercado. Cuando los precios superan los precios más altos dentro del 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, EMA como un indicador de seguimiento de la tendencia, cuando los precios caen por debajo de 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 llevar a cabo la transacción:
Mediante los pasos anteriores, la estrategia puede beneficiarse de la tendencia al alza del mercado, mientras que el uso de stop loss controla el riesgo a la baja.
La estrategia de cruce de la brecha más alta de la EMA tiene las siguientes ventajas:
A pesar de las ventajas de la estrategia de cruce por encima de los EMA máximos, también tiene los siguientes riesgos:
Para mitigar estos riesgos, se pueden considerar las siguientes medidas:
Para mejorar aún más el rendimiento de las estrategias de cruce de EMA de breakout, se pueden considerar las siguientes direcciones de optimización:
Mediante estas medidas de optimización, se puede mejorar la estabilidad, adaptabilidad y rentabilidad de las estrategias de cruce de EMA a precios más altos, lo que permite un buen rendimiento en un mayor número de entornos de mercado.
La estrategia de breakout EMA es una estrategia de seguimiento de tendencias sencilla y efectiva que capta la tendencia del mercado utilizando breakouts y cruces de EMA, mientras que 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 son fáciles de entender y implementar. Aunque la estrategia tiene ciertos riesgos, como el riesgo de fluctuaciones en el mercado, el riesgo de cambio de tendencia y el riesgo de configuración de parámetros, estos riesgos se pueden mitigar con medidas de control de riesgo adecuadas, como ajustar los parámetros, combinar otros indicadores y establecer un stop loss razonable, etc. Además, la estrategia tiene espacio para una optimización adicional, como el ajuste de parámetros dinámicos, la introducción de mecanismos de optimización de stop loss y de vallas múltiples, y la combinación de análisis básico 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))
//****************************************************************************//