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

Estrategia de negociación de filtros múltiples de flujo de tendencia adaptativo

El autor:¿ Qué pasa?, Fecha: 2025-01-06 11:58:25
Las etiquetas:El EMALa SMAEl MACDEl ATRHLC3

img

Resumen general

Esta estrategia es un sistema de seguimiento de tendencias adaptativo basado en múltiples filtros de indicadores técnicos. Combina varios indicadores técnicos, incluidos el promedio móvil exponencial (EMA), promedio móvil simple (SMA) y la divergencia de convergencia de promedio móvil (MACD), ajustando dinámicamente los parámetros para adaptarse a diferentes entornos de mercado para una captura eficiente de tendencias y control de riesgos. La estrategia emplea un mecanismo de filtrado en capas, mejorando significativamente la confiabilidad de las señales comerciales a través de la combinación sinérgica de múltiples indicadores técnicos.

Principio de la estrategia

La lógica central se basa en un mecanismo de filtración 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 superiores e inferiores del canal en función de la volatilidad del mercado.
  2. Capa de filtro SMA: Asegura que la dirección del movimiento del precio se alinee con la tendencia general utilizando un promedio móvil simple.
  3. Capa de confirmación del MACD: Valida las señales de negociación utilizando la funcionalidad de confirmación de tendencia del indicador MACD.

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

Ventajas estratégicas

  1. Fuerte adaptabilidad: La estrategia puede adaptarse a diferentes entornos de mercado a través del ajuste dinámico de parámetros.
  2. Control integral del riesgo: los mecanismos de filtración múltiples reducen significativamente la probabilidad de falsas señales.
  3. Alta personalizabilidad: Los usuarios pueden ajustar varios parámetros de acuerdo con el estilo personal de negociación.
  4. Alto nivel de automatización: admite mensajes de alerta en formato JSON para una fácil integración con los sistemas de negociación automatizados.
  5. Buena visualización: Proporciona una rica retroalimentación visual que incluye bandas de tendencia y marcadores de señal.

Riesgos estratégicos

  1. Dependencia de tendencia: puede generar frecuentes señales falsas en mercados oscilantes.
  2. Riesgo de retraso: los múltiples mecanismos de filtrado pueden provocar un retraso en el tiempo de entrada.
  3. Sensibilidad de parámetros: las diferentes combinaciones de parámetros pueden dar lugar a variaciones significativas en el rendimiento de la estrategia.
  4. Riesgo de apalancamiento: el apalancamiento excesivo puede aumentar las pérdidas.

Direcciones para la optimización de la estrategia

  1. Adaptación a la volatilidad: añadir un mecanismo dinámico de stop-loss basado en el ATR.
  2. Reconocimiento del entorno del mercado: añadir un sistema de clasificación del estado del mercado para utilizar diferentes combinaciones de parámetros en diferentes entornos del mercado.
  3. Puntuación de la calidad de la señal: Establecer un sistema de puntuación de la fuerza de la señal para ajustar dinámicamente las posiciones en función de la fuerza de la señal.
  4. Optimización de la gestión de capital: introducir algoritmos de gestión de dinero más sofisticados para un control de posición más preciso.

Resumen de las actividades

La estrategia alcanza una tendencia relativamente confiable a través de mecanismos de filtrado de múltiples capas y ajuste dinámico de parámetros. Aunque existen ciertos riesgos de retraso y dependencia de parámetros, todavía se puede lograr un rendimiento estable en el comercio real a través de una optimización razonable de parámetros y medidas de control de riesgos. Se recomienda a los operadores que realicen una prueba exhaustiva y ajusten los ajustes de parámetros de acuerdo con la tolerancia individual al riesgo antes de la negociación en vivo.


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


Relacionados

Más.