
La estrategia es un sistema de seguimiento de tendencias que combina el cruce de las medias móviles de múltiples índices (EMA) y los niveles de expansión de Fibonacci. Utiliza la interacción entre los EMA de diferentes períodos para identificar el inicio y el final de las tendencias potenciales, y utiliza los niveles de expansión de Fibonacci para determinar los objetivos de ganancias.
El núcleo de la estrategia es el uso de la intersección de EMAs de varios marcos de tiempo para capturar el inicio y el final de la tendencia. En concreto, utiliza EMAs de 5 ciclos, 10 ciclos y 30 ciclos. La estrategia contiene cuatro condiciones de entrada diferentes, cada una de las cuales está diseñada para capturar un escenario de mercado diferente:
El primer requisito de entrada se activa cuando el precio toca o cae por debajo del EMA de 30 períodos, pero luego cierra por encima de él, mientras que el EMA de 10 períodos es superior al EMA de 5 períodos y el EMA de 30 períodos es inferior al EMA de 5 períodos en un 1%.
El segundo requisito de entrada se activa cuando un EMA de 5 ciclos ha pasado por un EMA de 30 ciclos y un EMA de 30 ciclos ha pasado por un EMA de 5 ciclos en las últimas 6 líneas K.
El tercer requisito de entrada se activa cuando los precios máximos de las dos líneas K actuales están por debajo de sus respectivos EMA de 5 ciclos, y el EMA de 5 ciclos está por debajo del EMA de 10 ciclos, y el EMA de 10 ciclos está por debajo del EMA de 30 ciclos, y el precio máximo de la línea K anterior está por debajo del precio de cierre actual.
La cuarta condición de entrada se activa cuando un EMA de 10 períodos ha pasado por un EMA de 30 períodos, y un EMA de 5 períodos ha pasado por un EMA de 30 períodos en las últimas 4 líneas K, y los valores actuales de los EMA de 10 períodos y de los EMA de 5 períodos son superiores a su valor anterior.
En cuanto al stop loss, la estrategia establece reglas específicas para diferentes condiciones de entrada:
Los objetivos de ganancias se basan en los niveles de expansión de Fibonacci, que incluyen los niveles de 0.618, 0.786, 1.0 y 1.618. Cuando los precios alcanzan estos niveles, la estrategia se cierra de acuerdo con reglas específicas.
Además, la estrategia incluye una condición de bloqueo de ganancias: si los precios mínimos de las dos líneas K más recientes son superiores a la EMA de 5 ciclos y la EMA presenta un rango ascendente ((5 > 10 > 30), se cierra la posición para bloquear las ganancias.
Confirmación múltiple: mediante el uso de múltiples EMA y múltiples condiciones de entrada, la estrategia puede identificar con mayor precisión el inicio y la continuación de la tendencia. Este mecanismo de confirmación múltiple puede reducir las falsas señales y mejorar la precisión de las operaciones.
Adaptabilidad: Cuatro condiciones de entrada diferentes permiten que la estrategia se adapte a diferentes entornos de mercado, capturando oportunidades de negociación tanto en brechas rápidas como en tendencias lentas.
Gestión de riesgos: La estrategia contiene reglas de stop loss específicas, que ayudan a controlar el riesgo de cada operación. Diferentes condiciones de entrada corresponden a diferentes estrategias de stop loss, lo que indica la importancia de la estrategia para la gestión de riesgos.
Objetivos de ganancias claros: el uso de los niveles de expansión de Fibonacci como objetivos de ganancias proporciona un punto de salida claro para los comerciantes. Esto ayuda a evitar que los beneficios se terminen demasiado pronto o se mantengan demasiado tiempo.
Protección de ganancias: Las condiciones de bloqueo de ganancias ayudan a proteger las ganancias obtenidas cuando la tendencia puede revertirse, un aspecto importante que muchas estrategias de seguimiento de tendencias ignoran.
Combinación de indicadores técnicos: La estrategia combina las herramientas EMA y Fibonacci, aprovechando las ventajas de estas dos herramientas de análisis técnico muy populares.
Trataciones excesivas: Las condiciones de entrada múltiples pueden provocar el exceso de transacciones, especialmente en mercados con mucha volatilidad. Esto puede aumentar los costos de transacción y puede conducir a más señales falsas.
Sensibilidad de parámetros: la estrategia utiliza varios períodos de EMA y porcentajes de desvalorización fijos. Estos parámetros pueden necesitar ajustes en función de diferentes mercados y marcos de tiempo, de lo contrario, pueden causar un mal desempeño de la estrategia.
Dependencia de la tendencia: como una estrategia de seguimiento de tendencias, puede funcionar mal en mercados horizontales o oscilantes. En estos entornos de mercado, puede producirse múltiples falsas señales y pequeñas pérdidas.
Retraso: El EMA es un indicador de retraso. En un mercado que cambia rápidamente, las estrategias pueden no capturar el punto de inflexión de la tendencia a tiempo.
Complejidad: Las múltiples condiciones y reglas de la estrategia aumentan su complejidad, lo que puede hacer que la estrategia sea difícil de entender y mantener, y también aumenta el riesgo de sobreadaptación.
Ajuste de parámetros dinámicos: Se puede considerar la introducción de mecanismos de adaptación, para ajustar el ciclo EMA y otros parámetros en función de la dinámica de la volatilidad del mercado. Esto puede mejorar la adaptabilidad de la estrategia en diferentes entornos de mercado.
La adición de indicadores de volumen de transacciones: La combinación de análisis de volumen de transacciones puede mejorar la precisión de las decisiones de entrada y salida. Por ejemplo, se puede solicitar un aumento en el volumen de transacciones al ingresar para confirmar la intensidad de la tendencia.
Filtrado de entornos de mercado: Introducción de mecanismos de identificación de entornos de mercado, como el uso de ATR (Average True Range) o indicadores de volatilidad, para suspender la negociación en entornos de mercado no aptos para el seguimiento de tendencias.
Mecanismos de Optimización de los Stop Losses: Se puede considerar el uso de Stop Losses de seguimiento, en lugar de Stop Losses fijos. Esto puede proteger las ganancias y permitir que las ganancias continúen creciendo.
Añadir filtro de tiempo: limitar las operaciones a un período de tiempo específico, evitando períodos de mayor volatilidad o menos liquidez, puede mejorar la estabilidad de la estrategia.
Introducción al aprendizaje automático: el uso de algoritmos de aprendizaje automático para optimizar la selección de parámetros y las decisiones de ingreso puede mejorar la adaptabilidad y el rendimiento de las estrategias.
Análisis de múltiples marcos de tiempo: Combinado con análisis de tendencias de marcos de tiempo más largos, se puede mejorar la precisión de las decisiones de entrada y evitar la entrada en caso de reversión de la tendencia principal.
Esta estrategia de seguimiento de tendencias de múltiples EMAs cruzadas combinadas con extensiones de Fibonacci muestra un sistema de negociación integral que combina varios indicadores técnicos y una filosofía de negociación. Mediante el uso de múltiples EMAs y condiciones de entrada, la estrategia trata de lograr un equilibrio entre la captura de tendencias y la reducción de falsas señales. El uso de niveles de extensiones de Fibonacci proporciona una base objetiva para el establecimiento de objetivos de ganancias, mientras que las reglas específicas de stop loss y de bloqueo de ganancias reflejan la importancia que se da a la gestión de riesgos.
A pesar de las ventajas de las estrategias de confirmación múltiple y adaptabilidad, su complejidad y sensibilidad a la selección de parámetros también presentan algunos desafíos. Para mejorar aún más la estabilidad y el rendimiento de las estrategias, se pueden considerar direcciones de optimización como la introducción de ajustes de parámetros dinámicos, filtración de entornos de mercado y análisis de marcos de tiempo múltiples.
En general, esta estrategia ofrece un marco interesante para el seguimiento de tendencias, pero los comerciantes necesitan hacer un buen seguimiento y optimización de los parámetros en la aplicación real, y hacer los ajustes adecuados según el mercado y el estilo de negociación específicos. Con la supervisión y optimización continuas, esta estrategia tiene el potencial de ser una herramienta de seguimiento de tendencias eficaz.
/*backtest
start: 2024-06-01 00:00:00
end: 2024-06-30 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Combined Strategy with Specific Stop Loss", overlay=true)
// Define the EMAs
ema30 = ta.ema(close, 30)
ema10 = ta.ema(close, 10)
ema5 = ta.ema(close, 5)
// Define the conditions for opening an order
open_condition1 = low <= ema30 and close > ema30 and ema10 > ema5 and ema30 * 1.01 < ema5
open_condition2 = ta.crossover(ema5, ema30) and (ta.crossover(ema30[1], ema5[1]) or ta.crossover(ema30[2], ema5[2]) or ta.crossover(ema30[3], ema5[3]) or ta.crossover(ema30[4], ema5[4]) or ta.crossover(ema30[5], ema5[5]) or ta.crossover(ema30[6], ema5[6]) )
open_condition3 = high[2] < ema5[2] and high[1] < ema5[1] and ema5 < ema10 and ema10 < ema30 and high[1] < close
open_condition4 = ta.crossover(ema10, ema30) and (ta.crossover(ema5[0], ema30[0]) or ta.crossover(ema5[1], ema30[1]) or ta.crossover(ema10[2], ema30[2]) or ta.crossover(ema10[3], ema30[3])) and ema10[1] < ema10 and ema5[1] <ema5
// Calculate the lowest low of the previous two bars
lowest_low_prev_two_bars = ta.lowest(low, 3)
// Track the entry price and the lowest low of the previous two bars for open_condition3
var float entry_price = na
var float low_entry_price = na
var float entry_lowest_low1 = na
var float entry_lowest_low2 = na
var float entry_lowest_low3 = na
var float entry_lowest_low4 = na
var bool order1 = false
var bool order2 = false
var bool order3 = false
var bool order4 = false
// Fibonacci extension levels based on the last significant swing
var float fib_extension_level_0_618 = na
var float fib_extension_level_0_786 = na
var float fib_extension_level_1 = na
var float fib_extension_level_1_618 = na
// Calculate Fibonacci extension levels
var float swing_low = na
var float swing_high = na
// Here we assume the latest swing low and swing high, adjust based on your logic
swing_low := ta.lowest(low, 20)
swing_high := ta.highest(high, 20)
// Open a long order when any of the conditions are met
if open_condition1 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="<ema30")
entry_lowest_low1 := lowest_low_prev_two_bars
low_entry_price := low
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
entry_price := close
order1 := true
if open_condition2 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="ema5xema30")
entry_lowest_low2 := lowest_low_prev_two_bars
low_entry_price := low
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
entry_price := close
order2 := true
if open_condition3 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="high<ema5")
entry_price := close
low_entry_price := low
entry_lowest_low3 := lowest_low_prev_two_bars
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
order3 := true
if open_condition4 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="high<ema5444")
entry_price := close
low_entry_price := low
entry_lowest_low4 := lowest_low_prev_two_bars
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
order4 := true
// Set a stop loss only if the order was opened with the specified conditions
if (not na(entry_price))
if order1
if ta.crossover(ema30,ema10)
strategy.close("Long", comment="stop loss1" )
entry_price := na
order1 := false
low_entry_price := na
if order2
if close < entry_lowest_low2
strategy.close("Long", comment="stop loss2" )
entry_price := na
order2 := false
low_entry_price := na
if order3
if close < entry_lowest_low3
strategy.close("Long", comment="stop loss3" )
entry_price := na
order3 := false
low_entry_price := na
if order4
if close < entry_lowest_low4
strategy.close("Long", comment="stop loss4" )
entry_price := na
order4 := false
low_entry_price := na
if low[1] > ema5[1] and low > ema5 and ema5 > ema10 and ema10 > ema30
strategy.close("Long", comment="profit low > ema5")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
// Take profit at Fibonacci extension levels
if high >= fib_extension_level_0_618 and close <= fib_extension_level_0_618
strategy.close("Long", comment="at 0.618 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
if high >= fib_extension_level_0_786 and close < fib_extension_level_0_786
strategy.close("Long", comment="at 0.786 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
if high >= fib_extension_level_1 and close < fib_extension_level_1
strategy.close("Long", comment="at 1 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
if high >= fib_extension_level_1_618
strategy.close("Long", comment="at 1 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
// Plot the EMAs for visual reference
plot(ema30, color=color.blue, title="EMA 30")
plot(ema10, color=color.orange, title="EMA 10")
plot(ema5, color=color.red, title="EMA 5")