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.
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:
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
Dependência de tendência: Como uma estratégia de tendência, pode ter um desempenho ruim em mercados variáveis ou oscilantes.
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.
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.
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.
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.
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.
Otimize o mecanismo de stop-loss: considere usar trailing stops em vez de fixed stops.
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.
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.
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.
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")