Estratégia de linha longa de dupla EMA Golden Cross

Autora:ChaoZhang, Data: 23 de Fevereiro de 2024 12:17:40
Tags:

img

Resumo

A estratégia de linha longa de dupla EMA Golden Cross é uma estratégia de rastreamento de tendências que apenas abre posições longas. A estratégia usa três médias móveis, EMA de curto prazo, EMA de médio prazo e EMA de longo prazo. A regra específica de entrada é: abrir longo quando o preço está acima da EMA de longo prazo e a EMA de curto prazo cruza acima da EMA de médio prazo para formar uma cruz de ouro.

Estratégia lógica

  1. Calcular a EMA de curto prazo, a EMA de médio prazo e a EMA de longo prazo utilizando três períodos de EMA configuráveis.

  2. Se o preço estiver acima da EMA de longo prazo, prova que está atualmente em uma tendência de alta.

  3. Se a EMA de curto prazo cruzar acima da EMA de médio prazo a partir de baixo para formar uma cruz de ouro, isso prova ainda mais que a tendência de alta está se fortalecendo.

  4. Quando ambas as condições acima forem satisfeitas ao mesmo tempo, abrir longo.

Análise das vantagens

A maior vantagem desta estratégia é que ela pode identificar efetivamente tendências usando o julgamento combinado de EMAs de vários períodos para evitar ser enganado pelo ruído de curto prazo do mercado.

Análise de riscos

O principal risco desta estratégia é a posição longa. Quando o mercado reverte, ele não é capaz de fechar posições a tempo, levando ao risco de expansão de perdas. Além disso, a fixação inadequada do período das EMAs também pode levar a negociações frequentes e aumentar os custos de transação.

Direcção de otimização

  1. Aumentar a gestão do tamanho das posições para reduzir as posições quando os drawdowns atingirem uma certa percentagem.

  2. Aumentar as configurações de stop loss quando romper novos máximos.

  3. Otimizar os parâmetros de período da EMA para reduzir a frequência de negociação.

Resumo

Esta estratégia é, em geral, uma estratégia de detenção de longo prazo estável e de alta qualidade. Tem uma forte capacidade de identificar tendências com o controle adequado do risco. Com uma otimização adicional, espera-se obter retornos estáveis melhores.


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

//@version=5
strategy("Strategia EMA Long con Opzioni di Uscita Avanzate e Periodi EMA Personalizzabili", overlay=true)

// Parametri di input generali
useVolatilityFilter = input.bool(true, title="Usa Filtro di Volatilità")
atrPeriods = input.int(14, title="Periodi ATR", minval=1)
atrMultiplier = input.float(1.5, title="Moltiplicatore ATR", step=0.1)
useTrailingStop = input.bool(true, title="Usa Trailing Stop")
trailingStopPercent = input.float(15.0, title="Percentuale Trailing Stop", minval=0.1, step=0.1) / 100.0
useEMAExit = input.bool(true, title="Usa Uscita EMA Corta incrocia EMA Media al Ribasso")

// Parametri di input per periodi EMA personalizzabili
emaLongTermPeriod = input.int(200, title="Periodo EMA Lungo Termine", minval=1)
emaShortTermPeriod = input.int(5, title="Periodo EMA Breve Termine", minval=1)
emaMidTermPeriod = input.int(10, title="Periodo EMA Medio Termine", minval=1)

// Calcolo delle EMA con periodi personalizzabili
longTermEMA = ta.ema(close, emaLongTermPeriod)
shortTermEMA = ta.ema(close, emaShortTermPeriod)
midTermEMA = ta.ema(close, emaMidTermPeriod)

// Calcolo ATR e soglia di volatilità
atr = ta.atr(atrPeriods)
atrThreshold = ta.sma(atr, atrPeriods) * atrMultiplier

// Condizione di entrata
enterLongCondition = close > longTermEMA and shortTermEMA > midTermEMA
enterLong = useVolatilityFilter ? (enterLongCondition and atr > atrThreshold) : enterLongCondition

if (enterLong)
    strategy.entry("Enter Long", strategy.long)

// Tracking del prezzo di entrata e del massimo prezzo raggiunto per il trailing stop
var float entryPrice = na
var float maxPriceSinceEntry = na
if (strategy.position_size > 0)
    maxPriceSinceEntry := math.max(na(maxPriceSinceEntry) ? high : maxPriceSinceEntry, high)
    entryPrice := na(entryPrice) ? strategy.position_avg_price : entryPrice
else
    maxPriceSinceEntry := na
    entryPrice := na

// Calcolo del valore del trailing stop
trailStopPrice = maxPriceSinceEntry * (1 - trailingStopPercent)

// Implementazione delle condizioni di uscita
exitCrossUnder = close < longTermEMA
emaCross = ta.crossunder(shortTermEMA, midTermEMA)

if (useEMAExit and emaCross)
    strategy.close("Enter Long", comment="EMA Cross Exit")

if (useTrailingStop)
    strategy.exit("Trailing Stop", from_entry="Enter Long", stop=trailStopPrice)

// Visualizzazioni
plot(longTermEMA, color=color.yellow, title="EMA Lungo Termine")
plot(shortTermEMA, color=color.blue, title="EMA Breve Termine")
plot(midTermEMA, color=color.green, title="EMA Medio Termine")
plot(useVolatilityFilter ? atrThreshold : na, color=color.purple, title="ATR Threshold")
plot(strategy.position_size > 0 ? trailStopPrice : na, color=color.orange, title="Trailing Stop Value", style=plot.style_linebr)

Mais.