
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.
A lógica central da estratégia é composta principalmente por:
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 ().
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.
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.
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.
Desenhar uma média móvel: Desenhar uma média móvel de uma EMA rápida e uma EMA lenta no gráfico.
É uma estratégia muito simples de acompanhamento de tendências, com as seguintes vantagens:
A lógica da estratégia é simples, fácil de entender e de implementar.
A EMA simplificou os dados de preços para reduzir o ruído das transações.
Os parâmetros do ciclo EMA podem ser personalizados para adaptar-se a diferentes cenários de mercado.
Pode-se ajustar flexivelmente o intervalo de tempo de resposta para testes em intervalos de tempo específicos.
Condições de entrada e saída podem ser otimizadas em combinação com outros indicadores.
A estratégia também apresenta alguns riscos que devem ser lembrados:
A dupla estratégia de EMA é muito grosseira e não tem a flexibilidade necessária para responder às mudanças do mercado.
Existe o risco de transações frequentes e repetidas.
A configuração incorreta dos parâmetros EMA pode causar erros nos sinais de negociação.
Uma escala de tempo de detecção não razoável pode levar a uma sobre-conformidade.
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.
A estratégia pode ser melhorada em vários aspectos:
Optimizar os parâmetros do ciclo EMA e escolher a melhor combinação de parâmetros.
Adicionar filtros para outros indicadores e evitar transações desnecessárias.
Aumentar as estratégias de stop loss e controlar as perdas individuais.
Os filtros de tendências e oscilações reduzem a frequência de negociação.
Teste os diferentes contratos de variedades para encontrar o melhor candidato para a estratégia.
O uso de pontos de deslizamento, controle de custos, taxas e outras coisas, para tornar o retorno mais realista.
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.
/*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)