Estratégia de rastreamento de tendências de mercado cruzado com base na média móvel EMA, stop loss dinâmico bidirecional


Data de criação: 2024-01-29 09:57:20 última modificação: 2024-01-29 09:57:20
cópia: 0 Cliques: 587
1
focar em
1617
Seguidores

Estratégia de rastreamento de tendências de mercado cruzado com base na média móvel EMA, stop loss dinâmico bidirecional

Visão geral

Esta estratégia baseia-se no EMA para fazer um rastreamento bidirecional e estabelecer uma linha de parada de longo e curto prazo dinâmica para capturar a tendência.

Princípio da estratégia

  1. Calcule a linha EMA rápida (dia 5) e a linha EMA lenta (dia 20)
  2. Faça mais quando a linha rápida atravessa a linha lenta de baixo; faça espaço quando a linha rápida atravessa a linha lenta de cima para baixo
  3. Depois de fazer mais, configure a linha de parada dinâmica como preço de entrada(1-Percentagem de Stop Loss em Posições Longas); após o fechamento, define uma linha de Stop Loss Dinâmica como preço de entrada(1 + percentual de parada de posição curta)
  4. Quando o preço desencadeia a correspondente linha de stop loss, o stop loss sai

Análise de vantagens

  1. A EMA tem uma forte capacidade de rastrear a tendência, com um cronômetro de formação de travessia bidirecional, que pode bloquear efetivamente as oportunidades de tendência
  2. Calculação dinâmica da linha de stop loss, com a realização de lucros e o acompanhamento de mercado, para maximizar o lucro da tendência
  3. O uso de vWAP como condição de filtragem adicional para evitar o bloqueio e melhorar a qualidade do sinal

Análise de Riscos

  1. A estratégia de tendência pura, fácil de ser enganada quando as coisas se alteram
  2. A perda de capital pode aumentar se o stop loss for muito relaxado
  3. O atraso na geração de sinais de EMA mediana pode ter perdido o ponto ótimo do mercado

Pode ser otimizado por meio de métodos como o controle de risco do ATR, a otimização de estratégias de parada de perda em curto prazo ou a combinação de outros indicadores para a negociação de filtro de ruído.

Direção de otimização

  1. Combinação de indicadores de stop loss dinâmicos como ATR ou DONCH para definir uma linha de stop loss mais adequada ao mercado
  2. Adição de filtros de outros indicadores técnicos, como MACD, KDJ, etc., para reduzir erros de entrada e saída
  3. Parâmetros de otimização para encontrar a melhor combinação de comprimentos de linha média rápida e lenta
  4. Podemos experimentar métodos de aprendizagem de máquina para encontrar o melhor parâmetro.

Resumir

Esta estratégia é uma estratégia de acompanhamento de tendências muito típica. A dupla EMA forma um forco de ouro, um stop loss dinâmico, que pode bloquear efetivamente a tendência para o lucro.

Código-fonte da estratégia
/*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)