Estrategia de índice de fuerza relativa estocástico de confirmación cruzada de múltiples marcos temporales y sistema de filtro de volatilidad

RSI ATR SRSI MTF
Fecha de creación: 2025-06-04 10:31:03 Última modificación: 2025-06-04 10:31:03
Copiar: 0 Número de Visitas: 274
2
Seguir
319
Seguidores

Estrategia de índice de fuerza relativa estocástico de confirmación cruzada de múltiples marcos temporales y sistema de filtro de volatilidad Estrategia de índice de fuerza relativa estocástico de confirmación cruzada de múltiples marcos temporales y sistema de filtro de volatilidad

Descripción general

La estrategia de indicadores de fuerza relativamente débiles de tipo aleatorio de confirmación cruzada de múltiples marcos temporales es un sistema de negociación integral que combina hábilmente las características de la señal cruzada de indicadores de fuerza relativamente débiles aleatorios (RSI estocástico) en diferentes marcos temporales, y se complementa con un filtro de media de amplitud real (ATR) para asegurar que el mercado tenga suficiente volatilidad. La idea central de la estrategia es capturar la señal inicial a través de un marco de tiempo corto (minutos 5) y luego usar un marco de tiempo largo (minutos 15) para confirmar, lo que mejora la fiabilidad y la precisión de las señales de negociación.

Principio de estrategia

El funcionamiento de la estrategia se basa en cuatro mecanismos centrales: el disparo inicial de la señal, la confirmación de múltiples marcos de tiempo, el filtrado de la tasa de fluctuación y el sistema de refrigeración de la señal.

  1. La señal inicial del gatillo

    • En el gráfico de 5 minutos, el sistema entra en un estado de espera de múltiples señales cuando el Stochastic RSI atraviesa la línea %D en la línea %K y el valor de K en ese momento es inferior al nivel de venta por adelantado predeterminado (default 30).
    • Cuando el Stochastic RSI atraviesa la línea %D por debajo de la línea %K y el valor de la línea %K es superior al nivel de sobrecompra predeterminado (default 70) el sistema entra en un estado de espera de señal de baja.
  2. Mecanismo de confirmación de marcos de tiempo múltiple

    • Una vez que el sistema está en espera de la señal, busca la confirmación del marco de tiempo de 15 minutos dentro de la ventana de espera predeterminada (la línea K de 5 y 5 minutos por defecto).
    • Condición de confirmación múltiple: el rango de %K del RSI estocástico en el gráfico de 15 minutos es mayor o igual que el rango de %D, y el rango de %K es menor que el umbral predeterminado (por defecto 40).
    • Condición de confirmación de vacío: el rango de %K del RSI estocástico en el gráfico de 15 minutos es menor o igual que el rango de %D, y el rango de %K es mayor que el umbral predeterminado (default 60).
  3. Mecanismo de filtración de la tasa de fluctuación ATR

    • El sistema calcula el ATR actual y lo convierte en el número mínimo de pulsaciones.
    • La señal de negociación se ejecuta solo cuando el ATR actual supera el umbral mínimo predeterminado por el usuario (de 10 pulsaciones por defecto).
    • Este mecanismo asegura que las transacciones se realicen solo cuando el mercado tiene suficiente volatilidad y evita las falsas señales generadas por pequeñas fluctuaciones de precios en mercados poco volátiles.
  4. Sistema de refrigeración de la señal

    • Una vez que se genera una señal de transacción, el sistema obliga a esperar el número mínimo de líneas K predeterminado (la línea K de 18 por defecto) antes de permitir la generación de nuevas señales en la misma dirección.
    • Este mecanismo evita que el sistema genere demasiadas señales de sincronización en un corto período de tiempo, lo que reduce el riesgo de exceso de transacciones.

La estrategia utiliza un método de inversión de cruzamiento para administrar las posiciones, es decir, se elimina cualquier posición vacía existente y se crea una posición vacía cuando se produce una señal de falta.

