En la carga de los recursos... Cargando...

Tendencia dinámica de múltiples indicadores siguiendo una estrategia basada en EMA y SMA

El autor:¿ Qué pasa?, Fecha: 2024-12-27 14:12:50
Las etiquetas:El EMALa SMAEl ATREl PPsuper tendencia

img

Resumen de la estrategia

Esta estrategia es un sistema dinámico de seguimiento de tendencias que combina múltiples indicadores técnicos. Integra Puntos de Pivot, indicador de SuperTendencia y señales de cruce de promedio móvil para identificar tendencias de mercado y oportunidades comerciales.

Principios de estrategia

La estrategia se basa en los siguientes mecanismos fundamentales:

  1. Utiliza datos de precios fijos para el análisis, evitando interferencias de diferentes marcos de tiempo
  2. Calcula las SMA basadas en las EMA de 8 y 21 períodos para formar una tendencia después de la base
  3. Combina ATR y puntos de pivote para calcular el indicador SuperTrend para la confirmación de la dirección de la tendencia
  4. Solo se consideran válidas las señales de cruce SMA si se producen dentro de 3 períodos de un punto de pivote
  5. Calcula y rastrea dinámicamente los niveles de soporte/resistencia para la referencia de negociación

Ventajas estratégicas

  1. La validación cruzada de múltiples indicadores mejora la fiabilidad de la señal
  2. El análisis de tiempo fijo reduce las interferencias de la señal falsa
  3. La validación del punto de pivote garantiza que las operaciones se realicen a los niveles clave de precios
  4. El seguimiento dinámico de soporte/resistencia ayuda a determinar los niveles de stop-loss y take profit
  5. El indicador SuperTrend proporciona una confirmación adicional de la dirección de la tendencia
  6. Los parámetros flexibles permiten ajustarlos a las diferentes condiciones del mercado

Riesgos estratégicos

  1. Los indicadores múltiples pueden provocar un retraso de la señal
  2. Puede generar señales falsas excesivas en mercados variados
  3. El análisis de marcos de tiempo fijos puede perder señales importantes en otros marcos de tiempo
  4. La validación del punto de pivote puede hacer que se pierdan algunas oportunidades comerciales importantes
  5. Optimización de parámetros puede conducir a sobreajuste

Direcciones para la optimización de la estrategia

  1. Introducir un mecanismo de filtrado de volatilidad para reducir la frecuencia de las operaciones durante los períodos de baja volatilidad
  2. Añadir indicadores de confirmación de la fuerza de la tendencia como ADX o MACD
  3. Desarrollar un sistema de parámetros adaptativos que se ajuste dinámicamente en función de las condiciones del mercado
  4. Incorporar análisis de volumen para mejorar la fiabilidad de la señal
  5. Implementar un mecanismo dinámico de stop-loss que se ajuste en función de la volatilidad del mercado

Resumen de las actividades

Esta estrategia establece una tendencia relativamente completa siguiendo el sistema de negociación a través de la combinación de múltiples indicadores técnicos. Su principal ventaja radica en mejorar la confiabilidad de la señal a través del análisis de marcos de tiempo fijos y la validación de puntos pivot. Si bien hay ciertos riesgos de retraso, estos pueden controlarse eficazmente a través de la optimización de parámetros y medidas de gestión de riesgos. Se aconseja a los operadores que realicen pruebas posteriores exhaustivas antes de la implementación en vivo y ajusten los parámetros de acuerdo con las características específicas del mercado.


/*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")


Relacionados

Más.