Estratégia de índice de força relativa estocástica de confirmação cruzada de múltiplos períodos e sistema de filtro de volatilidade

RSI ATR SRSI MTF
Data de criação: 2025-06-04 10:31:03 última modificação: 2025-06-04 10:31:03
cópia: 0 Cliques: 274
2
focar em
319
Seguidores

Estratégia de índice de força relativa estocástica de confirmação cruzada de múltiplos períodos e sistema de filtro de volatilidade Estratégia de índice de força relativa estocástica de confirmação cruzada de múltiplos períodos e sistema de filtro de volatilidade

Visão geral

A estratégia de indicadores de forte e fraco de confirmação aleatória de múltiplos quadros temporais é um sistema de negociação integrado que combina habilmente as características de sinais de cruzamento de indicadores de forte e fraco aleatório (RSI estocástico) em diferentes quadros temporais e é complementada por um filtro de média real de amplitude (ATR) para garantir que o mercado tenha volatilidade suficiente. A idéia central da estratégia é capturar o sinal inicial por meio de um período de tempo curto (minutos 5) e usar o período de tempo longo (minutos 15) para confirmar, aumentando a confiabilidade e a precisão do sinal de negociação. Além disso, a estratégia também projetou um mecanismo de resfriamento de sinal, evitando problemas de negociação frequente em períodos curtos de tempo, reduzindo efetivamente o risco de negociação excessiva.

Princípio da estratégia

O funcionamento da estratégia baseia-se em quatro mecanismos centrais: a ação inicial do sinal, a confirmação de múltiplos prazos, a filtragem de taxa de flutuação e o sistema de resfriamento do sinal.

  1. Trigger de sinal inicial

    • No gráfico de 5 minutos, quando o Stochastic RSI atravessa a linha %D na linha %K e o valor de %K está abaixo do nível de oversold predefinido (default 30), o sistema entra em um estado de espera de sinal múltiplo.
    • Quando o Stochastic RSI atravessa a linha %D abaixo da linha %K e o valor de %K está acima do nível de supercompra predefinido (default 70) o sistema entra em um estado de espera de sinal de curto prazo.
  2. Mecanismo de confirmação de multi-quadros temporais

    • Uma vez que o sistema está em espera de sinal, ele procura a confirmação do período de tempo de 15 minutos na janela de espera predefinida (default 5 x 5 minutos K-line).
    • Condição de confirmação múltipla: o valor da linha Stochastic RSI %K no gráfico de 15 minutos é maior ou igual ao valor da linha %D, e o valor da linha %K é menor que o limiar predefinido (default 40).
    • Condição de confirmação de vazio: o valor da linha Stochastic RSI %K no gráfico de 15 minutos é menor ou igual ao valor da linha %D, e o valor de %K é maior que o limiar predefinido (default 60).
  3. Mecanismo de filtragem de taxa de flutuação ATR

    • O sistema calcula o valor atual do ATR e o converte em um número mínimo de pontos de pulsação.
    • O sinal de transação só é executado quando o ATR atual excede o limite mínimo definido pelo usuário (default 10 pips).
    • Este mecanismo garante que as transações sejam feitas apenas quando o mercado é suficientemente volátil, evitando falsos sinais gerados por pequenas flutuações de preços em mercados pouco voláteis.
  4. Sistema de refrigeração de sinal

    • Uma vez que um sinal de transação é gerado, o sistema obriga a esperar o número mínimo de linhas K predeterminado (default 18 linhas K) antes de permitir a geração de novos sinais na mesma direção.
    • Este mecanismo é eficaz para evitar que o sistema produza demasiados sinais de sincronização em um curto espaço de tempo, reduzindo o risco de transações excessivas.

A estratégia usa um método de inversão de cruzamento para gerenciar as posições, ou seja, quando surge um sinal de falta, qualquer posição vazia já existente é eliminada e uma posição vazia é criada.

Vantagens estratégicas

  1. Sistema de filtragem em várias camadasO sistema reduziu significativamente os falsos sinais e aumentou a qualidade das transações, através da combinação de confirmação de sinais em diferentes prazos de tempo e filtragem da taxa de flutuação do ATR. O mecanismo de verificação em vários níveis garante a entrada apenas nas condições de mercado mais favoráveis, reduzindo a frequência de transações desnecessárias.

  2. Forte adaptaçãoOs parâmetros da estratégia são altamente personalizáveis, incluindo o ciclo do RSI, o equilíbrio aleatório do indicador, o limiar de ação do sinal, etc., permitindo que os comerciantes façam ajustes otimizados de acordo com diferentes cenários de mercado e preferências de risco pessoais.

  3. Percepção de flutuaçõesAtravés do filtro ATR, a estratégia é capaz de identificar inteligentemente os estados de flutuação do mercado e negociar somente em condições de volatilidade suficiente, evitando os sinais inativos gerados por pequenas flutuações no mercado de liquidação.

  4. Proteção contra o excesso de transaçãoO mecanismo de resfriamento do sinal é um design inovador que limita a frequência de transações em uma única direção por meio de um prazo de espera obrigatório, evitando efetivamente que o sistema produza muitas transações em um curto período de tempo, reduzindo os custos de comissão e a perda de pontos de deslizamento.

  5. Lógico e transparente.Cada componente da estratégia tem uma função e um propósito claros, sem complexos e incompreensíveis algoritmos de caixa preta, permitindo que o comerciante entenda completamente como o sistema funciona, aumentando a confiança na operação.

Risco estratégico

  1. Atraso de sinalO mecanismo de confirmação em vários níveis, embora melhore a qualidade do sinal, inevitavelmente aumenta a latência do sinal. Especialmente em mercados de rápida mudança, esperar a confirmação de um período de tempo de 15 minutos pode levar a perder o melhor ponto de entrada ou entrar em posição desfavorável.

  2. Sensibilidade do parâmetroA eficácia da estratégia depende fortemente de configurações de parâmetros, como o ciclo do Stochastic RSI, o overbought e o oversold, a confirmação da janela de espera, etc. A configuração inadequada de parâmetros pode causar a perda de um sinal válido ou gerar muitos falsos sinais.

  3. Falta de um mecanismo de suspensão de danos claroA estratégia baseia-se principalmente em sinais de inversão para gerenciar o risco, sem uma estratégia de stop loss clara. Em condições extremas de mercado, como salto acentuado ou corrida rápida unidirecional, isso pode levar a grandes perdas.

  4. Os ciclos influenciam-se mutuamenteEm estratégias de múltiplos quadros de tempo, os indicadores de cada período de tempo influenciam uns nos outros, às vezes formando relações complexas. Por exemplo, sob certas condições de mercado, os RSI estocásticos de 5 minutos e 15 minutos podem manter uma direção consistente por muito tempo, fazendo com que o sistema perca um sinal de reversão.

  5. Desafios de configuração de ATRA definição de um limite para o filtro ATR apresenta um dilema: se ele for muito alto, você perderá uma oportunidade de negociação efetiva, e se ele for muito baixo, não será capaz de filtrar sinais falsos em um ambiente de baixa volatilidade.

Direção de otimização da estratégia

  1. Mecanismo de parada de dano dinâmico

    • Projetar níveis de stop loss dinâmicos com base no ATR ou em outros indicadores de volatilidade, permitindo que os controles de risco se ajustem de forma adaptativa à volatilidade do mercado.
    • Implementação: Adicionávelstrategy.exit()Ordens que definem um stop loss baseado em um múltiplo ATR, comostrategy.exit("long_exit", "LE", stop=entry_price - current_atr_value * 2)
  2. Adicionar filtro de tendência

    • Indicadores de tendência com períodos de tempo mais longos (como 1 hora ou 4 horas), como médias móveis ou MACD, garantem que a direção da negociação esteja de acordo com as principais tendências.
    • Como fazer: adicionar código para obter indicadores de tendências em níveis de tempo mais elevados, comotrend_direction = request.security(syminfo.tickerid, "240", ta.ema(close, 200) < ta.ema(close, 50) ? -1 : 1)A partir daí, a empresa passou a usar o sistema de criptomoedas como um filtro para a direção das transações.
  3. Optimização de parâmetros dinâmicos

    • Adaptação automática de parâmetros de estratégia com base na volatilidade do mercado ou no momento da negociação, permitindo que o sistema se adapte melhor a diferentes condições de mercado.
    • Implementação: pode-se escrever funções que ajustam o limiar de sobrecompra e sobrevenda de acordo com o valor atual do ATR ou a dinâmica da volatilidade do mercado, comodynamic_overbought = 70 + math.min(15, current_atr_value / 2)
  4. Mecanismo de confirmação de sinal reforçado

    • Para além do RSI estocástico, introduzir outros indicadores como a faixa de Brin, volume de transação ou padrão de preços como condição de confirmação adicional.
    • Implementação: Adição de código de detecção de desvio de banda de Bryn, comobb_condition = (close - ta.sma(close, 20)) / (ta.stdev(close, 20) * 2)Para avaliar o grau de desvio entre o preço e a média.
  5. Otimização da gestão de fundos

    • Implementar uma gestão de posições dinâmica, ajustando a margem de risco de cada transação de acordo com a intensidade da tendência atual, a volatilidade do mercado e a dinâmica da taxa de vitória histórica.
    • Método de implementação: adicionar um código para calcular o tamanho da posição dinâmica com base na maior taxa de sucesso de N transações recentes, comoposition_size = strategy.initial_capital * 0.01 * (recent_win_rate * 2)

Resumir

A estratégia de indicador de força relativamente forte de tipo aleatório de confirmação cruzada de múltiplos quadros temporais é um sistema de negociação elaboradamente projetado, que aumenta a qualidade de negociação e reduz o risco de falsos sinais por meio de mecanismos de confirmação e filtragem de sinais em vários níveis. A estratégia é especialmente adequada para ambientes de mercado com grande volatilidade, evitando a produção de sinais não válidos em mercados de baixa volatilidade por meio de filtros ATR, enquanto o mecanismo de resfriamento de sinais controla efetivamente o problema do excesso de negociação.

A maior vantagem desta estratégia reside na sua clareza lógica, configuração de parâmetros e adaptabilidade, permitindo-lhe adaptar-se a diferentes variedades de negociação e ambientes de mercado. No entanto, devido à falta de um mecanismo de parada definido e ao possível atraso de sinais, os comerciantes devem adicionar medidas adicionais de gerenciamento de risco na aplicação prática e otimizar os parâmetros de acordo com as variedades de negociação específicas e as preferências de risco pessoais.

Através da introdução de medidas de otimização recomendadas, tais como o mecanismo de parada de perdas dinâmicas, filtros de tendência e otimização de gestão de fundos, a estratégia tem a perspectiva de aumentar ainda mais a sua estabilidade e rentabilidade, tornando-se um sistema de negociação mais abrangente e confiável.

Código-fonte da estratégia
/*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)