Estratégia de negociação da EMA dinâmica de vários prazos

Autora:ChaoZhang, Data: 2023-12-12 12:18:41
Tags:

img

Resumo

A ideia central desta estratégia é gerar sinais de negociação baseados no cruzamento de múltiplas médias móveis exponenciais (EMA). Ela vai longo quando a EMA de curto prazo cruza a EMA de longo prazo a partir de baixo e fecha posições quando a EMA de curto prazo cruza a EMA de longo prazo. Esta estratégia permite configurar vários períodos de EMA, e cada EMA pode ser ativada independentemente. A estratégia irá negociar crossovers em todas as EMA ativadas.

Nome da estratégia

Estratégia de negociação da EMA dinâmica de vários prazos

Princípio da estratégia

A estratégia estabelece 8 períodos de EMA - 8 dias, 13 dias, 21 dias, 34 dias, 55 dias, 89 dias, 144 dias e 233 dias.

Ele gera sinais longos quando a EMA de curto prazo cruza a EMA de longo prazo de baixo. Ele gera sinais de saída quando a EMA de curto prazo cruza a EMA de longo prazo de cima. Então, se duas EMAs forem ativadas, a EMA mais curta > a EMA mais longa é sinal longo, a EMA mais curta < a EMA mais longa é sinal de saída.

Por exemplo, se a EMA de 55 dias e a EMA de 89 dias estiverem ativadas, a estratégia vai longo quando a EMA de 55 dias cruza a EMA de 89 dias e sai quando a EMA de 55 dias cruza a EMA de 89 dias. Isso permite que a estratégia ajuste dinamicamente as combinações de EMA usadas, mudando de prazos mais longos para mais curtos ou vice-versa.

O dimensionamento das posições é definido em função do património líquido da conta dividido por close dividido pelo número de EMAs habilitadas, o que garante que os tamanhos das posições em cada cruzamento da EMA sejam iguais.

Análise das vantagens

  • Flexibilidade para ajustar os prazos através da configuração de diferentes EMAs
  • Cada EMA pode ser ativada/desativada de forma independente, altamente personalizável
  • Posições distribuídas uniformemente entre as EMA, favoráveis à gestão do risco
  • Utiliza múltiplas EMAs, pode mudar para EMAs mais adequadas para diferentes fases do mercado
  • Lógica simples e clara, fácil de entender e depurar

Análise de riscos

  • A EMA por si só não pode determinar a estrutura do mercado, propenso a sinais falsos
  • Os mercados de fenda levam a crossovers excessivos da EMA, aumentando a frequência das transacções e o custo do deslizamento
  • Necessidades de otimização dos parâmetros da EMA para diferentes mercados
  • Podem ser necessários outros indicadores para confirmar os sinais

Considere a combinação da EMA com outros indicadores, por exemplo, canais ou osciladores para filtrar sinais, ou incorporar indicadores de tendência e reversão.

Orientações de otimização

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

  1. Otimizar os parâmetros da EMA através de varredura de parâmetros e análise de avanço para encontrar as melhores combinações da EMA.

  2. Adicionar condições de filtragem em cruzamento da EMA para evitar sinais falsos, por exemplo, filtro de volume, filtro de volatilidade, etc.

  3. Combine com outros indicadores como MACD, KDJ, Bandas de Bollinger para aproveitar a complementaridade.

  4. Ajustar dinamicamente o dimensionamento das posições em cada EMA com base na volatilidade do mercado ou na força da tendência.

  5. Otimizar os níveis de stop loss e de lucro para alcançar a melhor relação risco/recompensa.

Conclusão

No geral, esta é uma estratégia muito simples e direta gerando sinais de cruzamento da EMA para capturar tendências de curto e médio prazo. Sua principal vantagem reside na alta configurabilidade e flexibilidade para permitir que os traders selecionem as EMAs adequadas para eles. No entanto, a EMA sozinha pode dar sinais falsos facilmente, o que é o maior risco. Combinando com outros indicadores e otimização de parâmetros pode levar a um melhor desempenho comercial.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)

// Revision:        1
// Author:          @ToS_MavericK

buyprice = 0.0
buyprice := buyprice[1]

// === INPUT SMA ===
EMA1  = input(8)
EMA2  = input(13)
EMA3  = input(21)
EMA4  = input(34)
EMA5  = input(55)
EMA6  = input(89)
EMA7  = input(144)
EMA8  = input(233)

EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)

//Profit  = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss    = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
FromMonth   = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear    = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay   = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear  = input(defval = 2020, title = "To Year", minval = 2012)


// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)

count = -1
if (EnableEMA1 == true)
    count := count + 1
if (EnableEMA2 == true)
    count := count + 1
if (EnableEMA3 == true)
    count := count + 1
if (EnableEMA4 == true)
    count := count + 1
if (EnableEMA5 == true)
    count := count + 1
if (EnableEMA6 == true)
    count := count + 1
if (EnableEMA7 == true)
    count := count + 1
if (EnableEMA8 == true)
    count := count + 1

// set position size
Amount = 1 / (close * count)

// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))

strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))

strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))

strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))

strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))

strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))

strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))

plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line)  // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line)    // plot SlowMA

//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line)    // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line)    // plot SlowMA


Mais.