Estratégia de rastreamento de Golden Cross e Death Cross Double EMA


Data de criação: 2023-11-13 17:35:14 última modificação: 2023-11-13 17:35:14
cópia: 0 Cliques: 681
1
focar em
1617
Seguidores

Estratégia de rastreamento de Golden Cross e Death Cross Double EMA

Visão geral

Esta estratégia é uma estratégia de acompanhamento de tendências, calculada pela linha rápida EMA e linha lenta EMA, e comparando a relação de tamanho entre os dois, para obter um sinal de negociação de forquilha de ouro e forquilha morta em EMA dupla. Quando a linha rápida atravessa a linha lenta, gera um sinal de compra, quando a linha rápida atravessa a linha lenta, gera um sinal de venda.

Princípio da estratégia

A lógica central da estratégia é composta principalmente por:

  1. Computação de EMA de linha rápida e EMA de linha lenta: computação de EMA de linha rápida com a duração de FastInput e EMA de linha lenta com a duração de SlowInput através da função ta.ema ().

  2. Configure o intervalo de tempo de retorno: configure o tempo de retorno para filtragem ou não, o tempo de início e o tempo de término do backtestStartDate e do backtestEndDate com os parâmetros useDateFilter.

  3. Geração de sinais de transação: através da função ta.crossover ((() e ta.crossunder ((() comparando a relação de tamanho entre o EMA da linha rápida e o EMA da linha lenta, gera um sinal de compra quando a linha rápida atravessa a linha lenta e gera um sinal de venda quando a linha rápida atravessa a linha lenta.

  4. Processar ordens fora do período de tempo: cancelar ordens pendentes fora do período de tempo de retrospecção e nivelar todas as posições.

  5. Desenhar uma média móvel: Desenhar uma média móvel de uma EMA rápida e uma EMA lenta no gráfico.

Vantagens estratégicas

É uma estratégia muito simples de acompanhamento de tendências, com as seguintes vantagens:

  1. A lógica da estratégia é simples, fácil de entender e de implementar.

  2. A EMA simplificou os dados de preços para reduzir o ruído das transações.

  3. Os parâmetros do ciclo EMA podem ser personalizados para adaptar-se a diferentes cenários de mercado.

  4. Pode-se ajustar flexivelmente o intervalo de tempo de resposta para testes em intervalos de tempo específicos.

  5. Condições de entrada e saída podem ser otimizadas em combinação com outros indicadores.

Análise de Riscos

A estratégia também apresenta alguns riscos que devem ser lembrados:

  1. A dupla estratégia de EMA é muito grosseira e não tem a flexibilidade necessária para responder às mudanças do mercado.

  2. Existe o risco de transações frequentes e repetidas.

  3. A configuração incorreta dos parâmetros EMA pode causar erros nos sinais de negociação.

  4. Uma escala de tempo de detecção não razoável pode levar a uma sobre-conformidade.

  5. O risco de uma retirada inevitável e de perdas.

O risco pode ser controlado por meio de otimização de parâmetros, filtragem adequada de flutuações e configuração de stop loss.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Optimizar os parâmetros do ciclo EMA e escolher a melhor combinação de parâmetros.

  2. Adicionar filtros para outros indicadores e evitar transações desnecessárias.

  3. Aumentar as estratégias de stop loss e controlar as perdas individuais.

  4. Os filtros de tendências e oscilações reduzem a frequência de negociação.

  5. Teste os diferentes contratos de variedades para encontrar o melhor candidato para a estratégia.

  6. O uso de pontos de deslizamento, controle de custos, taxas e outras coisas, para tornar o retorno mais realista.

Resumir

Esta estratégia é uma estratégia de EMA dupla muito simples, com lógica clara e fácil de entender, que gera sinais de negociação por meio de comparação de EMA de linha rápida e lenta. A vantagem da estratégia é a simplicidade de implementação, mas também há alguns problemas, como negociação frequente, que pode causar otimização excessiva, etc. O próximo passo pode ser melhorado em termos de otimização de parâmetros, controle de risco e outros aspectos, tornando a estratégia mais robusta e prática.

Código-fonte da estratégia
/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

fastInput = input( 10, "Fast EMA")
slowInput = input( 21, "Slow EMA")

// Calculate two moving averages with different lengths.
float fastMA = ta.ema(close, fastInput)
float slowMA = ta.ema(close, slowInput)


// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2018"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " +  
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("7 Sep 2023"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

// STEP 2. See if current bar falls inside the date range
inTradeWindow = true

// STEP 3. Include the date filter with the entry order conditions

// Enter a long position when `fastMA` crosses over `slowMA`.
if inTradeWindow and ta.crossover(fastMA, slowMA)
    strategy.entry("buy", strategy.long)

// Enter a short position when `fastMA` crosses under `slowMA`.
if inTradeWindow and ta.crossunder(fastMA, slowMA)
    strategy.close_all(comment="sell")

// STEP 4. With the backtest date range over, exit all open
// trades and cancel all unfilled pending orders
if not inTradeWindow and inTradeWindow[1]
    strategy.cancel_all()
    strategy.close_all(comment="Date Range Exit")

// Plot the moving averages.
plot(fastMA, "Fast MA", color.aqua)
plot(slowMA, "Slow MA", color.orange)