Estratégia de monitoramento de tendências dinâmicas multiindicadores baseada em EMA e SMA

EMA SMA ATR PP supertrend
Data de criação: 2024-12-27 14:12:50 última modificação: 2024-12-27 14:12:50
cópia: 0 Cliques: 426
1
focar em
1617
Seguidores

Estratégia de monitoramento de tendências dinâmicas multiindicadores baseada em EMA e SMA

Visão geral da estratégia

A estratégia é um sistema de acompanhamento de tendências dinâmicas que combina vários indicadores técnicos. Identifica tendências de mercado e oportunidades de negociação através da integração de pontos de apoio, indicadores de SuperTrend e sinais cruzados de médias móveis. A característica central da estratégia é a utilização de métodos de análise em períodos de tempo fixos, garantindo a consistência do sinal, ao mesmo tempo em que aumenta a confiabilidade do sinal de negociação através da verificação dos pontos de apoio.

Princípio da estratégia

A estratégia opera com base nos seguintes mecanismos principais:

  1. Análise com dados de preços de períodos de tempo fixos, evitando interferências de diferentes períodos de tempo
  2. A base de acompanhamento de tendências é formada pelo cálculo do SMA através de EMAs de 8 e 21 ciclos
  3. Indicador de SuperTrend, combinado com o ATR e o cálculo do ponto de apoio, para confirmar a direção da tendência
  4. Um sinal de cruzamento SMA que ocorre dentro de 3 períodos de ponto de apoio é considerado um sinal válido
  5. Calculação dinâmica e acompanhamento de suportes/resistências para tomar decisões de negociação

Vantagens estratégicas

  1. Verificação cruzada de múltiplos indicadores para aumentar a confiabilidade do sinal
  2. Análise de ciclo de tempo fixo, redução de interferência de falso sinal
  3. Mecanismos de verificação de ponto-a-ponto para garantir que as transações ocorram em níveis críticos de preços
  4. O rastreamento dinâmico suporta a resistência, ajudando a determinar a posição do stop loss
  5. O uso do indicador SuperTrend fornece confirmação adicional da direção da tendência
  6. Parâmetros flexíveis, adaptáveis a diferentes situações de mercado

Risco estratégico

  1. Vários indicadores podem causar atraso no sinal
  2. Os mercados horizontais podem gerar muitos sinais falsos
  3. Análise de ciclo de tempo fixo pode perder sinais importantes de outros ciclos
  4. Os mecanismos de verificação ponto-a-ponto podem fazer com que se percam oportunidades importantes de transação
  5. Otimização excessiva de parâmetros pode levar a uma superalimentação

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

  1. Introdução de um mecanismo de filtragem de volatilidade para reduzir a frequência de negociação durante a baixa volatilidade
  2. Indicadores de confirmação de força de tendência, como ADX ou MACD
  3. Desenvolver um sistema de parâmetros de adaptação, ajustando os parâmetros de acordo com a dinâmica do mercado
  4. Adicione análise de volume de negociação para melhorar a confiabilidade do sinal
  5. Implementação de um mecanismo de stop loss dinâmico, ajustando a posição de stop loss de acordo com a flutuação do mercado

Resumir

A estratégia, através da combinação de múltiplos indicadores técnicos, estabelece um sistema de negociação de acompanhamento de tendências relativamente completo. Sua vantagem central é aumentar a confiabilidade do sinal através da análise de períodos de tempo fixos e verificação de pontos de apoio. Embora exista um certo risco de atraso, ele pode ser efetivamente controlado por meio de otimização de parâmetros e medidas de gerenciamento de risco.

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

//@version=6
strategy("Buy Sell Pivot Point", overlay=true)

// Input Parameters
prd = input.int(defval=2, title="Periodo Pivot Point", minval=1, maxval=50)
Factor = input.float(defval=3, title="Fator ATR", minval=1, step=0.1)
Pd = input.int(defval=10, title="Periodo ATR", minval=1)
showpivot = input.bool(defval=false, title="Mostrar Pivot Points")
showlabel = input.bool(defval=true, title="Mostrar Buy/Sell Labels")
showcl = input.bool(defval=false, title="Mostrar PP Center Line")
showsr = input.bool(defval=false, title="Mostrar Support/Resistance")
sma1_length = input.int(defval=8, title="SMA 1")
sma2_length = input.int(defval=21, title="SMA 2")
timeframe_fix = input.timeframe("D", title="Timeframe Fixo")

