Stratégie de trading intelligente avec stop loss dynamique RSI

RSI SMA ATR
Date de création: 2024-11-12 11:39:06 Dernière modification: 2024-11-12 11:39:06
Copier: 2 Nombre de clics: 503
1
Suivre
1617
Abonnés

Stratégie de trading intelligente avec stop loss dynamique RSI

Aperçu

La stratégie est un système de trading de stop-loss dynamique basé sur les indicateurs RSI, combinant la moyenne SMA et l’indicateur d’amplitude ATR pour optimiser les décisions de négociation. La stratégie utilise un système de stop-loss à plusieurs niveaux pour maximiser les bénéfices grâce à une approche de plafonnement pyramidale, tout en utilisant le stop-loss dynamique ATR pour contrôler les risques. La stratégie est hautement adaptable et peut ajuster automatiquement les paramètres de négociation en fonction des fluctuations du marché.

Principe de stratégie

La stratégie repose principalement sur la zone de survente du RSI (((RSI<30) comme signal d’ouverture de position et exige que le prix soit au-dessus de la moyenne journalière de 200 pour s’assurer d’être dans une tendance haussière. Le système utilise un triple objectif de stop-loss ((5%, 10%, 15%) et est associé à un stop-loss dynamique ATR).

  1. Conditions d’entrée: RSI inférieur à 30 et le prix au-dessus du SMA200
  2. Gestion des positions: 75% des fonds utilisés pour une seule ouverture de position
  3. Réglage de stop-loss: stop-loss dynamique basé sur une valeur d’ATR de 1,5 fois
  4. Stratégie d’arrêt: trois points d’arrêt à 5%, 10% et 15% respectivement, en plafonnant les positions à 33%, 66% et 100%

Avantages stratégiques

  1. Gestion dynamique des risques: s’adapter aux fluctuations du marché grâce à l’ATR
  2. La répartition des lots: réduire les perturbations émotionnelles et augmenter les chances de gagner
  3. Confirmation de la tendance: filtrage des fausses signaux avec une ligne uniforme
  4. Gestion des fonds: contrôle des positions en pourcentage pour s’adapter à différentes tailles de compte
  5. Optimisation des commissions: le coût de transaction est pris en compte pour être plus proche des transactions réelles

Risque stratégique

  1. Le retard de la moyenne peut entraîner des retards d’admission
  2. Un RSI survendu ne signifie pas nécessairement un renversement
  3. Une forte proportion de positions pourrait entraîner un retrait plus important
  4. La répartition fréquente des lots peut augmenter les coûts de transaction Il est recommandé de gérer ces risques en ajustant les paramètres et en ajoutant des conditions de filtrage.

Orientation de l’optimisation de la stratégie

  1. Augmenter le volume du signal de confirmation
  2. Présentation de l’indicateur de force de tendance
  3. Optimisation de la répartition du ratio de freinage
  4. Ajouter un filtre de cycle de temps
  5. Considérer l’ajout d’une gestion de position adaptée à la volatilité

Résumer

Cette stratégie, combinant des indicateurs techniques et une gestion dynamique des risques, permet de construire un système de négociation relativement complet. Son avantage est qu’elle est très adaptable et que les risques sont contrôlables, mais qu’elle nécessite toujours l’optimisation des paramètres en fonction de la situation réelle du marché.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef