Stratégie d'indice de force relative stochastique à confirmation croisée multi-périodes et système de filtrage de volatilité

RSI ATR SRSI MTF
Date de création: 2025-06-04 10:31:03 Dernière modification: 2025-06-04 10:31:03
Copier: 0 Nombre de clics: 274
2
Suivre
319
Abonnés

Stratégie d’indice de force relative stochastique à confirmation croisée multi-périodes et système de filtrage de volatilité Stratégie d’indice de force relative stochastique à confirmation croisée multi-périodes et système de filtrage de volatilité

Aperçu

La stratégie de confirmation croisée multi-châtres est un système de négociation intégré qui combine habilement les caractéristiques de croisement des signaux des indicateurs stochastiques (RSI) dans différentes périodes de temps, et est complétée par un filtre d’amplitude réelle moyenne (ATR) pour assurer une volatilité suffisante du marché. L’idée centrale de la stratégie est de capturer le signal initial à partir d’une courte période de temps (5 minutes) et de le confirmer à l’aide d’une longue période (15 minutes), ce qui améliore la fiabilité et l’exactitude du signal de négociation.

Principe de stratégie

Le fonctionnement de la stratégie est basé sur quatre mécanismes centraux: le déclenchement du signal initial, la confirmation des cadres temporels multiples, le filtrage des taux d’oscillation et le système de refroidissement du signal.

  1. Trigger du signal initial

    • Sur le graphique de 5 minutes, le système entre en mode multi-signaux d’attente lorsque la ligne %K du Stochastic RSI traverse la ligne %D et que la valeur %K est inférieure au niveau de survente par défaut (default 30).
    • Lorsque le Stochastic RSI traverse la ligne %D en dessous de la ligne %K et que la valeur de la ligne %K est supérieure au niveau de survente prédéfini (default 70), le système entre en attente du signal de coupe.
  2. Mécanisme de confirmation de plusieurs périodes

    • Une fois que le système est en attente de signal, il demande la confirmation du délai de 15 minutes dans la fenêtre d’attente prédéfinie (la ligne K de 5 à 5 minutes par défaut).
    • Condition de confirmation multiple: la ligne Stochastic RSI %K sur le graphique de 15 minutes est supérieure ou égale à la ligne %D et la ligne %K est inférieure à la limite par défaut (par défaut 40).
    • Condition de confirmation de vide: la ligne stochastique RSI %K sur le graphique de 15 minutes est inférieure ou égale à la ligne %D et la ligne %K est supérieure au seuil par défaut (par défaut 60).
  3. Filtrage des taux de fluctuation ATR

    • Le système calcule la valeur actuelle de l’ATR et la convertit en un minimum de points de pulsation.
    • Un signal de transaction est exécuté uniquement si la valeur actuelle de l’ATR dépasse le seuil minimal défini par l’utilisateur (default 10 points de réaction).
    • Ce mécanisme garantit que les transactions ne sont effectuées que lorsque le marché est suffisamment volatil et évite les faux signaux générés par de petites fluctuations de prix sur des marchés peu volatils.
  4. Système de refroidissement du signal

    • Une fois qu’un signal de transaction a été généré, le système oblige à attendre le nombre minimum de lignes K prédéfinies (défaut de 18 lignes K) avant d’être autorisé à générer un nouveau signal dans la même direction.
    • Ce mécanisme empêche efficacement le système de générer trop de signaux synchrones dans un court laps de temps, réduisant ainsi le risque de sur-transaction.

La stratégie gère les positions en utilisant un inversion de croisement, c’est-à-dire qu’elle élimine toute position déjà vacante et crée une position supplémentaire lorsque des signaux de commande multiples apparaissent, et élimine toute position supplémentaire existante et crée une position vide lorsque des signaux de commande multiples apparaissent.

Avantages stratégiques

  1. Système de filtration à plusieurs niveauxLe système réduit considérablement le nombre de faux signaux et améliore la qualité des transactions en combinant la confirmation de signaux à différentes périodes et le filtrage des taux de volatilité ATR. Un mécanisme de vérification à plusieurs niveaux garantit l’entrée sur le marché uniquement dans les conditions les plus favorables et réduit la fréquence des transactions inutiles.

  2. Une grande capacité d’adaptationLes paramètres de la stratégie sont hautement personnalisables, y compris les cycles RSI, les valeurs de l’indicateur aléatoire, les valeurs de la barre de déclenchement, etc., permettant aux traders d’optimiser les ajustements en fonction des différents environnements de marché et des préférences de risque personnelles.

  3. La capacité de détection des fluctuationsPar le biais du filtre ATR, la stratégie est capable d’identifier intelligemment l’état de la volatilité du marché et de négocier uniquement dans des conditions de volatilité suffisante, évitant ainsi les signaux inefficaces générés par de petites fluctuations dans le marché de la liquidation.

  4. Protéger contre la surventeLe système de refroidissement des signaux est une conception innovante qui limite la fréquence des transactions dans le même sens par une période d’attente obligatoire, empêchant efficacement le système de générer trop de transactions en peu de temps, réduisant les coûts de commissions et les pertes de points de glissement.

  5. La logique est claire et transparenteChaque composant de la stratégie a une fonction et un objectif bien définis, sans les algorithmes compliqués et incompréhensibles de la boîte noire, ce qui permet aux traders de comprendre parfaitement le fonctionnement du système et renforce la confiance dans les opérations.

