Análise da estratégia da dupla EMA

Autora:ChaoZhang, Data: 2024-02-28 18:07:59
Tags:

img

Resumo

A estratégia de dupla EMA é uma estratégia de tendência que identifica a direção da tendência dos preços, calculando EMAs de diferentes ciclos e usa isso para determinar entradas e saídas.

Estratégia lógica

A estratégia baseia-se principalmente em dois indicadores EMA, um EMA de 9 dias de curto prazo e um EMA de 21 dias de longo prazo.

Quando a EMA curta cruza acima da EMA longa, ela é vista como preços entrando em uma tendência de alta. A estratégia irá longo para seguir a tendência ascendente. Quando a EMA curta cruza abaixo da EMA longa, ela é vista como preços entrando em uma tendência de queda. A estratégia irá curto para seguir a tendência de queda.

Os indicadores EMA podem efetivamente filtrar o ruído dos dados de preços e identificar a principal direção da tendência.

Vantagens

A estratégia apresenta as seguintes vantagens:

  1. A ideia estratégica é simples e fácil de entender e implementar.
  2. Pode identificar eficazmente as tendências de preços e entrar em posições oportunas para seguir as tendências.
  3. A utilização de EMAs filtra o ruído e evita interferências de flutuações de preços a curto prazo.
  4. Os parâmetros da EMA podem ser configurados para ajustar a sensibilidade da estratégia.

Riscos

Há também alguns riscos com esta estratégia:

  1. A característica de atraso das EMAs pode aumentar as perdas quando as tendências se revertem.
  2. Ajustes incorretos dos parâmetros da EMA aumentam as taxas de sinal falso.
  3. A estratégia é mais adequada para mercados com tendências fortes e vulneráveis em períodos de variação.

Reforço

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Incorporar outros indicadores para identificar inversões de tendência e reduzir perdas, por exemplo, MACD, KDJ, etc.
  2. Adicione a lógica de stop loss. boas estratégias de stop loss podem reduzir muito o drawdown máximo.
  3. Otimizar os parâmetros da EMA para melhor adaptá-los às características de preços dos diferentes produtos.
  4. Usar algoritmos de aprendizagem de máquina para automatizar a otimização de parâmetros EMA.

Resumo

Em resumo, a estratégia de dupla EMA é uma estratégia muito útil de tendência. É fácil de operar, entender e tem um excelente desempenho em mercados de forte tendência. A estratégia também tem alguns riscos que podem ser mitigados através de vários aprimoramentos para melhorar sua estabilidade.


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

//@version=5
// This can only draw so many lines. Use bar replay to go back further
strategy("Strategy Lines", shorttitle="Strategy Lines", overlay=true, max_lines_count=500)

//###########################################################################################################################################
// Replace your strategy here
//###########################################################################################################################################

shortEMA = ta.ema(close, input(9, title="Short EMA Length"))
longEMA = ta.ema(close, input(21, title="Long EMA Length"))

// Entry conditions for long and short positions
longCondition = ta.crossover(shortEMA, longEMA)
shortCondition = ta.crossunder(shortEMA, longEMA)

//###########################################################################################################################################
// Strategy Lines
//###########################################################################################################################################

var timeLow = bar_index
var line li = na
var openLPrice = 0.0000
var openSPrice = 0.0000

LongWColor = input.color(color.rgb(0,255,0,0),"Long Win Color", group="Strategy Lines")
LongLColor = input.color(color.rgb(0,0,255,0),"Long Loss Color", group="Strategy Lines")
ShortWColor = input.color(color.rgb(255,255,0,0),"Short Win Color", group="Strategy Lines")
ShortLColor = input.color(color.rgb(255,0,0,0),"Short Loss Color", group="Strategy Lines")
WinFontColor = input.color(color.rgb(0,0,0,0),"Win Font Color", group="Strategy Lines")
LossFontColor = input.color(color.rgb(255,255,255,0),"Loss Font Color", group="Strategy Lines")
LinesShowLabel = input(false,"Show Labels?",group = "Strategy Lines")

// // Start new line when we go long
// if strategy.position_size >0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)

// // Start new line when we go short
// if strategy.position_size <0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)

// //Delete Lines if we don't have a position open
// if strategy.position_size ==0
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=color.rgb(0,0,0,100))
//     line.delete(li)

if LinesShowLabel
    // Short Label
    if strategy.position_size>=0 and strategy.position_size[1] <0
        label.new(
             timeLow, na, 
             text=str.tostring((openSPrice-close[1])/(syminfo.mintick*10)), 
             color=close[1]<openSPrice?ShortWColor:ShortLColor, 
             textcolor=close[1]<openSPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)
    // Long Label
    if strategy.position_size<=0 and strategy.position_size[1] >0
        label.new(
             timeLow, na,
             text=str.tostring((close[1]-openLPrice)/(syminfo.mintick*10)), 
             color=close[1]>openLPrice?LongWColor:LongLColor, 
             textcolor=close[1]>openLPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)

// Open long position and draw line
if (longCondition)
    //strategy.entry("Long", strategy.long)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)
    openLPrice := close

// Open short position and draw line
if (shortCondition)
    //strategy.entry("Short", strategy.short)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)
    openSPrice := close

//###########################################################################################################################################
// Strategy Execution (Replace this as well)
//###########################################################################################################################################

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

Mais.