Estrategia de trading con múltiples filtros de liquidez y tendencia adaptativa

EMA SMA MACD ATR HLC3
Fecha de creación: 2025-01-06 11:58:25 Última modificación: 2025-01-06 11:58:25
Copiar: 0 Número de Visitas: 617
1
Seguir
1617
Seguidores

Estrategia de trading con múltiples filtros de liquidez y tendencia adaptativa

Descripción general

Esta estrategia es un sistema de seguimiento de tendencias adaptativo basado en el filtrado de múltiples indicadores técnicos. Combina múltiples indicadores técnicos como la media móvil exponencial (EMA), la media móvil simple (SMA) y la divergencia de convergencia de la media móvil (MACD), y ajusta dinámicamente los parámetros para adaptarse a diferentes entornos de mercado para lograr una captura de tendencias eficiente y control de riesgos. Esta estrategia adopta un mecanismo de filtrado en capas y mejora significativamente la confiabilidad de las señales comerciales a través de la cooperación coordinada de múltiples indicadores técnicos.

Principio de estrategia

La lógica central de la estrategia se basa en un mecanismo de filtrado de tres capas:

  1. Capa de reconocimiento de tendencias adaptativa: utiliza una combinación de EMA rápidas y lentas para calcular la línea de base de la tendencia y ajusta dinámicamente las líneas de seguimiento superior e inferior en función de la volatilidad del mercado.
  2. Filtro SMA: utilice el promedio móvil simple para garantizar que la dirección del movimiento del precio sea consistente con la tendencia general.
  3. Capa de confirmación MACD: utilice la función de confirmación de tendencia del indicador MACD para verificar aún más la validez de la señal comercial.

La generación de señales comerciales requiere el cumplimiento de todas las condiciones de filtro: cambio de tendencia, confirmación de la dirección de la SMA y soporte de la línea de señal MACD. La estrategia también incluye un sistema dinámico de gestión de posiciones basado en el capital de la cuenta, que ajusta automáticamente el tamaño de la posición a través de factores de apalancamiento.

Ventajas estratégicas

  1. Fuerte adaptabilidad: al ajustar dinámicamente los parámetros, la estrategia puede adaptarse a diferentes entornos de mercado.
  2. Control de riesgos perfecto: Múltiples mecanismos de filtrado reducen significativamente la probabilidad de señales falsas.
  3. Alta personalización: los usuarios pueden ajustar varios parámetros según su estilo comercial personal.
  4. Alto grado de automatización: admite mensajes de alerta en formato JSON, lo que facilita la conexión con sistemas de comercio automático.
  5. Buen efecto de visualización: proporciona una rica retroalimentación visual, que incluye bandas de tendencia, marcadores de señales, etc.

Riesgo estratégico

  1. Dependencia de la tendencia: Es posible que se generen señales falsas frecuentes en un mercado volátil.
  2. Riesgo de histéresis: múltiples mecanismos de filtrado pueden provocar retrasos en el tiempo de entrada.
  3. Sensibilidad de los parámetros: diferentes combinaciones de parámetros pueden generar grandes diferencias en el rendimiento de la estrategia.
  4. Riesgo de apalancamiento: un apalancamiento excesivo puede magnificar las pérdidas.

Dirección de optimización de la estrategia

  1. Adaptación de volatilidad: se agregó un mecanismo de stop loss dinámico basado en ATR.
  2. Identificación del entorno de mercado: agregue un sistema de clasificación del estado del mercado y utilice diferentes combinaciones de parámetros en diferentes entornos de mercado.
  3. Puntuación de la calidad de la señal: establecer un sistema de puntuación de la intensidad de la señal y ajustar dinámicamente las posiciones en función de la intensidad de la señal.
  4. Optimización de la gestión de fondos: introducir algoritmos de gestión de fondos más complejos para lograr un control de posiciones más sofisticado.

Resumir

Esta estrategia logra un efecto de seguimiento de tendencias más confiable a través de un mecanismo de filtrado multicapa y un ajuste dinámico de parámetros. Si bien existen ciertos riesgos de retraso y dependencia de parámetros, aún se puede lograr un desempeño estable en las transacciones reales mediante una optimización razonable de parámetros y medidas de control de riesgos. Se recomienda que los operadores realicen una verificación retrospectiva completa antes del uso en tiempo real y ajusten la configuración de los parámetros de acuerdo con su tolerancia al riesgo personal.

Código Fuente de la Estrategia
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500, 
     initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
     margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User-defined inputs for trend logic
atr           = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length        = input.int(2, "Main Length", minval=2)
smooth_len    = input.int(2, "Smoothing Length", minval=2)
sensitivity   = input.float(2.0, "Sensitivity", step=0.1)

// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)

// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id           = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key           = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker        = input("SPX", title= "Ticker/symbol of your broker")
bullcolor     = #0097a7
bearcolor     = #ff195f
showbars      = input.bool(true, "Color Bars?")
showbg        = input.bool(true, "Background Color?")
showsignals   = input.bool(true, "Show Signals?")


// Trend calculation functions
calculate_trend_levels() =>
    typical = hlc3
    fast_ema = ta.ema(typical, length)
    slow_ema = ta.ema(typical, length * 2)
    basis = (fast_ema + slow_ema) / 2
    vol = ta.stdev(typical, length)
    smooth_vol = ta.ema(vol, smooth_len)
    upper = basis + (smooth_vol * sensitivity)
    lower = basis - (smooth_vol * sensitivity)
    [basis, upper, lower]

get_trend_state(upper, lower, basis) =>
    var float prev_level = na
    var int trend = 0
    if na(prev_level)
        trend := close > basis ? 1 : -1
        prev_level := trend == 1 ? lower : upper
    if trend == 1
        if close < lower
            trend := -1
            prev_level := upper
        else
            prev_level := lower
    else
        if close > upper
            trend := 1
            prev_level := lower
        else
            prev_level := upper
    [trend, prev_level]

[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)

// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true

// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true

// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1

// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
//     label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
//     label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)

qty = strategy.equity / close * leverage_factor

// Automated alerts
if long_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)

// Strategy entries and exits
if long_signal
    strategy.entry("Long", strategy.long, qty=qty)
if short_signal
    strategy.close("Long")

// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")