Stratégie de trading de fourchette de prix dynamique et de divergence RSI : filtrage de tendance de moyenne mobile multi-périodes et optimisation de la gestion dynamique des positions

RSI MA DIVERGENCE DYNAMIC POSITION SIZING TREND FILTERING BOX RANGE
Date de création: 2025-05-15 16:07:47 Dernière modification: 2025-05-15 16:07:47
Copier: 3 Nombre de clics: 306
2
Suivre
319
Abonnés

Stratégie de trading de fourchette de prix dynamique et de divergence RSI : filtrage de tendance de moyenne mobile multi-périodes et optimisation de la gestion dynamique des positions Stratégie de trading de fourchette de prix dynamique et de divergence RSI : filtrage de tendance de moyenne mobile multi-périodes et optimisation de la gestion dynamique des positions

Aperçu

La stratégie de négociation de déviation de la zone de prix dynamique par rapport au RSI est un système de négociation quantitative intégré qui combine les trois technologies de base de la détection de la zone de prix, du signal de déviation de l’indicateur RSI et de l’analyse de la tendance des moyennes mobiles. La stratégie est spécialement conçue pour la plate-forme de robots de signaux OKX, avec des fonctions avancées de réglage de position dynamique et de plafonnement partiel de la position.

La particularité de cette stratégie réside dans son système de gestion de position dynamique, qui permet d’ajuster dynamiquement la taille de la transaction en fonction de l’écart entre le prix actuel et le prix moyen de la position, ce qui permet à la stratégie d’augmenter les positions lorsque les prix continuent à évoluer dans une direction favorable, tout en réduisant progressivement les positions lorsque les prix commencent à se renverser, optimisant ainsi l’efficacité des fonds et le retour sur risque.

Principe de stratégie

La stratégie est basée sur trois composantes principales:

  1. Détection de la fourchette de prix: Stratégie pour déterminer les fourchettes de prix en calculant les prix maximaux et minimaux au cours d’une période donnée (paramètre boxLength). Ces niveaux de prix sont tracés sur le graphique comme des lignes de bordure supérieure et inférieure, fournissant une fourchette de référence de prix visualisée pour les transactions.

  2. RSI déviant de la détectionLa stratégie utilise l’indice de force relative (RSI) pour calculer la dynamique du marché et détecter les déviations entre le prix et le RSI. Une déviation de bullish se forme lorsque le prix atteint un nouveau bas et que le RSI atteint un plus haut bas. Une déviation de bullish se forme lorsque le prix atteint un nouveau haut et que le RSI atteint un plus bas haut.

  3. Analyse des tendances des moyennes mobiles: la stratégie calcule plusieurs types de moyennes mobiles (MA20, MA50, MA100 et MA200) sur des périodes de temps personnalisées et détermine la tendance du marché en analysant l’arrangement de ces moyennes et la position du prix par rapport à la moyenne. La stratégie déclenche plusieurs signaux uniquement pendant une tendance à la baisse pour s’assurer que la transaction est cohérente avec l’environnement général du marché.

La logique de la transaction est la suivante:

  • Faire plus de signaux: déclenchée lorsque le prix franchit la limite inférieure et détectée une déviation du poids du RSI, tout en veillant à l’exécution uniquement dans des conditions de tendance à la baisse. Le système ajuste dynamiquement la taille de la position en fonction de la différence entre le prix actuel et le prix moyen de la position.
  • Signaux de réductionLe système ferme une partie de la position en fonction de la dynamique du prix par rapport au prix moyen de la position.

Avantages stratégiques

  1. Mécanisme de vérification multidimensionnelleLa combinaison de la rupture de la fourchette de prix, le RSI déviant du signal et le filtrage de la tendance des moyennes mobiles a créé un système de confirmation de transaction multidimensionnel qui a considérablement amélioré la fiabilité et la précision des signaux de transaction.

  2. Gestion dynamique des positionsStratégie: Ajuste dynamiquement la taille des positions en fonction des conditions du marché et des variations de prix, plutôt que d’utiliser une répartition fixe des positions. Cela permet à la stratégie de maximiser le potentiel de profit dans un environnement de marché favorable tout en contrôlant le risque dans des conditions défavorables.math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1), 100), minEnterPercent)Assurez-vous que les ajustements de position sont à la fois flexibles et limités.

  3. Adaptation au marché: Grâce à l’analyse croisée et alignée des moyennes mobiles, la stratégie est capable de s’adapter à différents environnements de marché et d’exécuter des transactions uniquement lorsque la forme technique est en accord avec la tendance générale.

  4. Points d’entrée et de sortie précisLes paramètres de retour (leftLookback et rightLookback) améliorent la précision de la reconnaissance des points extrêmes.

  5. Retour visualiséLa stratégie consiste à afficher les intervalles de prix, les moyennes mobiles et les balises de signaux de négociation sur un graphique, fournissant ainsi une rétroaction visuelle intuitive permettant aux traders de comprendre et de vérifier leurs décisions de négociation.

  6. Configuration flexible des paramètres: Une variété de paramètres réglables permettent à la stratégie de s’adapter à différents marchés et styles de négociation, tels que la longueur du RSI, les cycles d’intervalles de prix et les cycles de rétrocession.

