En la carga de los recursos... Cargando...

Tendencia de extensión de Fibonacci con cruce multi-EMA siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2024-07-29 16:42:56
Las etiquetas:El EMA

img

Resumen general

Esta estrategia es un sistema de seguimiento de tendencias que combina múltiples cruces de promedio móvil exponencial (EMA) con niveles de extensión de Fibonacci. Utiliza la interacción entre EMA de diferentes períodos para identificar posibles comienzos y finales de tendencias, mientras que utiliza niveles de extensión de Fibonacci para determinar objetivos de ganancias. La estrategia también incorpora reglas específicas de stop-loss para gestionar el riesgo y proteger las ganancias.

Principios de estrategia

El núcleo de esta estrategia radica en el uso de cruces de EMA a través de múltiples marcos de tiempo para capturar el inicio y la terminación de las tendencias.

  1. La primera condición de entrada se activa cuando el precio alcanza o cae por debajo de la EMA de 30 períodos, pero posteriormente cierra por encima de ella, mientras que la EMA de 10 períodos está por encima de la EMA de 5 períodos y la EMA de 30 períodos es un 1% más baja que la EMA de 5 períodos.

  2. La segunda condición de entrada se activa cuando la EMA de 5 períodos cruza por encima de la EMA de 30 períodos y la EMA de 30 períodos ha cruzado por debajo de la EMA de 5 períodos en los últimos 6 bares.

  3. La tercera condición de entrada se activa cuando los máximos de las dos barras anteriores están por debajo de sus respectivas EMA de 5 períodos, la EMA de 5 períodos está por debajo de la EMA de 10 períodos, que está por debajo de la EMA de 30 períodos, y el máximo de la barra anterior está por debajo del cierre actual.

  4. La cuarta condición de entrada se activa cuando la EMA de 10 períodos se cruza por encima de la EMA de 30 períodos, la EMA de 5 períodos se ha cruzado por encima de la EMA de 30 períodos en los últimos 4 bares, y tanto los valores actuales de las EMA de 10 períodos como los de 5 períodos son superiores a sus valores anteriores.

En el caso de las operaciones de stop loss, la estrategia establece normas específicas para las diferentes condiciones de entrada:

  • Para la primera condición, la posición se cierra si la EMA de 30 períodos se cruza por encima de la EMA de 10 períodos.
  • Para otras condiciones, la posición se cierra si el precio de cierre cae por debajo del mínimo más bajo de las tres barras anteriores.

Los objetivos de ganancia se establecen en función de los niveles de extensión de Fibonacci, incluidos los niveles 0.618, 0.786, 1.0 y 1.618.

Además, la estrategia incluye una condición de bloqueo de ganancias: si los mínimos de las dos últimas barras están por encima de la EMA de 5 períodos y las EMA están alineadas en orden ascendente (5 > 10 > 30), la posición se cierra para bloquear las ganancias.

Ventajas estratégicas

  1. Confirmaciones múltiples: al utilizar múltiples EMA y condiciones de entrada, la estrategia puede identificar con mayor precisión el inicio y la continuación de las tendencias.

  2. Alta adaptabilidad: Cuatro condiciones de entrada diferentes permiten que la estrategia se adapte a diversos entornos de mercado, capturando oportunidades comerciales ya sea en rupturas rápidas o formaciones de tendencia lentas.

  3. Gestión de riesgos: La estrategia incluye reglas específicas de stop-loss, lo que ayuda a controlar el riesgo para cada operación.

  4. Objetivos de ganancias claros: el uso de niveles de extensión de Fibonacci como objetivos de ganancias proporciona a los operadores puntos de salida claros.

  5. Protección de ganancias: la condición de bloqueo de ganancias ayuda a proteger las ganancias obtenidas cuando la tendencia pueda revertirse, un aspecto importante que a menudo se pasa por alto por muchas estrategias de seguimiento de tendencias.

  6. Combinación de indicadores técnicos: la estrategia combina las EMA y las herramientas de Fibonacci, aprovechando las fortalezas de estas dos herramientas de análisis técnico populares.

Riesgos estratégicos

  1. Sobrecomercialización: las múltiples condiciones de entrada pueden conducir a una sobrecomercialización, especialmente en mercados altamente volátiles, lo que podría aumentar los costos de transacción y potencialmente conducir a más señales falsas.

  2. Sensibilidad de parámetros: la estrategia utiliza múltiples períodos fijos de EMA y umbrales porcentuales. Estos parámetros pueden necesitar ajustarse para diferentes mercados y plazos, de lo contrario, podrían conducir a un mal rendimiento de la estrategia.

  3. Dependencia de tendencia: Como estrategia de seguimiento de tendencias, puede tener un mal rendimiento en mercados que varían u oscilan.

  4. En los mercados que cambian rápidamente, la estrategia puede no ser capaz de capturar los puntos de inflexión de tendencia de manera oportuna.

  5. Complejidad: Las múltiples condiciones y normas de la estrategia aumentan su complejidad, lo que puede dificultar su comprensión y mantenimiento, y también aumenta el riesgo de sobreajuste.

Direcciones para la optimización de la estrategia

  1. Ajuste dinámico de parámetros: considerar la introducción de un mecanismo adaptativo para ajustar dinámicamente los períodos de EMA y otros parámetros basados en la volatilidad del mercado.

  2. Incorporar indicadores de volumen: la combinación de análisis de volumen puede mejorar la precisión de las decisiones de entrada y salida.

  3. Filtración del entorno de mercado: introducir un mecanismo de identificación del entorno de mercado, como el uso de ATR (intervalo verdadero promedio) o indicadores de volatilidad, para detener las operaciones en entornos no adecuados para seguir tendencias.

  4. Optimice el mecanismo de stop-loss: Considere el uso de trailing stops en lugar de stop fijos. Esto puede proteger las ganancias mientras les permite seguir creciendo.

  5. Añadir filtro de tiempo: limitar la negociación a períodos de tiempo específicos, evitando períodos de alta volatilidad o baja liquidez, lo que puede mejorar la estabilidad de la estrategia.

  6. Introducir el aprendizaje automático: utilizar algoritmos de aprendizaje automático para optimizar la selección de parámetros y las decisiones de entrada, lo que puede mejorar la adaptabilidad y el rendimiento de la estrategia.

  7. Análisis de marcos de tiempo múltiples: Incorporar análisis de tendencias de marcos de tiempo más largos para mejorar la precisión de la decisión de entrada y evitar entrar en contra de la tendencia principal.

Conclusión

Esta estrategia de seguimiento de tendencias de extensión de Fibonacci muestra un sistema de negociación integral que combina múltiples indicadores técnicos y conceptos de negociación. Mediante el uso de múltiples EMA y condiciones de entrada, la estrategia intenta lograr un equilibrio entre la captura de tendencias y la reducción de señales falsas.

Aunque la estrategia tiene ventajas en cuanto a confirmaciones múltiples y alta adaptabilidad, su complejidad y sensibilidad a la selección de parámetros también presentan ciertos desafíos.

En general, esta estrategia proporciona un marco interesante para el seguimiento de tendencias, pero los comerciantes necesitan realizar pruebas de retroceso y optimización de parámetros cuando la aplican en la práctica, y hacer los ajustes apropiados basados en mercados específicos y estilos de negociación.


/*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")

Relacionados

Más.