Les ressources ont été chargées... Je charge...

La stratégie de réversion de la moyenne RSI à plusieurs niveaux avec ajustement dynamique de la volatilité

Auteur:ChaoZhang est là., Date: 2024-06-21 14:16:31 Je vous en prie.
Les étiquettes:RSI, PIVOT

img

Résumé

Cette stratégie est un système de trading de réversion moyenne à plusieurs niveaux basé sur l'indicateur RSI et la volatilité des prix. Elle utilise des valeurs extrêmes de RSI et des fluctuations de prix anormalement importantes comme signaux d'entrée, tout en utilisant une mise à l'échelle de position de type pyramide et des niveaux dynamiques de prise de profit pour gérer les risques et optimiser les rendements.

Principes de stratégie

  1. Conditions d'entrée:

    • Utilise le RSI à 20 périodes (RSI20) comme indicateur principal
    • Le montant de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée.
    • Déclenche le signal d'entrée lorsque le RSI atteint un seuil et que la taille du corps de la bougie actuelle dépasse le seuil de volatilité correspondant.
    • Condition supplémentaire: le prix doit franchir le niveau de soutien récent élevé/faible d'un certain pourcentage
  2. Mécanisme de mise à l'échelle de la position:

    • Permet jusqu'à 5 entrées (entrée initiale + 4 entrées supplémentaires)
    • Chaque entrée supplémentaire nécessite de respecter des conditions plus strictes d'indice de risque et de volatilité
  3. Mécanisme de sortie:

    • Définit 5 niveaux différents de points de prise de profit
    • Les points de prise de profit sont calculés dynamiquement sur la base des niveaux de support/résistance à l'entrée
    • Les objectifs de prise de profit diminuent progressivement à mesure que le nombre de positions ouvertes augmente
  4. Contrôle des risques:

    • Utilise un modèle de risque en pourcentage, chaque transaction risquant 20% de la valeur du compte
    • Définit un maximum de positions ouvertes simultanées permis à 5, limitant l'exposition globale au risque

Les avantages de la stratégie

  1. Entrée à plusieurs niveaux: en fixant plusieurs seuils d'indice de volatilité et de volatilité, la stratégie peut capturer différents degrés d'extrêmes du marché, augmentant ainsi les opportunités de négociation.

  2. Prise de profit dynamique: les points de prise de profit calculés en fonction des niveaux de support/résistance peuvent s'adapter à la structure du marché, protégeant les bénéfices sans quitter trop tôt.

  3. Étalonnage des positions à la pyramide: l'augmentation des positions à mesure que les tendances se poursuivent peut augmenter considérablement le potentiel de profit.

  4. Gestion des risques: le risque par pourcentage fixe et les limites maximales de position contrôlent efficacement le risque pour chaque transaction et dans l'ensemble.

  5. Flexibilité: de nombreux paramètres réglables permettent à la stratégie de s'adapter à différents environnements de marché et instruments de négociation.

  6. Réversion moyenne + Suivi de tendance: Combine les avantages de la réversion moyenne et du suivi de tendance, capturant les inversions à court terme sans manquer les tendances majeures.

Risques stratégiques

  1. Surtrading: peut déclencher des signaux commerciaux fréquents sur des marchés très volatils, entraînant des frais excessifs.

  2. False Breakouts: Les marchés peuvent connaître une brève volatilité extrême suivie d'inversions rapides, provoquant de faux signaux.

  3. Perte consécutive: les mouvements unidirectionnels continus du marché peuvent entraîner des pertes importantes après plusieurs hausses de position.

  4. Sensibilité des paramètres: les performances de la stratégie peuvent être très sensibles aux paramètres, ce qui peut entraîner un surajustement.

  5. Impact de glissement: peut faire face à un glissement important pendant les périodes de forte volatilité, ce qui affecte le rendement de la stratégie.

  6. Dépendance de l'environnement du marché: la stratégie peut être moins performante dans certains environnements de marché, tels que les marchés à faible volatilité ou à forte tendance.

Directions d'optimisation de la stratégie

  1. Ajustement dynamique des paramètres: mettre en place des mécanismes adaptatifs permettant d'ajuster dynamiquement les seuils d'indice de volatilité et de volatilité en fonction des conditions du marché.

  2. Analyses sur plusieurs périodes: intégrer des jugements sur les tendances à long terme du marché pour améliorer la qualité de l'entrée.

  3. Optimisation du stop-loss: ajouter des stop-losses de suivi ou des stop-losses dynamiques basées sur l'ATR pour un contrôle plus approfondi du risque.

  4. Filtrage de l'état du marché: inclure la force de la tendance, le cycle de volatilité et d'autres conditions de filtrage pour éviter de négocier dans des environnements de marché inappropriés.

  5. Optimisation de la gestion des capitaux: mettre en œuvre une gestion des positions plus détaillée, telle que l'ajustement de la taille des transactions en fonction des différents niveaux de signal.

  6. Intégration d'apprentissage automatique: Utiliser des algorithmes d'apprentissage automatique pour optimiser les processus de sélection de paramètres et de génération de signaux.

  7. Analyse de corrélation: intégrer une analyse de corrélation avec d'autres actifs afin d'améliorer la stabilité et la diversité de la stratégie.

Conclusion

Cette stratégie de trading de réversion de la moyenne RSI à plusieurs niveaux est un système de trading quantitatif soigneusement conçu qui combine intelligemment l'analyse technique, la gestion dynamique des risques et les techniques de mise à l'échelle de la position de type pyramide. En capturant la volatilité extrême du marché et en profitant lorsque les prix renverser, la stratégie démontre un fort potentiel de profit. Cependant, elle fait également face à des défis tels que le sur-échange et la dépendance de l'environnement du marché. L'optimisation future devrait se concentrer sur l'amélioration de l'adaptabilité de la stratégie et des capacités de contrôle des risques pour s'adapter à différents environnements de marché.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Retorno_Pivots_5min_Novo_v3.3')