Risque stratégique

  1. Risque de fausse percée: La rupture de la fourchette de prix peut parfois être de courte durée et non le début d’une tendance réelle. Cela peut entraîner des transactions inutiles et des pertes. La façon de réduire le risque est d’ajouter des facteurs de confirmation, tels que l’extension du cycle de rétrocession ou l’augmentation de la confirmation de la transaction.

  2. Risques liés à la surventeIl est recommandé de définir des seuils d’ajustement minimaux raisonnables (minEnterPercent et minExitPercent) afin d’éviter que de petites fluctuations de prix ne déclenchent des transactions fréquentes.

  3. Risque de décalage moyen: Les moyennes mobiles présentent un risque de retard, en particulier dans les marchés qui évoluent rapidement. Ce risque peut être atténué en ajustant le type de moyenne utilisée (par exemple, passer de la SMA à l’EMA) ou en ajustant la période de la moyenne.

  4. Paramètre Sensibilité: la stratégie dépend de plusieurs paramètres, tels que les seuils RSI, les cycles de la moyenne, etc. Des changements mineurs de ces paramètres peuvent avoir un impact significatif sur la performance de la stratégie. Il est recommandé de rechercher des paramètres robustes en relançant les différentes combinaisons de paramètres et de ré-optimiser régulièrement les paramètres pour s’adapter aux conditions changeantes du marché.

  5. La dépendance au marché unique: la stratégie peut bien fonctionner dans certaines conditions de marché et mal fonctionner dans d’autres. Il est recommandé de tester la stratégie dans différents environnements de marché et différentes périodes de temps, et d’envisager d’ajouter un filtre d’état de marché pour suspendre les transactions dans des conditions de marché inappropriées.

Direction d’optimisation

  1. Confirmation d’augmentation du volumeLa stratégie actuelle consiste à prendre des décisions de négociation en se basant uniquement sur le prix et l’indicateur RSI. L’augmentation de l’analyse du volume des transactions permet de vérifier l’efficacité des ruptures entre les fourchettes de prix et d’éviter les fausses ruptures avec un volume insuffisant. La mise en œuvre concrète peut être réalisée en vérifiant si le volume des transactions au moment de la rupture est supérieur à la moyenne des transactions des cycles précédents.

  2. Mise en place d’un mécanisme d’ajustement de la volatilité: pendant les périodes de forte volatilité, ajouter un filtre de signal ou ajuster la taille de la position pour réduire le risque de faux signaux et contrôler l’axe de risque maximal. L’indicateur ATR (Average True Range) peut être utilisé pour quantifier la volatilité et ajuster dynamiquement les paramètres de négociation.

  3. Ajouter le filtre de la marge bénéficiaire: avant chaque transaction, estimer le rapport risque/rendement potentiel et exécuter uniquement les transactions qui atteignent le minimum de dépréciation du rapport profit/perte, afin d’optimiser les rendements attendus de la stratégie globale. Cela peut être réalisé en définissant des niveaux de stop loss et stop loss dynamiques basés sur l’ATR.

  4. Introduction à l’analyse de plusieurs périodes: la qualité du signal peut être améliorée en ajoutant une confirmation de tendance sur une période de temps plus élevée. Par exemple, l’exécution d’une transaction ne s’effectue que lorsque la tendance de la ligne du soleil correspond à la tendance de la période de négociation actuelle.

  5. Amélioration de l’algorithme de position dynamique: la fonction de couverture actuelle peut produire des ajustements trop importants ou trop petits dans des situations extrêmes. Des algorithmes plus complexes peuvent être envisagés, tels que des formules d’adaptation basées sur la volatilité du marché et la situation actuelle des pertes et des pertes, ou l’introduction de limites de couverture de risque pour s’assurer qu’une seule transaction n’affecte pas excessivement l’ensemble du portefeuille.

  6. Ajouter une optimisation automatique des paramètres: réaliser un cycle d’optimisation automatique des paramètres, en ajustant régulièrement les paramètres de la stratégie en fonction des données de marché les plus récentes, afin que la stratégie puisse mieux s’adapter aux conditions de marché changeantes. Cela peut être réalisé par un cadre de rétroaction ou un algorithme d’apprentissage automatique.

