Estratégia dupla de cruzamento da EMA

Autora:ChaoZhang, Data: 2023-11-13 17:35:14
Tags:

img

Resumo

Esta estratégia gera sinais de negociação baseados no cruzamento e cruzamento de linhas EMA rápidas e lentas, pertencentes a estratégias de tendência.

Estratégia lógica

A lógica central desta estratégia inclui principalmente as seguintes partes:

  1. Calcular EMAs rápidas e lentas: utilizar ta.ema() para calcular EMAs rápidas de comprimento fastInput e EMAs lentas de comprimento slowInput.

  2. Definir intervalo de tempo de backtest: Use useDateFilter para definir se deve filtrar o intervalo de tempo de backtest, e use backtestStartDate e backtestEndDate para definir o horário de início e fim.

  3. Gerar sinais de negociação: Use ta.crossover() e ta.crossunder() para comparar EMAs rápidas e lentas, gerando sinais de compra quando a EMA rápida cruza a EMA lenta e sinais de venda quando a EMA rápida cruza a EMA lenta.

  4. Manusear ordens fora do intervalo de tempo: cancelar ordens não preenchidas fora do intervalo de tempo do backtest e nivelar todas as posições.

  5. Traçar linhas EMA: traçar linhas EMA rápidas e lentas no gráfico.

Análise das vantagens

Trata-se de uma estratégia de tendência muito simples, com as seguintes vantagens:

  1. Lógica simples, fácil de entender e implementar.

  2. A EMA suaviza os dados de preços e reduz o ruído das negociações.

  3. Períodos de EMA personalizáveis, adaptáveis aos diferentes ambientes de mercado.

  4. Intervalo de tempo flexível de backtest para testes de períodos específicos.

  5. Condições de entrada e saída otimizáveis, podem ser combinadas com outros indicadores.

Análise de riscos

Esta estratégia tem também alguns riscos:

  1. A estratégia de dupla EMA é grosseira, incapaz de se adaptar de forma flexível às alterações do mercado.

  2. Risco de negociação frequente e reiterada.

  3. Os parâmetros EMA incorretos podem causar sinais de negociação errados.

  4. O intervalo de tempo de backtest não razoável pode conduzir a um sobreajuste.

  5. Risco de inevitável retirada e perdas.

Os riscos podem ser geridos através de otimização de parâmetros, filtragem de flutuações, stop loss, etc.

Orientações de otimização

Esta estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os períodos de EMA para encontrar a melhor combinação de parâmetros.

  2. Adicionar outros indicadores para filtrar transações desnecessárias.

  3. Adicionar stop loss para controlar a perda de uma única transação.

  4. Incorporar tendência, filtros de volatilidade para reduzir a frequência de negociação.

  5. Teste diferentes produtos para encontrar o melhor.

  6. Usar deslizamento, comissão para um backtest mais realista.

Resumo

Em resumo, esta é uma estratégia de crossover dual EMA muito simples com lógica clara, comparando EMAs rápidas e lentas. A vantagem é a implementação simples, mas também tem problemas como negociação frequente, sobreajuste.


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




Mais.