Stratégie quantitative de rupture de momentum de plage de surachat et de survente du RSI

RSI SMA EMA TP/SL 风险管理 动量突破 超买超卖 趋势过滤器
Date de création: 2025-04-29 09:10:11 Dernière modification: 2025-04-29 09:10:11
Copier: 0 Nombre de clics: 413
2
Suivre
319
Abonnés

Stratégie quantitative de rupture de momentum de plage de surachat et de survente du RSI Stratégie quantitative de rupture de momentum de plage de surachat et de survente du RSI

Aperçu

La stratégie de quantification des ruptures de dynamique entre les zones de survente et de survente du RSI est un système de négociation basé sur l’indice de force relative (RSI) qui se concentre sur la capture des changements de dynamique du marché et des ruptures de prix. Le cœur de la stratégie est d’identifier les zones de survente et de survente du RSI après ajustement, d’améliorer la qualité du signal en combinaison avec les filtres EMA et SMA, et d’imposer des fenêtres de temps strictes et des limites de négociation quotidiennes pour contrôler les risques.

Principe de stratégie

Le principe central de la stratégie est de capturer la rupture de l’indicateur RSI de la zone neutre vers la zone de survente ou de survente, ce qui indique généralement un changement de tendance potentielle des prix.

  1. Calcul du RSI après ajustement: le RSI à 14 cycles standard est déduit de 50, ce qui fait que l’indicateur oscille entre 50 et +50, la ligne zéro étant le point de référence neutre.

  2. Définition de la limite dynamique: Configuration de différentes valeurs centrales et de bandes de fluctuation en fonction de la tendance du marché et ajustement automatique des signaux de déclenchement des valeurs de creux dans un environnement haussier et baissier.

    • Le centre de bull: +5 (lorsque le prix est supérieur au SMA200)
    • Le centre de la bourse: -5 (lorsque le prix est inférieur au SMA200)
    • La plage d’oscillation est réglée sur ± 2
  3. Logistique de génération de signaux

    • Signaux à plusieurs têtes: lorsque le RSI après ajustement franchit la barre supérieure (centre + zone de fluctuation) et que le prix est au-dessus de l’EMA (si activé)
    • Signaux de tête vide: lorsque le RSI après ajustement dépasse la barre inférieure (centre - gamme de fluctuation) et que le prix est en dessous de l’EMA (comme activé)
  4. Gestion des échanges: la stratégie s’exécute uniquement pendant les heures de négociation spécifiées (de 9h30 à 16h00 EST par défaut) et un nombre maximum de transactions par jour (de 5 par défaut) peut être défini.

  5. Contrôle des risques: utilisation d’un point d’arrêt fixe basé sur l’unité minimale de fluctuation (défault 50 ticks) et d’un point d’arrêt optionnel (défault 30 ticks).

Avantages stratégiques

  1. Adaptation au marché: Divisez les marchés haussiers et baissiers par le SMA200 et ajustez dynamiquement le centre de la dépréciation du RSI pour que la stratégie s’adapte aux différentes conditions du marché.

  2. Mécanisme de filtrage multiple: Combination de filtrage dynamique EMA et de filtrage de tendance SMA200, améliorant considérablement la qualité du signal et réduisant les fausses percées.

  3. Une gestion rigoureuse du temps: définir des fenêtres de trading, éviter les heures d’ouverture et de fermeture les plus volatiles du marché et se concentrer sur les heures de marché les plus liquides.

  4. Contrôle de l’expositionLe gouvernement a décidé d’imposer des restrictions sur les transactions au jour le jour et de mettre en place un mécanisme de liquidation automatique afin de prévenir les risques de survente et de transaction nocturne.

  5. Système de rétroaction visuelle: offre une surveillance intuitive de l’état du marché et de la performance grâce à des colonnes de prix codées en couleurs et à des panneaux de négociation visualisés.

  6. Configuration flexible des paramètres: Tous les paramètres clés peuvent être ajustés par des options d’entrée pour adapter la stratégie à différents types de transactions et périodes de temps.

Risque stratégique

  1. Le risque d’une fausse percée:La rupture du RSI peut entraîner de faux signaux, en particulier dans les marchés de couverture horizontale. La solution consiste à ajouter des conditions de confirmation, telles que la confirmation de la forme des prix ou du volume des transactions.

  2. Risques de sur-optimisation: La mise en place de paramètres multiples peut entraîner une suradaptation des données historiques. Il est recommandé de faire des retours d’expérience dans différentes conditions de marché pour trouver une combinaison de paramètres robuste.

  3. Dépendance à l’environnement de marché: la stratégie peut être plus efficace dans un marché en forte tendance que dans un marché en turbulence. Avant de l’utiliser, il convient d’évaluer l’environnement actuel du marché, d’ajuster les paramètres si nécessaire ou de suspendre la négociation.

  4. Limite de stop-loss fixeLes points d’arrêt fixes basés sur les ticks peuvent ne pas être adaptés à toutes les conditions du marché. Envisagez d’utiliser des points d’arrêt dynamiques basés sur la volatilité, tels que les multiples ATR.

  5. Limite de la fenêtre de temps: Les fenêtres de temps de négociation serrées peuvent vous faire rater des opportunités de négociation de qualité en dehors des heures de négociation. Vous pouvez envisager de configurer différentes fenêtres de négociation pour différents marchés.