Résumer

La stratégie de négociation de la marge de prix dynamique et de l’écart RSI est un système de négociation quantitatif avancé qui intègre plusieurs méthodes d’analyse technique et fournit un cadre de décision de négociation puissant grâce à la combinaison de la marge de prix, de l’écart RSI et de la tendance des moyennes mobiles. Son plus grand avantage réside dans le système de gestion de position dynamique, capable d’ajuster automatiquement la taille des transactions en fonction des conditions du marché et d’optimiser l’efficacité des fonds tout en maintenant le contrôle des risques.

Bien que les stratégies présentent certains risques inhérents, tels que les faux-breechers et la sensibilité aux paramètres, la stabilité et l’adaptabilité des stratégies peuvent être encore renforcées par des orientations d’optimisation suggérées, telles que l’ajout de confirmation de transaction, l’introduction d’ajustements de taux de volatilité et l’analyse de plusieurs périodes. Pour les traders qui souhaitent déployer des stratégies avancées sur des plateformes de trading automatisées (comme les robots de signaux OKX), cela offre un cadre de base flexible et puissant qui peut être personnalisé et étendu en fonction de leur style de trading personnel et de leurs préférences de marché.

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

//@version=6
// Strategy: Box Range with RSI Divergence (Dynamic Adjustment - OKX Signal Format)
// © aws2333
//I'm chinese 
strategy("Kaito  Box with RSI Div(Dynamic Adjustment + MA + Long)", overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=10)


rsiOverbought = 80 
rsiOversold = 13   
boxLength = input.int(3, title="Box Length", minval=1) 
rsiLength = input.int(2, title="RSI Length", minval=1) 
divergenceLookback = input.int(2, title="Divergence Lookback Period", minval=1) 
leftLookback = input.int(2, title="Left Lookback", minval=1)  
rightLookback = input.int(2, title="Right Lookback", minval=1) 
var float avgPrice = na       
//var float position_size = 0     

signalToken = input.string("**********", "Signal Token")
enterOrderType = input.string("limit", "Order Type", options=["market", "limit"])
enterOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
enterInvestmentType = input.string("percentage_investment", "Investment Type", options=["margin", "contract", "percentage_balance", "percentage_investment"])
exitOrderType = input.string("limit", "Order Type", options=["market", "limit"])
exitOrderPriceOffset = input.float(0.05, "Order Price Offset", minval=0, maxval=100, step=0.01)
exitInvestmentType = input.string("percentage_position", "Investment Type", options=["percentage_position"])
maxLag = input.float(30, "maxLag")

minEnterPercent = 1.3  
minExitPercent = 0.09  


highestHigh = ta.highest(high, boxLength) 
lowestLow = ta.lowest(low, boxLength)  


