Tendência na sequência de uma estratégia baseada na interrupção dinâmica de perdas do cruzamento de duas EMA

Autora:ChaoZhang, Data: 2024-01-29 09:57:20
Tags:

img

Resumo

Esta estratégia utiliza a cruz de ouro e a cruz morta das linhas EMA para seguir tendências bidirecionais e estabelece linhas de stop loss dinâmicas para posições longas e curtas para capturar os movimentos de tendência no mercado.

Estratégia lógica

  1. Calcular a linha EMA rápida (5 dias) e a linha EMA lenta (20 dias)
  2. Vá longo quando a linha rápida cruza acima da linha lenta de baixo; vá curto quando a linha rápida cruza abaixo da linha lenta de cima
  3. Após entrada longa, definir stop loss dinâmico ao preço de entrada * (1 - percentagem de stop loss longa); Após entrada curta, definir stop loss dinâmico ao preço de entrada * (1 + percentagem de stop loss curto)
  4. Posição de saída com stop loss quando o preço atingir o nível de stop loss

Análise das vantagens

  1. As linhas EMA têm capacidades mais fortes no acompanhamento de tendências.
  2. Stop loss dinâmico move-se junto com o lucro, maximizando o lucro de captura de tendência
  3. Filtro adicional com vwap evita ser preso em whipssaws e melhora a qualidade do sinal

Análise de riscos

  1. Como uma pura tendência de seguir uma estratégia, é vulnerável a mercados variados com
  2. A perda de parada excessivamente frouxa pode conduzir a perdas aumentadas
  3. A natureza atrasada dos sinais de cruzamento da EMA pode deixar de ser o melhor ponto de entrada

Melhorias como a gestão de riscos baseada em ATR, a otimização das regras de stop loss, a adição de indicadores de filtro, etc., podem ajudar a melhorar a estratégia.

Orientações para a melhoria

  1. Incorporar indicadores dinâmicos de stop loss como ATR ou DONCH para definir melhores paradas adaptativas
  2. Adicione mais indicadores de filtro como MACD, KDJ para evitar maus negócios
  3. Otimizar os parâmetros para encontrar a melhor combinação de comprimentos EMA
  4. Utilize métodos de aprendizagem de máquina para descobrir parâmetros ideais

Conclusão

Em conclusão, esta é uma tendência muito típica após a estratégia. O cruzamento duplo da EMA com stop loss dinâmico pode efetivamente bloquear os lucros da tendência. Enquanto isso, os riscos como sinais atrasados e paradas generalizadas ainda existem. Através do ajuste de parâmetros, gerenciamento de riscos, adições de filtros, etc., o refinamento adicional pode levar a melhores resultados.


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

//@version=5

strategy("EMA Crossover Strategy", shorttitle="EMAC", overlay=true,calc_on_every_tick=true)

// Input parameters
shortEmaLength = input(5, title="Short EMA Length")
longEmaLength = input(20, title="Long EMA Length")
priceEmaLength = input(1, title="Price EMA Length")

// Set stop loss level with input options (optional)
longLossPerc = input.float(0.05, title="Long Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

shortLossPerc = input.float(0.05, title="Short Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

// Calculating indicators
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
//priceEma = ta.ema(close, priceEmaLength)
vwap = ta.vwap(close)

// Long entry conditions
longCondition = ta.crossover(shortEma, longEma) and close > vwap
// Short entry conditions
shortCondition = ta.crossunder(shortEma, longEma) and close > vwap

// STEP 2:
// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


if (longCondition)
    strategy.entry("Enter Long", strategy.long)
    strategy.exit("Exit Long",from_entry = "Enter Long",stop= longStopPrice)
plotshape(series=longCondition, title="Long Signal", color=color.green, style=shape.triangleup, location=location.belowbar)


if (shortCondition)
    strategy.entry("Enter Short", strategy.short)
    strategy.exit("Exit Short", from_entry = "Enter Short",stop = shortStopPrice)
plotshape(series=shortCondition, title="Short Signal", color=color.red, style=shape.triangledown, location=location.abovebar)

// Stop loss levels
//longStopLoss = (1 - stopLossPercent) * close
//shortStopLoss = (1 + stopLossPercent) * close

// Exit conditions
//strategy.exit("Long", from_entry="Long", loss=longStopLoss)
//strategy.exit("Short", from_entry="Short", loss=shortStopLoss)

// Plotting indicators on the chart
plot(shortEma, color=color.yellow, title="Short EMA")
plot(longEma, color=color.green, title="Long EMA")
plot(close, color=color.black, title="Close")
plot(vwap, color=color.purple, title="VWAP")

// Plot stop loss values for confirmation
plot(strategy.position_size > 0 ? longStopPrice : na,
     color=color.red, style=plot.style_line,
     linewidth=2, title="Long Stop Loss")

plot(strategy.position_size < 0 ? shortStopPrice : na,
     color=color.blue, style=plot.style_line,
     linewidth=2, title="Short Stop Loss")
// Plotting stop loss lines
//plot(longStopLoss, color=color.red, title="Long Stop Loss", linewidth=2, style=plot.style_line)
//plot(shortStopLoss, color=color.aqua, title="Short Stop Loss", linewidth=2, style=plot.style_line)

Mais.