Estrategia de seguimiento de tendencias dinámicas de múltiples indicadores basada en EMA y SMA

EMA SMA ATR PP supertrend
Fecha de creación: 2024-12-27 14:12:50 Última modificación: 2024-12-27 14:12:50
Copiar: 0 Número de Visitas: 426
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias dinámicas de múltiples indicadores basada en EMA y SMA

Descripción general de la estrategia

La estrategia es un sistema de seguimiento de tendencias dinámicas que combina múltiples indicadores técnicos. Identifica las tendencias del mercado y las oportunidades de negociación mediante la integración de señales cruzadas de puntos de pivote, indicadores de SuperTrend y promedios móviles. La característica central de la estrategia es el uso de un método de análisis de períodos de tiempo fijos para garantizar la consistencia de la señal, al tiempo que aumenta la fiabilidad de la señal de negociación mediante la verificación de los puntos de pivote.

Principio de estrategia

La estrategia opera sobre la base de los siguientes mecanismos básicos:

  1. El uso de datos de precios de períodos de tiempo fijos para el análisis, evitando la interferencia de diferentes períodos de tiempo
  2. El SMA se calcula a través de EMAs de 8 y 21 ciclos, formando la base para el seguimiento de tendencias
  3. Indicador de SuperTrend combinado con ATR y punto de referencia para determinar la dirección de la tendencia
  4. Las señales de cruce SMA que aparecen en el punto de apoyo en 3 períodos son consideradas como señales válidas
  5. Calculación dinámica y seguimiento de soporte/resistencia para la toma de decisiones comerciales

Ventajas estratégicas

  1. Verificación cruzada de múltiples indicadores para mejorar la fiabilidad de la señal
  2. Análisis de ciclo de tiempo fijo para reducir la interferencia de señales falsas
  3. Mecanismos de verificación punto a punto para garantizar que las transacciones se realicen a niveles de precios clave
  4. Seguimiento dinámico de soporte de resistencia para ayudar a determinar la posición de la parada de pérdida
  5. El uso de los indicadores SuperTrend proporciona una confirmación adicional de la dirección de la tendencia
  6. Ajuste de parámetros flexibles para adaptarse a las diferentes condiciones del mercado

Riesgo estratégico

  1. Múltiples indicadores pueden causar retraso en la señal
  2. Se podría generar demasiadas señales falsas en el mercado horizontal
  3. El análisis de períodos de tiempo fijos puede perder señales importantes de otros períodos
  4. El mecanismo de verificación de puntos de apoyo puede hacer que se pierdan oportunidades de negocio importantes.
  5. La optimización excesiva de los parámetros puede conducir a una sobreadaptación

Dirección de optimización de la estrategia

  1. Introducción de un mecanismo de filtrado de volatilidad para reducir la frecuencia de las transacciones durante la baja volatilidad
  2. Indicadores de confirmación de la fuerza de la tendencia, como el ADX o el MACD
  3. Desarrollar un sistema de parámetros de adaptación para ajustar los parámetros de forma dinámica en función de las condiciones del mercado
  4. Agregue análisis del volumen de operaciones para mejorar la confiabilidad de la señal
  5. Implementación de un mecanismo de parada dinámica para ajustar la posición de parada en función de las fluctuaciones del mercado

Resumir

La estrategia, a través de la combinación de múltiples indicadores técnicos, establece un sistema de comercio de seguimiento de tendencias relativamente completo. Su principal ventaja es mejorar la fiabilidad de la señal a través del análisis de períodos de tiempo fijos y la verificación de puntos de apoyo. Aunque existe un cierto riesgo de retraso, se puede controlar eficazmente mediante la optimización de parámetros y medidas de gestión de riesgos.

Código Fuente de la Estrategia
/*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")