plot(highestHigh, title="Upper Box", color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
plot(lowestLow, title="Lower Box", color=color.new(color.red, 0), linewidth=1, style=plot.style_line)


rsi = ta.rsi(low, rsiLength)


isLowestLeft = low < ta.lowest(low[1], leftLookback)  
isLowestRight = low <= ta.lowest(low, rightLookback) 
isLowestClose = isLowestLeft and isLowestRight      

isHighestLeft = low > ta.highest(low[1], leftLookback) 
isHighestRight = low >= ta.highest(low, rightLookback) 
isHighestClose = isHighestLeft and isHighestRight      

lowestClose = ta.lowest(low, divergenceLookback)
lowestRsi = ta.lowest(rsi, divergenceLookback)
highestClose = ta.highest(low, divergenceLookback)
highestRsi = ta.highest(rsi, divergenceLookback)


lowestClosePrev = ta.lowest(low[1], leftLookback)
lowestRsiPrev = ta.lowest(rsi[1], leftLookback)
highestClosePrev = ta.highest(low[1], leftLookback)
highestRsiPrev = ta.highest(rsi[1], leftLookback)



bullishDivergence = isLowestClose and (low < lowestClosePrev) and (rsi > lowestRsiPrev) and (rsi < rsiOversold)
bearishDivergence = isHighestClose and (low > highestClosePrev) and (rsi < highestRsiPrev) and (rsi > rsiOverbought)


ma(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) :type == "EMA" ? ta.ema(source, length) :type == "SMMA (RMA)" ? ta.rma(source, length) :type == "WMA" ? ta.wma(source, length) :type == "VWMA" ? ta.vwma(source, length) :na


custom_timeframe = input.timeframe("3", "Custom time period (leave blank for current period)")


ma_type = input.string("SMA", "Moving average type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])


ma20_period = input.int(20, "MA20 ", minval=1)
ma50_period = input.int(50, "MA50 ", minval=1)
ma100_period = input.int(100, "MA100 ", minval=1)
ma200_period = input.int(200, "MA200 ", minval=1)


source_close = request.security(syminfo.tickerid, custom_timeframe, close)


ma20 = ma(source_close, ma20_period, ma_type)
ma50 = ma(source_close, ma50_period, ma_type)
ma100 = ma(source_close, ma100_period, ma_type)
ma200 = ma(source_close, ma200_period, ma_type)


up_signal_1 = ma20 > ma200  
up_signal_2 = ma50 > ma200  
up_signal_3 = ma100 > ma200 
up_signal_4 = (high > ma20 and high > ma50 and high > ma100 and high > ma200)
up_trend = (up_signal_1 and up_signal_2 and up_signal_3 and (source_close > ma200)) or up_signal_4 


down_signal_1 = ma20 < ma200  
down_signal_2 = ma50 < ma200  
down_signal_3 = ma100 < ma200 
down_signal_4 = (low < ma20 and low < ma50 and low < ma100 and low < ma200)
down_trend = (down_signal_1 and down_signal_2 and down_signal_3 and (source_close < ma200)) or down_signal_4 




plot(ma20, color=color.yellow, title="MA20")
plot(ma50, color=color.orange, title="MA50")
plot(ma100, color=color.red, title="MA100")
plot(ma200, color=color.maroon, title="MA200")


var float longAddPercent = na 
var float shortAddPercent = na 
roundToFourDecimals(value) => math.round(value * 10000) / 10000

if not na(avgPrice)
    if close < avgPrice
        longAddPercent := roundToFourDecimals(math.max(math.min(math.pow((avgPrice - close)* 1000/5,1.1)  , 100), minEnterPercent)) 
    if close > avgPrice
        longAddPercent := 1
 
    if close == avgPrice
        longAddPercent := 1


if not na(avgPrice)
    if close < avgPrice
        shortAddPercent := 0.01
 
    if close > avgPrice
        shortAddPercent := roundToFourDecimals(math.max(math.min(math.pow((close - avgPrice)*1000,1.1), 100), minExitPercent)) 
    if close == avgPrice
        longAddPercent := 1


longSignal = (close <= lowestLow) and bullishDivergence
shortSignal = (close >= highestHigh) and bearishDivergence
plotLongSignal = down_trend and longSignal and close < avgPrice
plotShortSignal = up_trend and shortSignal and close > avgPrice  

if plotLongSignal
    label.new(bar_index, avgPrice, "average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_up, color=color.green, textcolor=color.white )
if plotShortSignal
    label.new(bar_index, avgPrice,"average price: " + str.tostring(avgPrice, "#.####"), style=label.style_label_down, color=color.red, textcolor=color.white)




if plotLongSignal
    label.new(
         bar_index, 
         close, 
         "LONG :" + str.tostring(longAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
         style=label.style_label_up, 
         color=color.new(color.green, 80), 
         textcolor=color.white
         )

if plotShortSignal
    label.new(
             bar_index, 
             close, 
             "EXIT LONG :" + str.tostring(shortAddPercent, "#.####") + "%, Close: " + str.tostring(close, "#.####"), 
             style=label.style_label_down, 
             color=color.new(color.red, 80), 
             textcolor=color.white
             )


if longSignal

    avgPrice := na(avgPrice) ? close : (avgPrice + close) / 2 







  
if down_trend and longSignal
     
    strategy.entry("Long",strategy.long,qty=longAddPercent )
    
var float close_size = na

if up_trend and shortSignal 

    if strategy.position_size > 0
        close_size := strategy.position_size * (shortAddPercent/100)  
        strategy.order("Partial Close Long", strategy.short, close_size)