// Input variables
bars_left1 = input(1, title = "Entry - Pivot Left Bars")
bars_right1 = input(1, title = "Entry - Pivot Right Bars")
rsi20_longentry0 = input(35, title = "Entry 1 - RSI20 Long")
rsi20_shortentry0 = input(65, title = "Entry 1 - RSI20 Short")
bar_size_entry0 = input.float(1, title="Entry 1 - Bar Size")
rsi20_longentry1 = input(30, title = "Entry 2 - RSI20 Long")
rsi20_shortentry1 = input(70, title = "Entry 2 - RSI20 Short")
bar_size_entry1 = input.float(0.8, title="Entry 2 - Bar Size")
rsi20_longentry2 = input(25, title = "Entry 3 - RSI20 Long")
rsi20_shortentry2 = input(75, title = "Entry 3 - RSI20 Short")
bar_size_entry2 = input.float(0.7, title="Entry 3 - Bar Size")
rsi20_longentry3 = input(20, title = "Entry 4 - RSI20 Long")
rsi20_shortentry3 = input(80, title = "Entry 4 - RSI20 Short")
bar_size_entry3 = input.float(0.5, title="Entry 4 - Bar Size")
limit_perc1 = input.float(0.60, title="Profit Range 1")
limit_perc2 = input.float(0.40, title="Profit Range 2")
limit_perc3 = input.float(0.20, title="Profit Range 3")
limit_perc4 = input.float(0.00, title="Profit Range 4")
limit_perc5 = input.float(0.00, title="Profit Range 5")
minimum_pivot_distance = input.float(0, title="Minimum Pivot Distance %")
barsize_1h_input = input(288, title="Highest Bar Lookback")
rsi20 = ta.rsi(close, 20)
rsi200 = ta.rsi(close, 200)
Pivot_High_Last1 = ta.valuewhen(ta.pivothigh(high, bars_left1, bars_right1), ta.pivothigh(high, bars_left1, bars_right1), 0)
Pivot_Low_Last1 = ta.valuewhen(ta.pivotlow(low, bars_left1, bars_right1), ta.pivotlow(low, bars_left1, bars_right1), 0)

barsize = math.abs(close - open)
barsize_1h = ta.highest(barsize, barsize_1h_input)

Bar0Long = rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Long = rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Long = rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Long = rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Long Entries
Long_Entry1 = strategy.opentrades == 0 and rsi20 < rsi20[1] and ((rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3))) and close < (Pivot_Low_Last1 * (1 - (minimum_pivot_distance / 100)))
Long_Entry2 = strategy.opentrades == 1 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry3 = strategy.opentrades == 2 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry4 = strategy.opentrades == 3 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry5 = strategy.opentrades == 4 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
if Long_Entry1 or Long_Entry2 or Long_Entry3 or Long_Entry4 or Long_Entry5
    strategy.entry("Long", strategy.long, comment = "ENTER-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Longs Exits
Long_Exit1 = strategy.opentrades == 1 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))
Long_Exit2 = strategy.opentrades == 2 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))
Long_Exit3 = strategy.opentrades == 3 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))
Long_Exit4 = strategy.opentrades == 4 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))
Long_Exit5 = strategy.opentrades == 5 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc5))
if Long_Exit1 or Long_Exit2 or Long_Exit3 or Long_Exit4 or Long_Exit5
    strategy.close("Long", comment = "EXIT-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

Bar0Short = rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Short = rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Short = rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Short = rsi20 > rsi20_shortentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Short Entries
Short_Entry1 = strategy.opentrades == 0 and rsi20 > rsi20[1] and ((rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2))) and close > (Pivot_High_Last1 * (1 + (minimum_pivot_distance / 100)))
Short_Entry2 = strategy.opentrades == 1 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry3 = strategy.opentrades == 2 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry4 = strategy.opentrades == 3 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry5 = strategy.opentrades == 4 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
if Short_Entry1 or Short_Entry2 or Short_Entry3 or Short_Entry4 or Short_Entry5
    strategy.entry("Short", strategy.short, comment = "ENTER-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Short Exits
Short_Exit1 = strategy.opentrades == 1 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1))
Short_Exit2 = strategy.opentrades == 2 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2))
Short_Exit3 = strategy.opentrades == 3 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3))
Short_Exit4 = strategy.opentrades == 4 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4))
Short_Exit5 = strategy.opentrades == 5 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc5))
if Short_Exit1 or Short_Exit2 or Short_Exit3 or Short_Exit4 or Short_Exit5
    strategy.close("Short", comment = "EXIT-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

// Plots
plot(rsi20, color=color.new(#fbff00, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))), color=color.new(#00ff2a, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))), color=color.new(#00ff2a, 50), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))), color=color.new(#00ff2a, 80), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))), color=color.new(#00ff2a, 100), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1)), color=color.new(#ff0000, 0), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2)), color=color.new(#ff0000, 50), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3)), color=color.new(#ff0000, 80), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4)), color=color.new(#ff0000, 100), linewidth=2)
plot(strategy.position_avg_price, color=color.new(#ffc400, 0), linewidth=2)
plot(strategy.opentrades * (strategy.position_size / math.abs(strategy.position_size)), color=color.new(#ff00bb, 0), linewidth=2)
plot(((barsize / barsize_1h) * 100), color=color.new(#0000ff, 0), linewidth=2)

Relationnée

Plus de