Estratégia de acompanhamento de tendências EMA/SMA e swing trading combinada com filtragem de volume e sistema de stop loss e take profit percentual

EMA SMA
Data de criação: 2024-12-11 15:12:35 última modificação: 2024-12-11 15:12:35
cópia: 1 Cliques: 444
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendências EMA/SMA e swing trading combinada com filtragem de volume e sistema de stop loss e take profit percentual

Visão geral

A estratégia é um sistema de negociação integrado, que combina o acompanhamento de tendências com métodos de negociação de bandas, para construir um sistema de negociação completo através do cruzamento equilátero entre EMA e SMA, identificação de pontos altos e baixos de bandas, filtragem de volume de transação e mecanismo de parada percentual e rastreamento de perdas. A estratégia foi projetada com foco na confirmação de sinais multidimensionais, aumentando a precisão e a confiabilidade das negociações através do efeito sincronizado dos indicadores técnicos.

Princípio da estratégia

A estratégia usa um mecanismo de filtragem de sinal em vários níveis, primeiro usando a interseção da formação da base da EMA (10) e SMA (21) para julgar a tendência, em seguida, através do alto e baixo ponto de ruptura de seis linhas K à esquerda e à direita para determinar o momento de entrada, enquanto exige que o volume de transação seja maior do que a média móvel de 200 ciclos, garantindo a negociação em um ambiente de abundância de liquidez. O sistema usa um stop loss percentual de 2% e um stop loss de 1% para gerenciar o risco.

Vantagens estratégicas

  1. Mecanismos de confirmação de múltiplos sinais reduzem os sinais falsos: aumentam a credibilidade das transações através da verificação tripla de tendências médias, brechas de preços e volume de transações
  2. Mecanismo de stop-loss flexível: configuração de stop-loss em percentagem e bloqueio de lucros com tracking stop-loss
  3. Sistema de visualização perfeito: apresentação gráfica de pontos de equilíbrio e de ruptura para facilitar o monitoramento de transações
  4. Altamente personalizável: os parâmetros-chave podem ser ajustados para adaptar-se a diferentes ambientes de mercado
  5. Gerenciamento de riscos sistematizado: controle de risco por meio de stop loss e stop-loss predefinidos

Risco estratégico

  1. Mercado horizontal pode gerar falsas rupturas frequentes
  2. O filtro de transação pode ter perdido parte do sinal válido
  3. A paragem de percentual fixo pode ser prematura em situações fortes
  4. Sistema de linha média está atrasado em uma rápida mudança para o mercado
  5. É preciso considerar o impacto dos custos de transação nos retornos da estratégia

Direção de otimização da estratégia

  1. Introdução de um mecanismo de adaptação de taxa de flutuação, ajustando dinamicamente os parâmetros de stop loss
  2. Aumentar a filtragem de força de tendência e evitar a negociação em tendências fracas
  3. Otimização de algoritmos de filtragem de volume de transação, levando em conta a variação de volume de transação relativo
  4. Adição de um mecanismo de filtragem de tempo para evitar transações em períodos de baixa atividade
  5. Considerar a inclusão de classificações de cenários de mercado com parâmetros diferentes para diferentes mercados

Resumir

A estratégia de construir um sistema de negociação completo, adequado para o acompanhamento de tendências a médio e longo prazo, através de um sistema de linha uniforme, breakouts de preço e verificação de volume de transação. A vantagem do sistema está na confirmação de múltiplos sinais e no mecanismo de gerenciamento de risco aprimorado, mas também é necessário prestar atenção ao desempenho no mercado horizontal. Com a orientação de otimização sugerida, a estratégia ainda tem espaço para ser melhorada, especialmente em termos de melhorias na auto-adaptabilidade que ajudarão a aumentar a estabilidade da estratégia.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)