Estratégia de tendência de alta multi-EMA

Autora:ChaoZhang, Data: 2024-01-22 12:04:05
Tags:

img

Resumo

A Estratégia de Tendência de Alta Multi-EMA é uma estratégia de tendência baseada em múltiplas médias móveis exponenciais (EMA) de diferentes períodos para determinação de tendência.

Estratégia lógica

A estratégia emprega 6 EMAs de períodos de 10, 20, 50, 100, 150 e 200 dias. Essas EMAs são usadas para determinar o estágio cíclico atual do mercado.

Em especial, a estratégia será duradoura se estiverem preenchidas as seguintes condições:

  1. A EMA de 10 dias é superior à EMA de 20 dias
  2. A EMA de 20 dias é superior à EMA de 50 dias
  3. A EMA de 100 dias é superior à EMA de 150 dias
  4. A EMA de 150 dias é superior à EMA de 200 dias
  5. Preço de fechamento cruza a EMA de 10 dias

Após a abertura de uma posição longa, um stop loss de 8% é usado para bloquear os lucros. Isso significa que a posição será mantida aberta enquanto o preço não cair mais de 8% do preço de entrada. Uma vez que o drawdown exceda 8%, a posição será fechada para parar a perda.

Em resumo, a ideia-chave desta estratégia é entrar em tendência de alta quando confirmado por alinhamento múltipla EMA, e usar stop loss para bloquear os lucros.

Análise das vantagens

A estratégia de tendência de alta multi-EMA tem os seguintes pontos fortes principais:

  1. Pode filtrar efetivamente as falhas e garantir a captação dos ciclos de margem, reduzindo os negócios desnecessários.
  2. Os múltiplos filtros EMA reduzem a probabilidade de um stop loss ser atingido, permitindo uma manutenção mais segura das posições.
  3. A taxa de stop loss de 8% não é nem muito apertada nem muito frouxa, equilibrando a tomada de lucro e a suspensão de perda.
  4. A estratégia permite ajuste flexível de parâmetros para otimização em diferentes produtos.

Análise de riscos

Há também alguns riscos a considerar para esta estratégia:

  1. A sequência da EMA não pode garantir a direção da tendência para 100% dos casos, alguns whipsaws ainda podem ocorrer.
  2. A parada de 8% pode desistir de alguns lucros durante grandes tendências.
  3. Os sistemas da EMA têm atrasos inerentes, a confirmação dos pontos de virada pode ser ligeiramente atrasada.

Para enfrentar estes riscos, podemos otimizar ajustando os períodos de EMA ou incorporando indicadores auxiliares para um melhor julgamento.

Orientações de otimização

Tendo em conta as características desta estratégia, as futuras otimizações podem centrar-se nos seguintes aspectos:

  1. Teste diferentes combinações de EMA e conjuntos de períodos para encontrar parâmetros ideais.
  2. Adicionar indicadores de índice de volatilidade para avaliar a força da tendência para evitar entradas desnecessárias.
  3. Incluir mais indicadores de filtragem como MACD, KDJ para confirmação de alinhamento de alta.
  4. Empregar algoritmos de aprendizagem de máquina para a implementação dinâmica de stop loss.

Conclusão

Em geral, a Estratégia de Tendência de Touro Multi-EMA é um sistema robusto e confiável de tendência, equilibrando a determinação da tendência e o controle de risco.


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('SirSeff\'s EMA Rainbow', overlay=true)
// Testing Start dates
testStartYear = input(2000, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2100, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(30, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop

//TSP
trailStop = input.float(title='Long Trailing Stop (%)', minval=0.0, step=0.1, defval=8) * 0.01

longStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0

//PLOTS
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(ta.ema(close, 20))
plot(ta.ema(close, 50))
plot(ta.ema(close, 100))
plot(ta.ema(close, 150))
plot(ta.ema(close, 200))

//OPEN
longCondition =  ta.ema(close, 10) > ta.ema(close, 20) and ta.ema(close, 20) > ta.ema(close, 50) and ta.ema(close, 100) > ta.ema(close, 150) and ta.ema(close, 150) > ta.ema(close, 200)
if longCondition and ta.crossover(close,ta.ema(close,10)) and testPeriod()
    strategy.entry("BUY1", strategy.long)
    
if longCondition and ta.crossover(ta.ema(close,10),ta.ema(close,20)) and testPeriod()
    strategy.entry("BUY2'", strategy.long)

//CLOSE @ TSL
if strategy.position_size > 0 and testPeriod()
    strategy.exit(id='TSP', stop=longStopPrice)
    


Mais.