Estratégia de acompanhamento de tendência de Golden Cross Double EMA


Data de criação: 2023-11-21 15:10:54 última modificação: 2023-11-21 15:10:54
cópia: 0 Cliques: 648
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendência de Golden Cross Double EMA

Visão geral

Esta estratégia é uma estratégia de acompanhamento de tendências simples, calculada pela EMA rápida e pela EMA lenta, e comparada com a relação de tamanho e tamanho das duas EMAs para determinar a direção da tendência do mercado. Quando a EMA rápida atravessa a EMA lenta, faz mais e, quando a EMA rápida atravessa a EMA lenta, faz vazio.

Princípio da estratégia

Os indicadores centrais da estratégia são os EMAs de linha rápida e lenta. O EMA de linha rápida tem um comprimento de 21 ciclos e o EMA de linha lenta tem um comprimento de 55 ciclos. O EMA de linha rápida responde mais rapidamente às mudanças de preço, refletindo tendências recentes de curto prazo; o EMA de linha lenta responde mais lentamente às mudanças de preço, filtrando parte do ruído e refletindo tendências de médio e longo prazo.

Quando a linha rápida EMA atravessa a linha lenta EMA, indica que a tendência de curto prazo se transformou em alta, a tendência de médio e longo prazo pode ter uma reversão, que é um sinal de fazer mais. Quando a linha rápida EMA atravessa a linha lenta EMA abaixo, indica que a tendência de curto prazo se transformou em baixa, a tendência de médio e longo prazo pode ter uma reversão, que é um sinal de fazer curto.

A comparação de EMAs rápidas e lentas permite capturar pontos de inflexão de tendências em duas escalas de tempo, a curto e a médio prazo, e é uma estratégia típica de rastreamento de tendências.

Vantagens estratégicas

  1. A ideia é simples, clara, fácil de entender e de implementar.
  2. Ajuste de parâmetros flexível, com períodos de EMA de linha rápida e lenta personalizáveis
  3. Paragem de perda ATR configurável, risco controlado

Risco estratégico

  1. A escolha dos pontos de cruzamento do EMA duplo pode ser imprópria, existindo o risco de perder os melhores pontos de entrada
  2. Quando as coisas estão agitadas, pode haver vários sinais de invalidez, o que traz risco de perdas.
  3. Parâmetros de ATR mal definidos, podendo causar parada de perda muito relaxada ou muito radical

Métodos de resposta aos riscos:

  1. Optimizar os parâmetros da linha rápida e lenta da EMA, procurando a combinação de parâmetros ideal
  2. Aumentar os mecanismos de filtragem para evitar sinais ineficazes de turbulência
  3. Testar e otimizar os parâmetros ATR para garantir que a configuração do stop loss seja razoável

Direção de otimização da estratégia

  1. Testes de estabilidade de diferentes parâmetros do ciclo EMA baseados em métodos estatísticos
  2. Aumentar as condições de filtragem, em combinação com outros indicadores para evitar sinais de invalidez
  3. Optimizar os parâmetros ATR para obter a melhor taxa de stop loss

Resumir

Esta estratégia é simples, clara e fácil de implementar. Ao mesmo tempo, em combinação com o ATR, para definir um stop loss, o risco é controlado. Otimizando os parâmetros e aumentando as condições de filtragem, pode aumentar ainda mais a estabilidade da estratégia e a lucratividade.

Código-fonte da estratégia
/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "VP Backtester", overlay=false)


// Create General Strategy Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
 
// Default Stop Types
fstp = input(defval=false, title="Fixed Perc stop")
fper = input(defval=0.1, title='Percentage for fixed stop', type=float)
atsp = input(defval=true, title="ATR Based stop")
atrl = input(defval=14, title='ATR Length for stop')
atrmsl = input(defval=1.5, title='ATR Multiplier for stoploss')
atrtpm = input(defval=1, title='ATR Multiplier for profit')
 
// Sessions
asa_inp = input(defval=true, title="Trade the Asian Session")
eur_inp = input(defval=true, title="Trade the European Session")
usa_inp = input(defval=true, title="Trade the US session")
ses_cls = input(defval=true, title="End of Session Close Out?")
 
// Session Start / End times (In exchange TZ = UTC-5)    
asa_ses = "1700-0300" 
eur_ses = "0200-1200" 
usa_ses = "0800-1700"  
 
in_asa = time(timeframe.period, asa_ses)
in_eur = time(timeframe.period, eur_ses)
in_usa = time(timeframe.period, usa_ses)
 
strategy.risk.allow_entry_in(strategy.direction.all)
 
// Set start and end dates for backtest
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
window()  => time >= start and time <= end ? true : false // create function "within window of time"

 
// Check if we are in a sessions we want to trade
can_trade = asa_inp and not na(in_asa) ? true :
  eur_inp and not na(in_eur) ? true :
  usa_inp and not na(in_usa) ? true :
  false
  
// atr calc for stop and profit
atr = atr(atrl)
atr_stp_dst_sl = atr * atrmsl
atr_stp_dst_tp = atr * atrtpm



//*************************************************************************************
// Put your strategy/indicator code below
// and make sure to set long_condition=1 for opening a buy trade
// and short_condition for opening a sell trade
//*************************************************************************************
fastInput = input(21)
slowInput = input(55)

fast = ema(close, fastInput)
slow = ema(close, slowInput)

plot(fast, color = red)
plot(slow, color = blue)

long_condition = crossover(fast, slow)
short_condition = crossunder(fast, slow)


//*************************************************************************************
// Trade management with ATR based stop & profit
//*************************************************************************************
if (long_condition and window() )
    strategy.entry("Long Entry",  strategy.long)
    if strategy.position_size <= 0 // Less than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  - atr_stp_dst_sl
            atr_profit = open + atr_stp_dst_tp
            strategy.exit('ATR Long Exit', "Long Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open - (open * fper)
            strategy.exit('Perc Fixed Long Stop Exit', "Long Entry", stop=stop)
 
if (short_condition and window() )
    strategy.entry("Short Entry",strategy.short)
    if strategy.position_size >= 0 // Greater than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  + atr_stp_dst_sl
            atr_profit = open - atr_stp_dst_tp
            strategy.exit('ATR Short Exit', "Short Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open + (open * fper)
            strategy.exit('Perc Fixed Short Stop Exit', "Short Entry", stop=stop)
 
 
strategy.close_all(when=not can_trade and ses_cls)