Estratégia de ruptura da tripla EMA

Autora:ChaoZhang, Data: 2023-12-28 15:56:54
Tags:

img

Resumo

A estratégia Triple EMA Crossover Breakout usa indicadores de média móvel exponencial tripla (EMA) para determinar a direção da tendência do mercado e entrar nos pontos de ruptura da tendência.

Estratégia lógica

A estratégia baseia-se principalmente nos seguintes princípios:

  1. Utilize três EMA com períodos diferentes (200 dias, 50 dias, 20 dias) para determinar as principais tendências de mercado a médio e curto prazo.

  2. Quando a EMA de curto prazo (20 dias) cruza acima da EMA de médio prazo (50 dias), é gerado um sinal de compra.

  3. Combine padrões de velas para verificar a confiabilidade do sinal. Somente quando o preço de fechamento da segunda vela é maior (menor) do que o preço alto (baixo) da vela anterior, a quebra é considerada confiável.

  4. Estabelecer níveis de stop loss e de lucro para limitar os riscos para além das flutuações razoáveis dos preços.

Análise das vantagens

  1. O uso de múltiplas EMAs melhora a precisão do julgamento da tendência.

  2. Filtrar sinais falsos com padrões de candelabro evita riscos comerciais desnecessários.

  3. Stop loss e take profit controla perdas de negociação única de forma eficaz.

Análise de riscos

  1. Em mercados variados, as EMAs podem gerar sinais falsos excessivos e não determinar a direcção do mercado.

  2. O sistema de indicadores únicos tem uma capacidade limitada em situações de mercado complexas.

  3. Ignora os custos de negociação que poderiam conduzir à não rendibilidade nos mercados de taxas elevadas.

Optimização

  1. Introduzir outros indicadores como o MACD e o KDJ para formar um sistema combinado e melhorar a precisão do julgamento.

  2. Otimizar parâmetros através de backtesting para símbolos específicos e prazos para tornar a estratégia mais adequada.

  3. Aumentar o volume de negociação para evitar sinais falsos de baixo volume.

Conclusão

A estratégia de ruptura de crossover tripla da EMA tem uma lógica clara e fácil de entender para determinar tendências de mercado e encontrar o tempo de entrada usando crossovers da EMA. Mas também tem algumas limitações ao lidar com situações de mercado complexas.


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

//@version=5
strategy("GHG RETRACEMENT MODE 1", overlay=true)

entryLevel1 = input(0.5, "ENTRY LEVEL 1")
entryLevel2 = input(0.25, "ENTRY LEVEL 2")
entryLevel3 = input(0.0, "ENTRY LEVEL 3")

stopLevel = input(-0.35, "STOP LEVEL")
tpLevel = input(0.88, "TP LEVEL")
dontUseEma = input(false, "Don't Use EMA")


get_level(level, level100, level0) =>
    level * (level100 - level0) + level0

buySignal = close[2] < open[2] and close[1] > open[1] and close[0] > open[0] and high[0] > open[2] and high[1] < high[2]
sellSignal = close[2] > open[2] and close[1] < open[1] and close[0] < open[0] and low[0] < open[2] and low[1] > low[2]

if buySignal and (close[0] > ta.ema(close, 200) or dontUseEma)
    l = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, high[0], low[2])
    entryPrice2 = get_level(entryLevel2, high[0], low[2])
    entryPrice3 = get_level(entryLevel3, high[0], low[2])
    
    exitPrice = get_level(tpLevel, high[0], low[2])
    stopPrice = get_level(stopLevel, high[0], low[2])
    
    strategy.order("BUY 1", strategy.long, comment="BUY 1", limit=entryPrice1)
    strategy.exit("exit", "BUY 1", limit=high[0], stop=stopPrice)
    strategy.order("BUY 2", strategy.long, comment="BUY 2", limit=entryPrice2)
    strategy.exit("exit", "BUY 2", limit=high[0], stop=stopPrice)

    label.set_text(l, "Buy => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(l, color.green)
    label.set_yloc(l, yloc.belowbar)
    label.set_style(l, label.style_label_up)
    
if sellSignal and (close[0] < ta.ema(close, 200) or dontUseEma)
    a = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, low[0], high[2])
    entryPrice2 = get_level(entryLevel2, low[0], high[2])
    entryPrice3 = get_level(entryLevel3, low[0], high[2])
    
    exitPrice = get_level(tpLevel, low[0], high[2])
    stopPrice = get_level(stopLevel,low[0], high[2])
    
    strategy.order("SELL 1", strategy.short, comment="SELL 1", limit=entryPrice1)
    strategy.exit("exit", "SELL 1", limit=low[0], stop=stopPrice) 
    strategy.order("SELL 2", strategy.short, comment="SELL 2", limit=entryPrice2)
    strategy.exit("exit", "SELL 2", limit=low[0], stop=stopPrice) 

    label.set_text(a,"Sell => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(a, color.red)
    label.set_yloc(a, yloc.abovebar)
    label.set_style(a, label.style_label_down)
   


Mais.