O recurso está a ser carregado... Carregamento...

Crossover multi-EMA com tendência de extensão de Fibonacci Seguindo estratégia

Autora:ChaoZhang, Data: 2024-07-29 16: 42:56
Tags:EMA

img

Resumo

Esta estratégia é um sistema de seguimento de tendências que combina múltiplos crossovers de média móvel exponencial (EMA) com níveis de extensão de Fibonacci. Utiliza a interação entre EMAs de diferentes períodos para identificar possíveis começos e finais de tendências, enquanto usa níveis de extensão de Fibonacci para determinar metas de lucro. A estratégia também incorpora regras específicas de stop-loss para gerenciar riscos e proteger lucros.

Princípios de estratégia

O núcleo desta estratégia consiste em usar crossovers EMA em vários prazos para capturar o início e término das tendências. Especificamente, emprega EMAs de 5 períodos, 10 períodos e 30 períodos. A estratégia inclui quatro condições de entrada diferentes, cada uma projetada para capturar diferentes cenários de mercado:

  1. A primeira condição de entrada é acionada quando o preço toca ou cai abaixo da EMA de 30 períodos, mas posteriormente fecha acima dela, enquanto a EMA de 10 períodos está acima da EMA de 5 períodos e a EMA de 30 períodos é 1% inferior à EMA de 5 períodos.

  2. A segunda condição de entrada é activada quando a EMA de 5 períodos cruza acima da EMA de 30 períodos e a EMA de 30 períodos cruza abaixo da EMA de 5 períodos nos últimos 6 bares.

  3. A terceira condição de entrada é activada quando os máximos das duas barras anteriores estão abaixo das respectivas EMA de 5 períodos, a EMA de 5 períodos está abaixo da EMA de 10 períodos, que está abaixo da EMA de 30 períodos, e o máximo da barra anterior está abaixo do fechamento atual.

  4. A quarta condição de entrada é activada quando a EMA de 10 períodos ultrapassa a EMA de 30 períodos, a EMA de 5 períodos ultrapassou a EMA de 30 períodos nos últimos 4 bares e os valores atuais das EMAs de 10 períodos e de 5 períodos são superiores aos seus valores anteriores.

Para o stop-loss, a estratégia estabelece regras específicas para diferentes condições de entrada:

  • Para a primeira condição, a posição é encerrada se a EMA de 30 períodos ultrapassar a EMA de 10 períodos.
  • Para outras condições, a posição é encerrada se o preço de encerramento cair abaixo da mais baixa das três barras anteriores.

Os objetivos de lucro são definidos com base em níveis de extensão de Fibonacci, incluindo níveis de 0,618, 0,786, 1,0 e 1,618.

Além disso, a estratégia inclui uma condição de bloqueio dos lucros: se as mínimas dos dois últimos bares estiverem acima da EMA de 5 períodos e as EMA estiverem alinhadas em ordem ascendente (5 > 10 > 30), a posição é fechada para bloquear os lucros.

Vantagens da estratégia

  1. Confirmações múltiplas: Ao usar várias EMAs e condições de entrada, a estratégia pode identificar com mais precisão o início e a continuação das tendências.

  2. Alta adaptabilidade: quatro condições de entrada diferentes permitem que a estratégia se adapte a vários ambientes de mercado, capturando oportunidades de negociação, seja em rupturas rápidas ou formações lentas de tendência.

  3. Gestão de Risco: A estratégia inclui regras específicas de stop-loss, o que ajuda a controlar o risco para cada negociação.

  4. Objetivos de lucro claros: Usar os níveis de extensão de Fibonacci como metas de lucro fornece aos traders pontos de saída claros. Isso ajuda a evitar lucros prematuros ou manter posições por muito tempo.

  5. Proteção de lucros: a condição de bloqueio de lucros ajuda a proteger os lucros obtidos quando a tendência pode se inverter, um aspecto importante muitas vezes negligenciado por muitas estratégias de tendência.

  6. Combinação de indicadores técnicos: a estratégia combina EMAs e ferramentas de Fibonacci, aproveitando os pontos fortes destas duas ferramentas de análise técnica populares.

Riscos estratégicos

  1. O excesso de negociação: múltiplas condições de entrada podem levar a excesso de negociação, especialmente em mercados altamente voláteis, o que pode aumentar os custos de transação e potencialmente levar a mais sinais falsos.

  2. Sensibilidade dos parâmetros: a estratégia utiliza vários períodos EMA fixos e limiares percentuais. Estes parâmetros podem precisar ser ajustados para diferentes mercados e prazos, caso contrário, podem levar a um desempenho estratégico fraco.

  3. Dependência de tendência: Como uma estratégia de tendência, pode ter um desempenho ruim em mercados variáveis ou oscilantes.

  4. A estratégia pode não ser capaz de capturar pontos de virada de tendência em tempo útil em mercados em rápida mudança.

  5. Complexidade: as múltiplas condições e regras da estratégia aumentam a sua complexidade, o que pode dificultar a sua compreensão e manutenção e também aumenta o risco de sobreajuste.

Orientações para a otimização da estratégia

  1. Ajuste dinâmico de parâmetros: considerar a introdução de um mecanismo adaptativo para ajustar dinamicamente os períodos de EMA e outros parâmetros com base na volatilidade do mercado.

  2. Incorporar indicadores de volume: a combinação de análise de volume pode melhorar a precisão das decisões de entrada e saída.

  3. Filtragem do ambiente de mercado: introduzir um mecanismo de identificação do ambiente de mercado, como o uso de ATR (Average True Range) ou indicadores de volatilidade, para pausar a negociação em ambientes impróprios para a tendência.

  4. Otimize o mecanismo de stop-loss: considere usar trailing stops em vez de fixed stops.

  5. Adicionar filtragem por tempo: limitar a negociação a períodos de tempo específicos, evitando períodos de alta volatilidade ou baixa liquidez, o que pode melhorar a estabilidade da estratégia.

  6. Introduzir Machine Learning: utilizar algoritmos de machine learning para otimizar a selecção de parâmetros e as decisões de entrada, o que pode melhorar a adaptabilidade e o desempenho da estratégia.

  7. Análise de quadros de tempo múltiplos: Incorporar análises de tendências a partir de quadros de tempo mais longos para melhorar a precisão da decisão de entrada e evitar a entrada contra a tendência principal.

Conclusão

Esta estratégia demonstra um sistema de negociação abrangente que combina múltiplos indicadores técnicos e conceitos de negociação. Ao usar múltiplos EMAs e condições de entrada, a estratégia tenta encontrar um equilíbrio entre capturar tendências e reduzir falsos sinais.

Embora a estratégia tenha vantagens em termos de confirmações múltiplas e elevada adaptabilidade, a sua complexidade e sensibilidade à selecção de parâmetros também apresentam certos desafios.

Em geral, esta estratégia fornece uma estrutura interessante para seguir tendências, mas os traders precisam realizar um backtesting completo e otimização de parâmetros ao aplicá-la na prática, e fazer ajustes apropriados com base em mercados específicos e estilos de negociação.


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

Mais.