Stratégie d'inversion de tendance RSI

RSI ATR
Date de création: 2024-04-28 13:33:19 Dernière modification: 2024-04-28 13:33:19
Copier: 1 Nombre de clics: 546
1
Suivre
1617
Abonnés

Stratégie d’inversion de tendance RSI

Aperçu

Le RSI est une stratégie de trading quantitative basée sur un indice relativement faible (RSI) et une amplitude réelle moyenne (ATR). La stratégie s’adapte aux fluctuations rapides du marché en ajustant dynamiquement le stop loss (TP/SL) pour capturer les opportunités de reprise de tendance. La stratégie est centrée sur le RSI et, combinée à l’ATR, mesure la volatilité et construit les deux bandes dynamiques d’adaptation suivantes comme base pour ouvrir des positions de placement.

Principe de stratégie

Le cœur de la stratégie de retour de tendance du RSI est la construction d’une zone de stop-loss dynamique. Tout d’abord, utilisez les fonctions personnalisées highest_custom et lowest_custom pour trouver le prix le plus élevé et le prix le plus bas depuis le dernier croisement, formant ainsi une base de bande.

  1. La voie inférieure = le prix le plus élevé ×[1 - (ATR/prix + 1/(RSI est en baisse × multiplicateur))
  2. Le haut de la voie = le prix le plus bas ×[1 + (ATR/prix + 1/(RSI sur la voie × multiplicateur))

Le multiplicateur est un facteur d’expansion de la bande de fréquence personnalisée par l’utilisateur. Si le prix est supérieur à la barre de fréquence, il est plus élevé, si le prix est inférieur à la barre de fréquence, il est plus bas.

Avantages stratégiques

  1. Il s’adapte à la fluctuation des prix et réagit en temps opportun aux changements de la tendance.
  2. Les paramètres sont réglables et la sensibilité de la stratégie peut être contrôlée de manière flexible en ajustant des paramètres tels que la longueur, le multiplicateur.
  3. La logique est claire, la structure du code raisonnable, facile à comprendre et à réutiliser.
  4. Il s’agit d’un outil très polyvalent qui peut être utilisé indépendamment de la stratégie, mais aussi pour l’ajout de fonctionnalités de stop-loss à d’autres stratégies.
  5. L’efficacité du calcul est améliorée par la personnalisation de fonctions telles que “highest_custom”, ce qui permet d’éviter le nombre élevé de calculs répétitifs causés par l’utilisation de types de série.

Risque stratégique

  1. Une mauvaise sélection de paramètres peut entraîner des risques supplémentaires, par exemple, une longueur trop petite peut entraîner des transactions fréquentes, un multiplicateur trop grand peut entraîner un arrêt trop lâche.
  2. Les résultats peuvent être médiocres dans certaines conditions de marché, comme les corrections fréquentes et les fausses percées dans les marchés en crise, qui peuvent entraîner des transactions plus déficitaires.
  3. La stratégie n’a pas de fonction de jugement de tendance en elle-même, elle doit être utilisée avec d’autres signaux.

Orientation de l’optimisation de la stratégie

  1. Vous pouvez envisager d’ajouter des indicateurs de tendance, tels que des moyennes mobiles, et de négocier uniquement à des points de retournement dans la direction d’une tendance majeure.
  2. Les paramètres peuvent être optimisés pour trouver la meilleure combinaison de paramètres tels que longueur, multiplicateur et autres.
  3. Il peut être combiné avec d’autres indicateurs techniques ou d’émotions du marché pour améliorer la précision de la position.
  4. Le risque de chaque transaction peut être strictement contrôlé en ajoutant une gestion de position.

Résumer

La stratégie de retour de tendance RSI utilise le RSI et l’ATR pour construire des bandes d’adaptation qui permettent d’ajuster dynamiquement les points d’arrêt et de perte en temps opportun pour répondre aux changements du marché. La logique de la stratégie est claire, son champ d’application est large et peut être un outil puissant pour les traders quantifiés.

Code source de la stratégie
/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false)


//INPUTS 
rsi_length = input.int(title = "Lenght", defval = 8)
rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05)
lookback = input.int(title = "Delay to prevent idealization", defval = 1)
sltp = input.float(title = "Minimum Difference", defval = 10)
src = input.source(title = "Source Input", defval = close)

//PARAMETERS INITILIZATION
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)
//FUNCTION INITILIZATION
highest_custom(src, length) =>
    x = src
    for i = 0 to length
        if src[i] > x
            x := src[i]
    x
lowest_custom(src, length) => 
    x = src
    for i = 0 to length
        if src[i] < x
            x := src[i]
    x
rsilev(src, length, mult, sltp) =>
    sl = (100 - sltp) / 100
    tp = (100 + sltp) / 100
    var bool crossup = na
    var bool crossdown = na
    var float dir = na
    dir_change = ta.change(dir)
    var float BearGuy = 0
    BullGuy = ta.barssince(crossup or crossdown)
    if na(BullGuy)
        BearGuy += 1
    else
        BearGuy := BullGuy
    var float upper = na
    var float lower = na
    rsilower = ta.rsi(src, length)
    rsiupper = math.abs(ta.rsi(src, length) - 100)
    atr = ta.atr(length) / src
    lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy)
    upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy)
    var float thresh = na
    if na(thresh)
        thresh := lower
    if na(dir)
        dir := 1
    if crossdown
        dir := -1
    if crossup
        dir := 1
    if dir == 1
        thresh := lower
    if dir == -1
        thresh := upper
    crossup := ta.crossover(src, thresh)
    crossdown := ta.crossunder(src, thresh)
    thresh

rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp)

//PLOTTING
var color col = color.lime
if hclose > rsiclose
    col := color.lime
if hclose < rsiclose
    col := color.red
plot(rsiclose, linewidth = 2, color = col)

//STRATEGY
buy = ta.crossover(hclose, rsiclose)
sell = ta.crossunder(hclose, rsiclose)

if buy[lookback]
    strategy.entry("long", strategy.long)
if sell[lookback]
    strategy.entry("Short", strategy.short)