
A estratégia é um sistema de acompanhamento de tendências que combina a interseção de médias móveis de múltiplos índices (EMA) e níveis de expansão de Fibonacci. Utiliza a interação entre EMAs de diferentes períodos para identificar o início e o fim de tendências potenciais, enquanto usa os níveis de expansão de Fibonacci para determinar os objetivos de lucro. A estratégia também inclui regras de stop loss específicas para gerenciar o risco e proteger os lucros.
O núcleo da estratégia é o uso do cruzamento de EMAs em vários períodos de tempo para capturar o início e o fim de uma tendência. Concretamente, ele usa EMAs de 5 ciclos, 10 ciclos e 30 ciclos. A estratégia contém quatro diferentes condições de entrada, cada uma destinada a capturar diferentes cenários de mercado:
A primeira condição de entrada é acionada quando o preço toca ou fica abaixo de uma EMA de 30 ciclos, mas depois fecha acima dela, enquanto a EMA de 10 ciclos está acima da EMA de 5 ciclos e a EMA de 30 ciclos está 1% abaixo da EMA de 5 ciclos.
A segunda condição de entrada é acionada quando um EMA de 30 ciclos é atravessado em um EMA de 5 ciclos e um EMA de 30 ciclos foi atravessado em um EMA de 5 ciclos nas últimas 6 linhas K.
A terceira condição de entrada é acionada quando os preços máximos das duas linhas K atuais estão abaixo dos respectivos EMAs de 5 ciclos, e os EMAs de 5 ciclos estão abaixo dos EMAs de 10 ciclos, e os EMAs de 10 ciclos estão abaixo dos EMAs de 30 ciclos, e o preço máximo da linha K anterior está abaixo do preço de fechamento atual.
A quarta condição de admissão é acionada quando um EMA de 10 ciclos atravessa um EMA de 30 ciclos e um EMA de 5 ciclos atravessou um EMA de 30 ciclos nos últimos 4 linhas K, e os valores atuais de um EMA de 10 ciclos e um EMA de 5 ciclos são maiores do que os 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 baseados em níveis de expansão de Fibonacci, incluindo os níveis de 0,618, 0,786, 1,0 e 1,618. Quando os preços atingem esses níveis, a estratégia se posiciona de acordo com regras específicas.
Além disso, a estratégia inclui uma condição de bloqueio de lucro: se os dois últimos preços mínimos das linhas K forem superiores à EMA de 5 períodos e a EMA apresentar uma ordem ascendente ((5 > 10 > 30), a posição é liquidada para bloquear os lucros.
Confirmação múltipla: Usando várias EMAs e várias condições de entrada, a estratégia é capaz de identificar com mais precisão o início e a duração da tendência. Esse mecanismo de confirmação múltipla pode reduzir os falsos sinais e aumentar a precisão das negociações.
Adaptabilidade: quatro diferentes condições de entrada permitem que a estratégia se adapte a diferentes ambientes de mercado, capturando oportunidades de negociação, seja com breakouts rápidos ou com tendências lentas.
Gerenciamento de risco: A estratégia contém regras específicas de stop loss, o que ajuda a controlar o risco de cada transação. Diferentes condições de entrada correspondem a diferentes estratégias de stop loss, indicando a importância da estratégia para a gestão de risco.
Objetivo de lucro é claro: Usar o nível de expansão de Fibonacci como objetivo de lucro, fornece aos comerciantes um ponto de saída claro. Isso ajuda a evitar que os lucros sejam terminados prematuramente ou mantidos por muito tempo.
Proteção de lucro: as condições de bloqueio de lucro ajudam a proteger os lucros obtidos quando a tendência pode ser revertida, um aspecto importante que muitas estratégias de acompanhamento de tendências ignoram.
Combinação de indicadores técnicos: a estratégia combina as ferramentas EMA e Fibonacci, aproveitando as vantagens de ambas as ferramentas de análise técnica mais populares.
Excesso de negociação: várias condições de entrada podem levar a excesso de negociação, especialmente em mercados com muita volatilidade. Isso pode aumentar os custos de negociação e pode levar a mais falsos sinais.
Sensibilidade de parâmetros: a estratégia usa vários períodos de EMA e percentual de desvalorização fixos. Esses parâmetros podem precisar de ajustes de acordo com diferentes mercados e prazos de tempo, o que pode levar a um mau desempenho da estratégia.
Dependência de tendência: como uma estratégia de acompanhamento de tendências, pode ter um mau desempenho em mercados horizontais ou de turbulência. Nesses ambientes de mercado, pode ocorrer múltiplos falsos sinais e pequenos prejuízos.
Atraso: A EMA é essencialmente um indicador de atraso. Em um mercado em rápida mudança, a estratégia pode não ser capaz de capturar o ponto de viragem da tendência a tempo.
Complexidade: as múltiplas condições e regras de uma estratégia aumentam a sua complexidade, o que pode tornar a estratégia difícil de entender e manter, além de aumentar o risco de superalimento.
Ajustamento de parâmetros dinâmicos: pode ser considerado a introdução de mecanismos de adaptação, ajustando o ciclo EMA e outros parâmetros de acordo com a dinâmica da volatilidade do mercado. Isso pode melhorar a adaptabilidade da estratégia em diferentes ambientes de mercado.
Adição de indicadores de volume de transação: A combinação de análise de volume de transação pode melhorar a precisão das decisões de entrada e saída. Por exemplo, pode-se solicitar um aumento de volume de transação na entrada para confirmar a intensidade da tendência.
Filtragem de cenários de mercado: introdução de mecanismos de identificação de cenários de mercado, como o uso de ATR (Average True Range) ou indicadores de taxa de flutuação, para suspender a negociação em cenários de mercado que não são adequados para acompanhar a tendência.
Mecanismos de Stop Loss Optimizados: Considere o uso de tracking stop loss, em vez de stop loss fixo. Isso pode permitir que os lucros continuem a crescer, enquanto protege os lucros.
Adição de filtro de tempo: Limitar as negociações a períodos de tempo específicos, evitando períodos de tempo com maior volatilidade ou menos liquidez, pode melhorar a estabilidade da estratégia.
Introduzir aprendizagem de máquina: otimizar a seleção de parâmetros e as decisões de admissão com algoritmos de aprendizagem de máquina pode melhorar a adaptabilidade e a performance das estratégias.
Análise de múltiplos prazos: A análise de tendências em combinação com prazos mais longos pode aumentar a precisão das decisões de admissão, evitando a admissão em caso de reversão da tendência principal.
Esta estratégia de acompanhamento de tendências de EMAs múltiplas combinadas com a expansão de Fibonacci mostra um sistema de negociação abrangente que combina vários indicadores técnicos e ideias de negociação. Através do uso de várias EMAs e condições de entrada, a estratégia tenta encontrar um equilíbrio entre a captura de tendências e a redução de falsos sinais. O uso de níveis de expansão de Fibonacci fornece uma base objetiva para a definição de metas de lucro, enquanto as regras específicas de stop loss e de bloqueio de lucro refletem a importância dada à gestão de risco.
Apesar das vantagens de uma estratégia de confirmação múltipla e adaptabilidade, sua complexidade e sensibilidade à escolha de parâmetros também trazem alguns desafios. Para melhorar ainda mais a estabilidade e o desempenho da estratégia, pode-se considerar a introdução de direções de otimização, como ajuste de parâmetros dinâmicos, filtragem do ambiente de mercado e análise de múltiplos quadros temporais.
Em geral, esta estratégia oferece um quadro interessante para o acompanhamento de tendências, mas os comerciantes precisam fazer um bom feedback e otimização de parâmetros na aplicação prática, e fazer o ajuste apropriado de acordo com o mercado específico e estilo de negociação. Com a monitorização e otimização contínuas, esta estratégia tem o potencial de se tornar uma ferramenta de acompanhamento de tendências 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")