Ventajas estratégicas

  1. Sistemas de filtración de varias capasA través de la combinación de confirmación de señales en diferentes marcos de tiempo y filtración de la tasa de fluctuación ATR, el sistema reduce significativamente las señales falsas y mejora la calidad de las transacciones. El mecanismo de verificación en varios niveles garantiza la entrada solo en las condiciones de mercado más favorables y reduce la frecuencia innecesaria de las transacciones.

  2. La adaptabilidadLos parámetros de la estrategia son altamente personalizables, incluidos el ciclo RSI, el nivel de equilibrio de los indicadores aleatorios y el nivel mínimo de los disparadores de señales, lo que permite a los comerciantes realizar ajustes óptimos en función de diferentes entornos de mercado y preferencias de riesgo personales.

  3. Percepción de las fluctuacionesA través de un filtro ATR, la estrategia puede identificar inteligentemente los estados de fluctuación del mercado y negociar solo en condiciones de suficiente volatilidad, evitando las señales de invalidez generadas por pequeñas fluctuaciones en el mercado de liquidación.

  4. Protección contra el exceso de comercioEl mecanismo de enfriamiento de la señal es un diseño innovador que limita la frecuencia de las transacciones en la misma dirección a través de un período de espera obligatorio, lo que evita que el sistema genere demasiadas transacciones en un corto período de tiempo, reduciendo los costos de comisiones y la pérdida de puntos de deslizamiento.

  5. La lógica es clara y transparente.Cada componente de la estrategia tiene una función y un propósito claros, sin complejos e incomprensibles algoritmos de caja negra, lo que permite a los operadores comprender completamente cómo funciona el sistema y aumentar la confianza en las operaciones.

Riesgo estratégico

  1. La latencia de la señal: El mecanismo de confirmación en varios niveles, aunque mejora la calidad de la señal, inevitablemente aumenta la latencia de la señal. Especialmente en los mercados que cambian rápidamente, esperar la confirmación de un marco de tiempo de 15 minutos puede provocar que se pierda el mejor punto de entrada o que se ingrese en una posición desfavorable.

  2. Sensibilidad de los parámetrosLa eficacia de la estrategia depende en gran medida de la configuración de los parámetros, como el ciclo del RSI estocástico, el sobrecomprar el umbral de venta, la confirmación de la ventana de espera, etc. La configuración inadecuada de los parámetros puede causar la pérdida de una señal válida o generar demasiadas señales falsas.

  3. La falta de un mecanismo claro para detener los dañosLa estrategia se basa principalmente en señales inversas para administrar el riesgo, sin una estrategia de stop loss clara. En condiciones extremas de mercado, como saltos masivos o rápidos en un solo sentido, esto puede causar grandes pérdidas.

  4. Los ciclos interactúanEn las estrategias de múltiples marcos de tiempo, los indicadores de los períodos de tiempo interactúan entre sí, a veces formando una relación compleja. Por ejemplo, en ciertas condiciones de mercado, el RSI estocástico de 5 y 15 minutos puede mantenerse en la misma dirección durante mucho tiempo, lo que hace que el sistema pierda la señal de reversión.

  5. Desafíos para ajustar el ATREl filtro ATR tiene dos problemas con la configuración del umbral: si se establece demasiado alto, se pierde una oportunidad de negociación efectiva, y si se establece demasiado bajo, no se puede filtrar efectivamente las señales falsas en un entorno de baja volatilidad.