// Request data from the fixed timeframe
fix_close = request.security(syminfo.tickerid, timeframe_fix, close)
fix_high = request.security(syminfo.tickerid, timeframe_fix, high)
fix_low = request.security(syminfo.tickerid, timeframe_fix, low)
fix_ph = request.security(syminfo.tickerid, timeframe_fix, ta.pivothigh(prd, prd))
fix_pl = request.security(syminfo.tickerid, timeframe_fix, ta.pivotlow(prd, prd))
fix_atr = request.security(syminfo.tickerid, timeframe_fix, ta.atr(Pd))

// Convert Pivot High/Low to valid boolean for conditions
ph_cond = not na(fix_ph)
pl_cond = not na(fix_pl)

// Draw Pivot Points
plotshape(ph_cond and showpivot, title="Pivot High", text="H", style=shape.labeldown, color=color.red, textcolor=color.red, location=location.abovebar, offset=-prd)
plotshape(pl_cond and showpivot, title="Pivot Low", text="L", style=shape.labelup, color=color.lime, textcolor=color.lime, location=location.belowbar, offset=-prd)

// Calculate the Center line using pivot points
var float center = na
lastpp = ph_cond ? fix_ph : pl_cond ? fix_pl : na
if not na(lastpp)
    center := na(center) ? lastpp : (center * 2 + lastpp) / 3

// Upper/Lower bands calculation
Up = center - (Factor * fix_atr)
Dn = center + (Factor * fix_atr)

// Get the trend
var float TUp = na
var float TDown = na
var int Trend = 0
TUp := na(TUp[1]) ? Up : fix_close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := na(TDown[1]) ? Dn : fix_close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := fix_close > TDown[1] ? 1 : fix_close < TUp[1] ? -1 : nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Plot the trend
linecolor = Trend == 1 ? color.lime : Trend == -1 ? color.red : na
plot(Trailingsl, color=linecolor, linewidth=2, title="PP SuperTrend")

// Plot Center Line
plot(showcl ? center : na, color=showcl ? (center < fix_close ? color.blue : color.red) : na, title="Center Line")

// Calculate Base EMAs
ema_8 = ta.ema(fix_close, 8)
ema_21 = ta.ema(fix_close, 21)

// Calculate SMAs based on EMAs
sma1 = ta.sma(ema_8, sma1_length)
sma2 = ta.sma(ema_21, sma2_length)

// Plot SMAs
plot(sma1, color=#ffff00, linewidth=2, title="SMA 1 (based on EMA 8)")
plot(sma2, color=#aa00ff, linewidth=2, title="SMA 2 (based on EMA 21)")

// Initialize variables to track pivot points
var float last_pivot_time = na

// Update the pivot time when a new pivot is detected
if (ph_cond)
    last_pivot_time := bar_index
if (pl_cond)
    last_pivot_time := bar_index

// Calculate the crossover/crossunder signals
buy_signal = ta.crossover(sma1, sma2)  // SMA 8 crossing SMA 21 upwards
sell_signal = ta.crossunder(sma1, sma2)  // SMA 8 crossing SMA 21 downwards

// Ensure signal is only valid if it happens within 3 candles of a pivot point
valid_buy_signal = buy_signal and (bar_index - last_pivot_time <= 3)
valid_sell_signal = sell_signal and (bar_index - last_pivot_time <= 3)

// Plot Buy/Sell Signals
plotshape(valid_buy_signal and showlabel, title="Buy Signal", text="BUY", style=shape.labelup, color=color.lime, textcolor=color.black, location=location.belowbar)
plotshape(valid_sell_signal and showlabel, title="Sell Signal", text="SELL", style=shape.labeldown, color=color.red, textcolor=color.white, location=location.abovebar)

// Get S/R levels using Pivot Points
var float resistance = na
var float support = na
support := pl_cond ? fix_pl : support[1]
resistance := ph_cond ? fix_ph : resistance[1]

// Plot S/R levels
plot(showsr and not na(support) ? support : na, color=showsr ? color.lime : na, style=plot.style_circles, offset=-prd)
plot(showsr and not na(resistance) ? resistance : na, color=showsr ? color.red : na, style=plot.style_circles, offset=-prd)

// Execute trades based on valid signals
if valid_buy_signal
    strategy.entry("Buy", strategy.long)
if valid_sell_signal
    strategy.entry("Sell", strategy.short)

// Alerts
alertcondition(valid_buy_signal, title="Buy Signal", message="Buy Signal Detected")
alertcondition(valid_sell_signal, title="Sell Signal", message="Sell Signal Detected")
alertcondition(Trend != Trend[1], title="Trend Changed", message="Trend Changed")