Risque stratégique

  1. Rarité du signal: Les mécanismes de confirmation à plusieurs niveaux améliorent la qualité des signaux, mais augmentent inévitablement la latence des signaux. En particulier dans les marchés en évolution rapide, l’attente d’une confirmation dans un délai de 15 minutes peut entraîner la perte du meilleur point d’entrée ou l’entrée dans une position défavorable.

  2. Paramètre SensibilitéL’efficacité de la stratégie est fortement dépendante des paramètres tels que le cycle du RSI stochastique, le seuil de surachat et de survente, la confirmation de la fenêtre d’attente, etc. Des paramètres inappropriés peuvent entraîner la perte d’un signal valide ou générer trop de faux signaux.

  3. Le manque de mécanismes clairs de préventionLa stratégie repose principalement sur des signaux inverses pour gérer le risque, sans stratégie claire de stop-loss. Cela peut entraîner des pertes importantes dans des conditions de marché extrêmes, telles que des sauts massifs ou des mouvements rapides unidirectionnels.

  4. Les cycles s’influencent mutuellementDans les stratégies multi-cadres, les indicateurs des différentes périodes de temps s’influencent les uns les autres, ce qui crée parfois des relations complexes. Par exemple, dans certaines conditions de marché, les RSI stochastiques de 5 minutes et 15 minutes peuvent rester dans la même direction pendant une longue période, ce qui entraîne le système à manquer un signal de revers.

  5. Défi de réglage des seuils ATRLe filtre ATR est configuré avec deux niveaux de difficulté: un niveau trop élevé risque de manquer une opportunité de trading efficace, et un niveau trop bas ne peut pas filtrer efficacement les faux signaux dans un environnement de faible volatilité.

Orientation de l’optimisation de la stratégie

  1. Système d’arrêt des dommages dynamiques

    • La conception de niveaux de stop-loss dynamiques basés sur l’ATR ou d’autres indicateurs de volatilité permet aux contrôles de risque de s’adapter de manière autonome à la volatilité du marché.
    • Mise en œuvre: ajoutstrategy.exit()La commande qui définit un stop loss basé sur le multiplicateur ATR, commestrategy.exit("long_exit", "LE", stop=entry_price - current_atr_value * 2)
  2. Ajouter un filtre de tendance

    • Combinez des indicateurs de tendance à plus longues périodes de temps (par exemple 1 heure ou 4 heures), tels que les moyennes mobiles ou le MACD, pour s’assurer que la direction des transactions est cohérente avec la tendance principale.
    • Comment cela se fait: ajouter du code pour obtenir des indicateurs de tendance à un niveau de temps plus élevé, commetrend_direction = request.security(syminfo.tickerid, "240", ta.ema(close, 200) < ta.ema(close, 50) ? -1 : 1)Il est également important de noter qu’il n’y a pas de conditions pour que les transactions ne se déroulent pas comme prévu.
  3. Optimisation des paramètres dynamiques

    • L’adaptation automatique des paramètres stratégiques en fonction de la volatilité du marché ou du moment de la transaction permet au système de mieux s’adapter aux différentes conditions du marché.
    • Mise en œuvre: une fonction peut être écrite pour ajuster la valeur de l’ATR actuel ou la valeur de la marge de survente en fonction de la dynamique de la volatilité du marché, commedynamic_overbought = 70 + math.min(15, current_atr_value / 2)
  4. Mécanisme de confirmation de signal amélioré

    • En plus du RSI stochastique, d’autres indicateurs tels que les bandes de Brin, le volume de transactions ou le modèle de prix sont introduits comme conditions de confirmation supplémentaires.
    • Mise en œuvre: ajout d’un code de détection de déviation de la bande de Brin, commebb_condition = (close - ta.sma(close, 20)) / (ta.stdev(close, 20) * 2)Pour évaluer la différence entre les prix et les moyennes.
  5. Optimisation de la gestion des fonds

    • La gestion dynamique des positions permet d’ajuster le seuil de risque de chaque transaction en fonction de l’intensité de la tendance actuelle, de la volatilité du marché et de la dynamique du taux de gain historique.
    • Mise en œuvre: Ajout de code pour calculer la taille de position dynamique basée sur les N dernières victoires de transaction, commeposition_size = strategy.initial_capital * 0.01 * (recent_win_rate * 2)

Résumer

La stratégie d’indicateur de faiblesse relative de type randomisé de confirmation croisée multi-temporelle est un système de négociation soigneusement conçu qui améliore la qualité des transactions et réduit le risque de faux signaux grâce à un mécanisme de confirmation et de filtrage de signaux à plusieurs niveaux. La stratégie est particulièrement adaptée aux environnements de marché à forte volatilité. Le filtre ATR évite de générer trop de signaux inefficaces dans les marchés à basse volatilité, tandis que le mécanisme de refroidissement des signaux maîtrise efficacement les problèmes de survente.

Le plus grand avantage de cette stratégie réside dans sa clarté logique, sa paramétrabilité et sa grande adaptabilité, ce qui lui permet de s’adapter à différentes variétés de transactions et à différents environnements de marché. Cependant, en raison du manque de mécanismes de stop loss clairs et de la possibilité d’un retard de signal, les traders devraient ajouter des mesures de gestion des risques supplémentaires dans la pratique et optimiser les paramètres en fonction des variétés de transactions spécifiques et des préférences de risque personnelles.

En introduisant des mesures d’optimisation recommandées, telles que des mécanismes d’arrêt dynamique des pertes, des filtres de tendance et des optimisations de la gestion des fonds, la stratégie devrait améliorer encore sa stabilité et sa rentabilité, et devenir un système de négociation plus complet et plus fiable.

Code source de la stratégie
/*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)