Estratégia de acompanhamento de tendências usando média móvel EMA dupla e indicador ATR


Data de criação: 2023-11-15 15:53:57 última modificação: 2023-11-15 15:53:57
cópia: 1 Cliques: 823
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendências usando média móvel EMA dupla e indicador ATR

Visão geral

A estratégia utiliza a dupla linha de equilíbrio EMA para formar um forco de ouro para fazer mais, um forco morto para fazer menos e seguir a estratégia clássica da tendência, e usa o indicador ATR e o indicador ADX para filtragem adicional, para rastrear quando há uma tendência forte e controlar o risco em caso de um tremor.

Princípio da estratégia

A estratégia baseia-se principalmente nos seguintes pontos:

  1. O uso de um curto de 8 períodos EMA média e um longo de 20 períodos EMA média para formar um sinal de forquilha e forquilha. A EMA média em si tem a natureza de seguir a tendência.

  2. O indicador ATR reflete a amplitude de flutuação recente. Através da normalização do indicador ATR, é possível ajustar dinamicamente as condições de filtragem do cruzamento equilátero do EMA, reduzindo os requisitos quando um forte trend é seguido e aumentando os requisitos de filtragem em situações de choque, controlando o risco.

  3. O indicador ADX determina a força da tendência. Quando o ADX é maior que 30, é considerado uma tendência forte, e a defesa de perda é interrompida.

  4. Combinando tendências de alta e baixa, julgue o momento de fazer mais ações em branco. No mercado de touros, o forro dourado faz mais, no mercado de ursos, o forro morto faz ações em branco.

  5. Filtração de volume de transações, para entrar quando o volume de transações aumenta.

  6. O índice de USD simplesmente determina a força do dólar e a amplitude de stop loss e stop loss quando o dólar é forte.

  7. A combinação de indicadores de super tendências para avaliar a tendência geral do mercado, auxiliando a avaliação de quando fazer mais curto prazo.

A estratégia combina os indicadores de tendência e os indicadores de choque, permitindo ajustar os parâmetros de forma dinâmica e controlar os riscos enquanto se segue a tendência.

Vantagens estratégicas

  1. O sistema de dupla linha de equilíbrio do EMA é usado para julgar a tendência. O EMA é suave e pode filtrar efetivamente as falsas rupturas.

  2. O indicador ATR ajusta dinamicamente as condições de filtragem de cruzamento linear da EMA, permitindo que a estratégia se adapte de forma flexível a diferentes condições de mercado.

  3. O indicador ADX e o volume de transações são indicadores auxiliares para evitar a manipulação em situações de turbulência.

  4. O índice do dólar e o indicador de super tendências são usados para avaliar as grandes tendências e melhorar a precisão da tomada de decisões.

  5. Os parâmetros de gerenciamento de risco são automaticamente ajustados para a força do dólar e os stop loss e stop loss são amplificados quando o dólar é forte.

  6. A estratégia de Stop Loss Stop Loss é fácil de implementar e de rastrear, usando sinais de negociação simples e intuitivos.

Risco estratégico

  1. O sistema de dupla linha de equilíbrio da EMA elimina os pontos críticos da tendência e determina o atraso.

  2. A escolha incorreta dos parâmetros ATR pode levar a ser extremamente radical ou conservador.

  3. Os parâmetros do indicador ADX precisam ser otimizados, e a escolha inadequada dos pontos altos do ADX pode perder a tendência.

  4. O índice do dólar e o indicador de tendências super podem estar errados.

  5. O limite de perda muito pequeno pode aumentar os prejuízos; o limite de perda muito amplo pode ser ajustado.

Otimização de ideias

  1. Pode-se considerar a combinação de outros indicadores, como o MACD, para determinar os pontos críticos de tendência.

  2. Treine o espaço de parâmetros ATR com mais dados históricos para encontrar o melhor intervalo de parâmetros.

  3. Teste diferentes parâmetros de ADX, otimize o julgamento do ponto alto do ADX.

  4. Adicionar mais variáveis para avaliar o índice do dólar e a tendência geral do mercado.

  5. Calculou-se o máximo de stop loss com base em dados de retrospectiva.

  6. Pode-se considerar a transformação do stop loss em stop loss móvel ou stop loss oscilante.

  7. Continuar a otimizar o tamanho das aberturas e o ciclo de detenção.

Resumir

A estratégia integra o clássico sistema de dupla linha de equilíbrio EMA com vários indicadores auxiliares, com otimização automática dos parâmetros, para uma estratégia de acompanhamento de tendências mais completa. Ela é capaz de se adaptar flexivelmente às mudanças no ambiente do mercado, controlando o risco enquanto segue a tendência.

Código-fonte da estratégia
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Refactored Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true)

// Initialize variables to track if a buy order has been placed and number of periods since the last buy
var bool hasBought = false
var int barCountSinceBuy = 0

// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)

// Define ATR period and normalization
atrLength = 14
atrValue = ta.atr(atrLength)
maxHistoricalATR = ta.highest(atrValue, 20)
minHistoricalATR = ta.lowest(atrValue, 20)
normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR)

// Define ADX parameters
adxValue = ta.rma(close, 14)
adxHighLevel = 30
isADXHigh = adxValue > adxHighLevel

// Initialize risk management variables
var float stopLossPercent = na
var float takeProfitPercent = na
var float trailingStop = na

// Calculate USD strength (simplified)
usd_strength = close / ta.ema(close, 50) - 1

// Adjust risk parameters based on USD strength
if (usd_strength > 0)
    stopLossPercent := 3
    takeProfitPercent := 6
else
    stopLossPercent := 4
    takeProfitPercent := 8

// Initialize position variable
var float positionPrice = na

// Volume filter
minVolume = ta.sma(volume, 14) * 1.5
isVolumeHigh = volume > minVolume



// Piyasa yönü için süper trend göstergesi
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14)  // Use a factor of 3 and ATR period of 10
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0

// Yükselen piyasa için alım koşulu
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
// Düşen piyasa için alım koşulu
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
// Genel alım koşulu
buyCondition = buyConditionBull or buyConditionBear

// Yükselen ve düşen piyasalar için farklı satış koşulları
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
// Genel satış koşulu
sellCondition = sellConditionBull or sellConditionBear


// Buy condition
if (buyCondition)
    strategy.entry("Buy", strategy.long)
    positionPrice := close
    hasBought := true // Set the flag to true when a buy order is placed
    barCountSinceBuy := 0 // Reset the bar counter when a buy order is placed

// Increase the bar counter if a buy has been executed
if (hasBought)
    barCountSinceBuy := barCountSinceBuy + 1

// Calculate stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)


// Final Sell condition, now also checks if a buy has occurred before and if at least 5 periods have passed
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh

if (finalSellCondition)
    strategy.close("Buy")
    positionPrice := na
    hasBought := false // Reset the flag when a sell order is placed
    barCountSinceBuy := 0 // Reset the bar counter when a buy order is closed

// Implement stop-loss, take-profit, and trailing stop
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)
//strategy.exit("Trailing Stop", "Buy", trail_price=close, trail_offset=trailingStop * close / 100)


var label l = na

if (buyCondition)
    l := label.new(bar_index, high, text="buy triggered " + str.tostring(usd_strength))
    label.delete(l[1])

if (finalSellCondition)
    l := label.new(bar_index, high, text="sell triggered " + str.tostring(usd_strength))
    label.delete(l[1])

// Plot signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")