Dirección de optimización de la estrategia

  1. Mecanismo de frenado de deterioro dinámico

    • Diseñar niveles de stop loss dinámicos basados en el ATR u otros indicadores de volatilidad para que los controles de riesgo se ajusten de forma adaptativa a la volatilidad del mercado.
    • Implementación: se puede agregarstrategy.exit()La orden, que establece un stop loss basado en el múltiplo ATR, esstrategy.exit("long_exit", "LE", stop=entry_price - current_atr_value * 2)
  2. Añadir filtro de tendencias

    • La combinación de indicadores de tendencia de períodos de tiempo más largos (como 1 hora o 4 horas), como las medias móviles o MACD, asegura que la dirección de la negociación coincida con la tendencia principal.
    • Cómo implementarlo: agregar código para obtener indicadores de tendencias a un nivel de tiempo más alto, comotrend_direction = request.security(syminfo.tickerid, "240", ta.ema(close, 200) < ta.ema(close, 50) ? -1 : 1)En la actualidad, la mayoría de los países de la Unión Europea tienen un sistema de monitoreo de las ventas de divisas.
  3. Optimización de parámetros dinámicos

    • Ajuste automático de los parámetros de la estrategia basado en la volatilidad del mercado o en el momento de la negociación, lo que permite al sistema adaptarse mejor a las diferentes condiciones del mercado.
    • Cómo se implementa: se puede escribir una función que ajuste el umbral de sobrecompra y sobreventa en función del valor actual del ATR o de la volatilidad del mercado, comodynamic_overbought = 70 + math.min(15, current_atr_value / 2)
  4. Mecanismo de confirmación de señales mejoradas

    • Además del RSI estocástico, se pueden introducir otros indicadores como el Brin Belt, el volumen de transacciones o el patrón de precios como condición adicional de confirmación.
    • Implementación: la adición de código de detección de desviación de la banda de Bryn, comobb_condition = (close - ta.sma(close, 20)) / (ta.stdev(close, 20) * 2)Para evaluar la diferencia entre el precio y el promedio.
  5. Optimización de la gestión de fondos

    • Implementar la gestión dinámica de posiciones, ajustando el margen de riesgo de cada operación en función de la intensidad de la tendencia actual, la volatilidad del mercado y la dinámica de la tasa de ganancias histórica.
    • Cómo se implementa: agregar código para calcular el tamaño de la posición dinámica basada en la ganancia de N transacciones recientes, comoposition_size = strategy.initial_capital * 0.01 * (recent_win_rate * 2)

Resumir

La estrategia de indicadores de fuerza relativamente débiles de tipo aleatorio de confirmación cruzada de múltiples marcos temporales es un sistema de negociación de diseño refinado que mejora la calidad de las transacciones y reduce el riesgo de falsas señales a través de mecanismos de confirmación y filtración de señales en varios niveles. La estrategia es especialmente adecuada para entornos de mercado con gran volatilidad, ya que el filtro ATR evita la generación de demasiadas señales no válidas en mercados de baja volatilidad, mientras que el mecanismo de enfriamiento de señales controla eficazmente el problema de las operaciones excesivas.

La mayor ventaja de esta estrategia reside en su claridad lógica, parámetros ajustables y adaptabilidad, lo que le permite adaptarse a diferentes variedades de operaciones y entornos de mercado. Sin embargo, debido a la falta de un mecanismo de parada de pérdidas claro y al posible atraso de la señal, los comerciantes deben agregar medidas adicionales de gestión de riesgos en la aplicación práctica y optimizar los parámetros según las variedades de operaciones específicas y las preferencias de riesgo personales.

La introducción de las medidas de optimización sugeridas, como el mecanismo de suspensión de pérdidas dinámicas, los filtros de tendencias y la optimización de la gestión de fondos, promete mejorar aún más su estabilidad y rentabilidad para convertirse en un sistema de negociación más completo y confiable.