Orientation de l’optimisation de la stratégie

  1. Optimisation des marges dynamiques: La stratégie actuelle utilise une plage de fluctuation fixe ((± 2), mais il est possible d’envisager de l’ajuster dynamiquement en fonction de la volatilité du marché (comme l’ATR) pour s’adapter à différentes conditions de marché.

  2. Filtre à fluctuationL’ajout de conditions de filtrage de la volatilité basées sur l’ATR et l’évitement des transactions lorsque la volatilité est trop faible contribuent à réduire les faux signaux dans les marchés horizontaux.

  3. Confirmation de plusieurs périodes: Confirmation du signal RSI intégrant plusieurs périodes de temps, générant un signal de transaction et améliorant la qualité du signal uniquement lorsque les RSI de plusieurs périodes de temps sont alignés.

  4. Mécanisme de confirmation du volume des transactions: ajout d’une condition de volume de transaction, exigeant une rupture de prix accompagnée d’une augmentation du volume de transaction, améliorant la fiabilité du signal.

  5. Mécanisme de verrouillage des bénéfices: implémentation d’un stop loss à suivi dynamique, qui ajuste automatiquement la position de stop loss à mesure que le prix se déplace dans la direction favorable, pour bloquer une partie des bénéfices.

  6. Optimisation de l’entrée: augmentation des conditions de structure du marché (par exemple, les points de support / résistance) pour augmenter le taux de victoire en n’entrant que lorsque les prix critiques sont dépassés.

  7. Paramètres d’adaptationLa mise en place d’un mécanisme d’ajustement automatique de la longueur du RSI et des cycles EMA en fonction de l’état du marché, rendant la stratégie plus adaptable.

Résumer

La stratégie de quantification de la dynamique de rupture de la zone de survente RSI est un système de négociation bien structuré qui, combiné à la rupture de la dynamique du RSI, au filtrage de la tendance et à une gestion rigoureuse du risque, fournit aux traders des outils efficaces pour capturer les changements de dynamique du marché. La particularité de la stratégie réside dans son mécanisme d’ajustement dynamique de la dépréciation, capable de générer automatiquement des normes de signal en fonction de la tendance globale du marché.

Le mécanisme de filtrage multiple de la stratégie et les règles de négociation strictes réduisent efficacement les faux signaux, tandis que la configuration flexible des paramètres la permet de s’adapter à différentes variétés de transactions et conditions de marché. Cependant, les utilisateurs doivent être conscients des limites inhérentes à la stratégie de rupture RSI, en particulier dans les performances des marchés horizontaux.

La robustesse et l’adaptabilité de la stratégie peuvent être encore améliorées par des orientations d’optimisation recommandées, telles que l’ajustement dynamique des seuils, la confirmation de plusieurs cycles de temps et le filtrage de la volatilité. Dans l’ensemble, il s’agit d’un cadre stratégique qui équilibre la qualité du signal et la maîtrise du risque, adapté aux traders à court et moyen terme dans les opérations de jour.

Code source de la stratégie
/*backtest
start: 2025-04-21 00:00:00
end: 2025-04-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy('RSI SR OB Breakouts Strategy PRO (coffeshopcrypto)', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=15, max_bars_back=200, max_boxes_count=200, precision=2)

// === Inputs ===
show_hide_boxes = input.bool(true, 'Show Ranges')
show_hide_orderblocks = input.bool(true, 'Show Orderblocks')
use_breakout_colors = input.bool(true, title="Use Breakout Bar Colors")

rsi_len = input.int(14, title="RSI Length", minval=4, group="Risk Management")

// --- Risk Management ---
takeProfitPoints = input.int(50, title="Take Profit (Ticks)", group="Risk Management")
useStopLossMode = input.bool(false, title="Use Stop Loss Instead of Only TP?", group="Risk Management")
stopLossPoints = input.int(30, title="Stop Loss (Ticks)", group="Risk Management")

// --- Time Preferences ---
startTradeHour = input.int(9, title="Trading Start Hour (EST)", minval=0, maxval=23, group="Time Preferences")
startTradeMinute = input.int(30, title="Trading Start Minute (EST)", minval=0, maxval=59, group="Time Preferences")
endTradeHour = input.int(16, title="Trading End Hour (EST)", minval=0, maxval=23, group="Time Preferences")
endTradeMinute = input.int(0, title="Trading End Minute (EST)", minval=0, maxval=59, group="Time Preferences")

// --- Trade Limit Preferences ---
useTradeLimit = input.bool(true, title="Enable Daily Trade Limit?", group="Trade Limit")
maxTradesPerDay = input.int(5, title="Max Trades Per Day", minval=1, group="Trade Limit")

// --- EMA Adjustable ---
ema_filter_enabled = input.bool(true, "Use EMA Filter?")
ema_length = input.int(50, "EMA Length", minval=2)
ema_dynamic = ta.ema(close, ema_length)

// --- SMA150 Trend Filter ---
sma200 = ta.sma(close, 150)
useBullishSettings = close > sma200

// --- Trading Panel Toggle ---
showPanel = input.bool(true, "Show Session Trading Panel?", group="Display Settings")

// === Trade Time Check (EST Time) ===
tradeAllowed = (hour > startTradeHour or (hour == startTradeHour and minute >= startTradeMinute)) and 
               (hour < endTradeHour or (hour == endTradeHour and minute <= endTradeMinute))

// === Trade Limit Check ===
var int tradeCount = 0
newDay = ta.change(dayofmonth) != 0
if newDay
    tradeCount := 0

canTrade = tradeAllowed and (not useTradeLimit or tradeCount < maxTradesPerDay)

// === Calculate RSI and thresholds ===
rsi_up = ta.rma(math.max(ta.change(close), 0), rsi_len)
rsi_down = ta.rma(-math.min(ta.change(close), 0), rsi_len)
_rsi = rsi_down == 0 ? 100 : rsi_up == 0 ? 0 : 100 - 100 / (1 + rsi_up / rsi_down)
adjustedRSI = _rsi - 50

bullish_center = 5
bearish_center = -5
spread = 2
auto_rsi_center = useBullishSettings ? bullish_center : bearish_center
momentum_upper_threshold = auto_rsi_center + spread
momentum_lower_threshold = auto_rsi_center - spread

pricebarColor = adjustedRSI > momentum_upper_threshold ? color.rgb(37, 155, 41) : adjustedRSI < momentum_lower_threshold ? color.rgb(223, 48, 48) : color.gray

// === Signal Conditions ===
longCondition = adjustedRSI > momentum_upper_threshold and (not ema_filter_enabled or close > ema_dynamic)
shortCondition = adjustedRSI < momentum_lower_threshold and (not ema_filter_enabled or close < ema_dynamic)

// === Fresh Triggers Only ===
var bool longTrigger = false
var bool shortTrigger = false

longTrigger := longCondition and not longCondition[1]
shortTrigger := shortCondition and not shortCondition[1]

// === Trade Management with Reversals ===
var int winsToday = 0
var int lossesToday = 0

if (canTrade)
    if (longTrigger)
        if (strategy.position_size < 0)
            strategy.close("Short", comment="Reverse to Long")
        if (strategy.position_size <= 0)
            strategy.entry("Long", strategy.long)
            tradeCount += 1

    if (shortTrigger)
        if (strategy.position_size > 0)
            strategy.close("Long", comment="Reverse to Short")
        if (strategy.position_size >= 0)
            strategy.entry("Short", strategy.short)
            tradeCount += 1

// === Attach Exits After Entry ===
if (strategy.position_size > 0)
    longTakeProfit = strategy.position_avg_price + (takeProfitPoints * syminfo.mintick)
    longStopLoss = strategy.position_avg_price - (stopLossPoints * syminfo.mintick)
    if useStopLossMode
        strategy.exit("Long Exit", from_entry="Long", limit=longTakeProfit, stop=longStopLoss)
    else
        strategy.exit("Long TP Only", from_entry="Long", limit=longTakeProfit)

if (strategy.position_size < 0)
    shortTakeProfit = strategy.position_avg_price - (takeProfitPoints * syminfo.mintick)
    shortStopLoss = strategy.position_avg_price + (stopLossPoints * syminfo.mintick)
    if useStopLossMode
        strategy.exit("Short Exit", from_entry="Short", limit=shortTakeProfit, stop=shortStopLoss)
    else
        strategy.exit("Short TP Only", from_entry="Short", limit=shortTakeProfit)

// === Track wins/losses ===
if (strategy.closedtrades > 0)
    if (strategy.closedtrades.profit(strategy.closedtrades - 1) > 0)
        winsToday += 1
    else
        lossesToday += 1

// === Auto Close all trades if time window ended ===
if (not tradeAllowed)
    strategy.close_all(comment="Session End Auto Close")

// === Plotting ===
plot(adjustedRSI, title="Adjusted RSI", color=color.rgb(255, 235, 59))
plot(ema_dynamic, title="Dynamic EMA", color=color.blue)
plot(sma200, title="SMA 200", color=color.gray)
hline(0, color=color.white)

barcolor(use_breakout_colors ? pricebarColor : na)

// === Trading Panel ===
if showPanel
    label.new(x=bar_index, y=high, text="Wins: " + str.tostring(winsToday) + " | Losses: " + str.tostring(lossesToday), color=color.black, style=label.style_label_left, size=size.small)