
La estrategia de ruptura de superposición de triple EMA utiliza el indicador de promedio móvil de triple índice para determinar la dirección de la tendencia del mercado, y la entrada se realiza en el punto de ruptura de la tendencia. La estrategia combina al mismo tiempo la señal de juicio de la forma de la línea K.
La estrategia se basa principalmente en los siguientes principios:
Utiliza tres líneas de EMA de diferentes períodos (línea de 200 días, línea de 50 días y línea de 20 días) para determinar las tendencias principales, las tendencias intermedias y las tendencias a corto plazo del mercado.
Cuando la tendencia corta EMA (la línea de 20 días) se eleva, se genera una señal de compra cuando se rompe la EMA intermedia (la línea de 50 días); cuando se rompe hacia abajo, se genera una señal de venta.
Combinando la forma de la línea K, se determina la fiabilidad de la señal de ruptura. Sólo se considera una ruptura confiable cuando el precio de cierre de la segunda línea K es superior a (inferior a) el precio máximo (inferior al precio mínimo) del día anterior.
Establezca un punto de parada para evitar el riesgo de fluctuaciones fuera de un rango razonable.
El uso de múltiples indicadores de EMA para juzgar tendencias mejora la precisión de los juicios.
Combinado con un filtro de forma K para señales engañosas, evita riesgos de transacción innecesarios.
Establezca un punto de parada de pérdidas para controlar eficazmente las pérdidas individuales.
En situaciones de crisis, los EMA generan una gran cantidad de señales engañosas que no permiten una evaluación efectiva de la evolución del mercado.
La combinación de un solo indicador es sencilla y el juicio sobre situaciones complejas es pobre.
Sin tener en cuenta el costo de la transacción, es posible que no pueda ser rentable en un mercado de comisiones altas.
Se pueden introducir otros indicadores, como MACD, KDJ, etc., para formar una combinación de indicadores que mejore la precisión de los juicios.
Se puede optimizar la prueba en función de diferentes variedades y parámetros de ciclo, para que los parámetros de la estrategia se ajusten mejor a las características de la variedad.
Se puede introducir un indicador de volumen de transacciones para evitar una baja cantidad de señales engañosas.
La estrategia de triple EMA superpone la estrategia de ruptura de manera clara y fácil de entender, a través de la EMA para juzgar la tendencia principal del mercado y buscar el momento de entrada cuando la tendencia se convierte. Sin embargo, la estrategia tiene ciertas limitaciones, no puede manejar muy bien las situaciones complejas, se recomienda su uso en combinación con otros indicadores y optimización de parámetros para adaptarse a un entorno de mercado más amplio.
/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("GHG RETRACEMENT MODE 1", overlay=true)
entryLevel1 = input(0.5, "ENTRY LEVEL 1")
entryLevel2 = input(0.25, "ENTRY LEVEL 2")
entryLevel3 = input(0.0, "ENTRY LEVEL 3")
stopLevel = input(-0.35, "STOP LEVEL")
tpLevel = input(0.88, "TP LEVEL")
dontUseEma = input(false, "Don't Use EMA")
get_level(level, level100, level0) =>
level * (level100 - level0) + level0
buySignal = close[2] < open[2] and close[1] > open[1] and close[0] > open[0] and high[0] > open[2] and high[1] < high[2]
sellSignal = close[2] > open[2] and close[1] < open[1] and close[0] < open[0] and low[0] < open[2] and low[1] > low[2]
if buySignal and (close[0] > ta.ema(close, 200) or dontUseEma)
l = label.new(bar_index, na)
entryPrice1 = get_level(entryLevel1, high[0], low[2])
entryPrice2 = get_level(entryLevel2, high[0], low[2])
entryPrice3 = get_level(entryLevel3, high[0], low[2])
exitPrice = get_level(tpLevel, high[0], low[2])
stopPrice = get_level(stopLevel, high[0], low[2])
strategy.order("BUY 1", strategy.long, comment="BUY 1", limit=entryPrice1)
strategy.exit("exit", "BUY 1", limit=high[0], stop=stopPrice)
strategy.order("BUY 2", strategy.long, comment="BUY 2", limit=entryPrice2)
strategy.exit("exit", "BUY 2", limit=high[0], stop=stopPrice)
label.set_text(l, "Buy => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
label.set_color(l, color.green)
label.set_yloc(l, yloc.belowbar)
label.set_style(l, label.style_label_up)
if sellSignal and (close[0] < ta.ema(close, 200) or dontUseEma)
a = label.new(bar_index, na)
entryPrice1 = get_level(entryLevel1, low[0], high[2])
entryPrice2 = get_level(entryLevel2, low[0], high[2])
entryPrice3 = get_level(entryLevel3, low[0], high[2])
exitPrice = get_level(tpLevel, low[0], high[2])
stopPrice = get_level(stopLevel,low[0], high[2])
strategy.order("SELL 1", strategy.short, comment="SELL 1", limit=entryPrice1)
strategy.exit("exit", "SELL 1", limit=low[0], stop=stopPrice)
strategy.order("SELL 2", strategy.short, comment="SELL 2", limit=entryPrice2)
strategy.exit("exit", "SELL 2", limit=low[0], stop=stopPrice)
label.set_text(a,"Sell => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
label.set_color(a, color.red)
label.set_yloc(a, yloc.abovebar)
label.set_style(a, label.style_label_down)