Código Fuente de la Estrategia
/*backtest
start: 2025-05-04 00:00:00
end: 2025-06-03 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Archertoria

//@version=6
strategy("System 0530 - Stoch RSI Strategy with ATR filter")
// --- 原始指标输入参数 ---
g_stoch = "Stochastic RSI 参数"
rsi_len = input.int(14, "RSI 周期", minval=1, group=g_stoch)
stoch_rsi_len = input.int(14, "Stochastic of RSI 周期 (K Period for Stoch)", minval=1, group=g_stoch)
stoch_k_smooth = input.int(3, "Stochastic %K 平滑 (D Period for Stoch)", minval=1, group=g_stoch)
stoch_d_smooth = input.int(3, "Stochastic %D 平滑 (Smoothing for final D)", minval=1, group=g_stoch)

g_signal = "信号触发与确认参数"
stoch_5min_k_long_trigger = input.float(30.0, "5分钟 Stoch K 做多触发水平 (K需 ≤ 此值)", minval=0, maxval=100, step=0.1, group=g_signal, tooltip="5分钟图上,K线向上交叉D线时,当时的K值必须小于或等于此设定值,才会启动做多信号等待。")
stoch_5min_k_short_trigger = input.float(70.0, "5分钟 Stoch K 做空触发水平 (K需 ≥ 此值)", minval=0, maxval=100, step=0.1, group=g_signal, tooltip="5分钟图上,K线向下交叉D线时,当时的K值必须大于或等于此设定值,才会启动做空信号等待。")
stoch_15min_long_entry_level = input.int(40, "15分钟 Stoch K 做多确认阈值 (K需低于此值)", minval=0, maxval=100, group=g_signal, tooltip="15分钟图上,最终确认做多时,15分钟K线值需低于此设定值。")
stoch_15min_short_entry_level = input.int(60, "15分钟 Stoch K 做空确认阈值 (K需高于此值)", minval=0, maxval=100, group=g_signal, tooltip="15分钟图上,最终确认做空时,15分钟K线值需高于此设定值。")
wait_window_5min_bars = input.int(5, "等待15分钟信号的K线数 (5分钟图)", minval=1, group=g_signal, tooltip="5分钟信号发出后,在接下来的N根5分钟K线内等待15分钟信号确认。")

g_repeat_filter = "重复信号过滤设置"
use_signal_cooldown_filter = input.bool(true, title="启用重复信号过滤器", group=g_repeat_filter, tooltip="过滤掉短时间内同向的重复信号。")
min_bars_between_signals = input.int(18, title="同向信号最小间隔K线数", minval=1, group=g_repeat_filter, tooltip="一个信号发出后,至少等待这么多根K线才会发出下一个同向信号。")

// --- 策略特定输入参数 ---
g_strategy = "策略参数"
leverage_multiplier = input.float(1.0, "杠杆倍数 (仅影响理论头寸大小)", minval=1.0, step=0.1, group=g_strategy, tooltip="注意:TradingView策略本身不直接模拟保证金账户的杠杆爆仓。此杠杆用于计算理论头寸大小。实际杠杆效果需在支持杠杆的经纪商处体现。")

// --- ATR波动率过滤器参数 --- (止盈止损参数组已删除)
g_volatility = "波动率过滤器参数 (ATR)"
use_atr_filter = input.bool(true, "启用ATR波动率过滤器", group=g_volatility, tooltip="勾选以启用ATR过滤器。")
atr_period = input.int(14, "ATR计算周期", minval=1, group=g_volatility)
min_atr_value_ticks = input.float(10, "ATR最小跳动点数阈值", minval=0, step=1, group=g_volatility, tooltip="ATR值(以合约最小跳动点数为单位)必须大于等于此阈值才允许开仓。例如,如果最小跳动点是0.1,这里填10,则要求ATR至少为1.0。0表示不基于此项过滤。")

// --- 函数: 计算 Stochastic RSI ---
getStochasticRSI(src, rsiLen, stochLen, kSmooth, dSmooth) =>
    rsi_val = ta.rsi(src, rsiLen)
    stoch_rsi_k_raw = ta.stoch(rsi_val, rsi_val, rsi_val, stochLen)
    stoch_rsi_k = ta.sma(stoch_rsi_k_raw, kSmooth)
    stoch_rsi_d = ta.sma(stoch_rsi_k, dSmooth)
    [stoch_rsi_k, stoch_rsi_d]

// --- 时间序列数据获取与Stochastic RSI计算 ---
[stoch_k_15min_val, stoch_d_15min_val] = request.security(syminfo.tickerid, "15", getStochasticRSI(close, rsi_len, stoch_rsi_len, stoch_k_smooth, stoch_d_smooth), lookahead=barmerge.lookahead_off)
[stoch_k_5min_val, stoch_d_5min_val] = getStochasticRSI(close, rsi_len, stoch_rsi_len, stoch_k_smooth, stoch_d_smooth)

// --- ATR 计算 ---
current_atr_value = ta.atr(atr_period)
atr_condition_met = not use_atr_filter or (min_atr_value_ticks == 0) or (current_atr_value / syminfo.mintick >= min_atr_value_ticks)

// --- 信号逻辑状态变量 ---
var bool waiting_for_15m_long_confirm = false
var bool waiting_for_15m_short_confirm = false
var int bars_elapsed_in_wait_state = 0
var int last_long_signal_bar_idx = -min_bars_between_signals
var int last_short_signal_bar_idx = -min_bars_between_signals

// --- 检测5分钟Stochastic RSI交叉事件 ---
bool stoch_5min_crossed_up_prev_bar = ta.crossover(stoch_k_5min_val[1], stoch_d_5min_val[1])
bool stoch_5min_crossed_down_prev_bar = ta.crossunder(stoch_k_5min_val[1], stoch_d_5min_val[1])
bool condition_5min_k_level_for_long_trigger = stoch_k_5min_val[1] <= stoch_5min_k_long_trigger
bool condition_5min_k_level_for_short_trigger = stoch_k_5min_val[1] >= stoch_5min_k_short_trigger

// --- 管理等待状态和容错期 ---
if (stoch_5min_crossed_up_prev_bar and condition_5min_k_level_for_long_trigger)
    can_trigger_new_long = not use_signal_cooldown_filter or (bar_index - last_long_signal_bar_idx >= min_bars_between_signals)
    if (can_trigger_new_long)
        waiting_for_15m_long_confirm := true
        waiting_for_15m_short_confirm := false
        bars_elapsed_in_wait_state := 1
    else 
        if (waiting_for_15m_long_confirm or waiting_for_15m_short_confirm) 
            bars_elapsed_in_wait_state := 1 
else if (stoch_5min_crossed_down_prev_bar and condition_5min_k_level_for_short_trigger)
    can_trigger_new_short = not use_signal_cooldown_filter or (bar_index - last_short_signal_bar_idx >= min_bars_between_signals)
    if (can_trigger_new_short)
        waiting_for_15m_short_confirm := true
        waiting_for_15m_long_confirm := false
        bars_elapsed_in_wait_state := 1
    else 
        if (waiting_for_15m_long_confirm or waiting_for_15m_short_confirm) 
            bars_elapsed_in_wait_state := 1
else if (waiting_for_15m_long_confirm or waiting_for_15m_short_confirm)
    bars_elapsed_in_wait_state += 1

if (bars_elapsed_in_wait_state > wait_window_5min_bars)
    waiting_for_15m_long_confirm := false
    waiting_for_15m_short_confirm := false
    // bars_elapsed_in_wait_state := 0 // Optional reset

// --- 15分钟Stochastic RSI确认条件 ---
bool confirm_15min_long_stoch_kd_cond = stoch_k_15min_val >= stoch_d_15min_val
bool confirm_15min_short_stoch_kd_cond = stoch_k_15min_val <= stoch_d_15min_val
bool filter_15min_stoch_level_long = stoch_k_15min_val < stoch_15min_long_entry_level
bool filter_15min_stoch_level_short = stoch_k_15min_val > stoch_15min_short_entry_level

// --- 主要信号判断 (用于策略逻辑) ---
entry_long_signal = false
entry_short_signal = false

if (waiting_for_15m_long_confirm and bars_elapsed_in_wait_state <= wait_window_5min_bars)
    if (confirm_15min_long_stoch_kd_cond and filter_15min_stoch_level_long)
        can_confirm_new_long = not use_signal_cooldown_filter or (bar_index - last_long_signal_bar_idx >= min_bars_between_signals)
        if (can_confirm_new_long)
            if (atr_condition_met) // ATR 过滤器检查
                entry_long_signal := true
                last_long_signal_bar_idx := bar_index
                waiting_for_15m_long_confirm := false
                bars_elapsed_in_wait_state := 0
        else 
            waiting_for_15m_long_confirm := false 
            bars_elapsed_in_wait_state := 0
if (waiting_for_15m_short_confirm and bars_elapsed_in_wait_state <= wait_window_5min_bars)
    if (confirm_15min_short_stoch_kd_cond and filter_15min_stoch_level_short)
        can_confirm_new_short = not use_signal_cooldown_filter or (bar_index - last_short_signal_bar_idx >= min_bars_between_signals)
        if (can_confirm_new_short)
            if (atr_condition_met) // ATR 过滤器检查
                entry_short_signal := true
                last_short_signal_bar_idx := bar_index
                waiting_for_15m_short_confirm := false
                bars_elapsed_in_wait_state := 0
        else 
            waiting_for_15m_short_confirm := false 
            bars_elapsed_in_wait_state := 0

// --- 策略执行逻辑 ---

if (entry_long_signal)
    strategy.entry("LE", strategy.long, comment="long entry")

if (entry_short_signal)
    strategy.entry("SE", strategy.short, comment="short entry")

// --- 绘图 ---
plotshape(entry_long_signal, title="做多信号点", location=location.belowbar, color=color.new(color.green,0), style=shape.triangleup, size=size.small)
plotshape(entry_short_signal, title="做空信号点", location=location.abovebar, color=color.new(color.red,0), style=shape.triangledown, size=size.small)