Indicateur RSI combiné à la stratégie de trading des bandes de Bollinger


Date de création: 2023-12-21 11:17:19 Dernière modification: 2023-12-21 11:17:19
Copier: 0 Nombre de clics: 809
1
Suivre
1623
Abonnés

Indicateur RSI combiné à la stratégie de trading des bandes de Bollinger

Une vue d’ensemble de la stratégie

Cette stratégie est connue sous le nom de stratégie RSI Bollinger Bands TP/SL. Cette stratégie combine l’indicateur RSI et l’indicateur Bollinger Bands, permettant le positionnement de la tendance et la négociation de la rupture.

2. Principes de la stratégie

1. Le RSI décide d’une reprise

L’indicateur RSI permet de déterminer si une action se trouve dans une zone de surachat ou de survente. Il s’agit d’une surachat lorsque le RSI est supérieur à la marge de surachat définie et d’une survente lorsque la marge de survente est inférieure à celle définie.

2. La tendance à juger

Les bandes de Brin calculent la différence standard du prix d’une action pour obtenir une trajectoire ascendante et descendante. La trajectoire ascendante est la ligne de résistance et la trajectoire descendante est la ligne de support.

L’indicateur RSI est associé à l’indicateur Brin

Lorsque l’indicateur RSI présente un signal de revers inférieur et que le cours de l’action franchit la bande de Brin, considérez que le mouvement est inversé de bas en haut et faites plus; lorsque l’indicateur RSI présente un signal de revers supérieur et que le cours de l’action tombe en haut de la bande de Brin, considérez que le mouvement est inversé de haut en bas et faites plus.

Troisièmement, les avantages stratégiques.

1. Le filtre à double indice augmente la précision du signal

L’indicateur RSI et l’indicateur de la bande de Brin sont utilisés pour déterminer les tendances et les points de retournement. L’utilisation de ces deux indicateurs en combinaison peut améliorer la précision d’identification des signaux d’achat et de vente réels et éviter les fausses ruptures.

2. Contrôle des risques par le mécanisme d’arrêt des pertes

La stratégie impose un point d’arrêt et de perte, en ajoutant un point d’arrêt au prix d’entrée.*Le point d’arrêt est le prix d’entrée.*Le taux de coupe-perte est le taux de coupe-perte le plus élevé de l’économie mondiale, et le taux de coupe-perte le plus élevé de l’économie mondiale.

3. Une orientation personnalisée

La stratégie peut être choisie entre faire plus, faire moins ou faire des transactions bidirectionnelles. L’utilisateur peut choisir différentes directions en fonction de l’environnement du marché et contrôler les risques de manière flexible.

Quatrièmement, le risque stratégique

1. Les bandes de Brin sont sensibles aux paramètres

La taille standard de la bande de broyage affecte la largeur de la bande de broyage, ce qui affecte la production de signaux de transaction. Si les paramètres sont mal configurés, un grand nombre de signaux erronés peuvent être générés.

2. Les risques liés à l’arrêt de l’arrêt

Si la situation se retourne en V, le paramètre de stop loss peut être trop radical et entraîner des pertes inutiles.

3. Les paramètres RSI sont sensibles

Les paramètres du RSI influencent également la forme de la courbe RSI. Si les paramètres du RSI sont mal définis, la précision du signal d’inversion RSI est réduite.

Cinquièmement, améliorer la stratégie

1. Optimiser le RSI

Il est possible de tester plus de paramètres de longueur RSI pour trouver la combinaison optimale.

2. Optimiser les paramètres de la bande de Bryn

Il est possible de tester plus de longueurs de bande de Brin et de paramètres d’écart-type pour trouver la meilleure combinaison de paramètres.

3. Tester les différents ratios de stop-loss

Le paramètre optimal du stop-loss ratio peut être trouvé par la rétro-mesure.

VI. Conclusion

Cette stratégie utilise l’indicateur RSI et l’indicateur de la bande de Brin pour déterminer la tendance et le renversement, ajouter le contrôle des risques au mécanisme de stop-loss, identifier automatiquement les points d’achat et de vente et arrêter le stop-loss en temps opportun. La stratégie présente également certains risques et peut être améliorée principalement par des méthodes telles que l’optimisation des paramètres.

Code source de la stratégie
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BigCoinHunter

//@version=5
strategy(title="RSI_Boll-TP/SL", overlay=true, 
     pyramiding=0, default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, initial_capital=1000, 
     currency=currency.USD, commission_value=0.05, 
     commission_type=strategy.commission.percent, 
     process_orders_on_close=true)

//----------- get the user inputs --------------

//---------- RSI -------------
price = input(close, title="Source")

RSIlength = input.int(defval=6,title="RSI Length") 
RSIoverSold = input.int(defval=50, title="RSI OverSold", minval=1)
RSIoverBought = input.int(defval=50, title="RSI OverBought", minval=1)

//------- Bollinger Bands -----------
BBlength = input.int(defval=200, title="Bollinger Period Length", minval=1)
BBmult = input.float(defval=2.0, minval=0.001, maxval=50, step=0.1, title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
fill(plot1=p1, plot2=p2, title="Bollinger BackGround", color=color.new(color.aqua,90), fillgaps=false, editable=true)

//---------- input TP/SL ---------------
tp = input.float(title="Take Profit:", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss:  ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01

longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")

//---------- backtest range setup ------------
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay     = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth   = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear    = input.int(defval = 2042, title = "To Year", minval = 2010)

//------------ time interval setup -----------
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish    = timestamp(toYear, toMonth, toDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

//------- define the global variables ------
var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
//--------- Colors ---------------

TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na
//bgcolor(switch2?(color.new(TrendColor,50)):na)


//--------- calculate the input/output points -----------
longProfitPrice  = strategy.position_avg_price * (1 + tp)     // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl)        // sl -> stop loss percentage

shortProfitPrice  = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)


//---------- RSI + Bollinger Bands Strategy -------------
vrsi = ta.rsi(price, RSIlength)

rsiCrossOver = ta.crossover(vrsi, RSIoverSold)
rsiCrossUnder = ta.crossunder(vrsi, RSIoverBought)

BBCrossOver = ta.crossover(source, BBlower)
BBCrossUnder = ta.crossunder(source, BBupper)

if (not na(vrsi))

    if rsiCrossOver and BBCrossOver
        long := true
        
    if rsiCrossUnder and BBCrossUnder
        long := false

//------------------- determine buy and sell points ---------------------
buySignall = window() and long  and (not stoppedOutLong)
sellSignall = window() and (not long)  and (not stoppedOutShort)

//---------- execute the strategy -----------------
if(longEntry and shortEntry)
    if long 
        strategy.entry("LONG", strategy.long, when = buySignall, comment = "ENTER LONG")
        stoppedOutLong := true
        stoppedOutShort := false
    else 
        strategy.entry("SHORT", strategy.short, when = sellSignall, comment = "ENTER SHORT")
        stoppedOutLong  := false
        stoppedOutShort := true

else if(longEntry)
    strategy.entry("LONG", strategy.long,  when = buySignall)
    strategy.close("LONG", when = sellSignall)
    if long 
        stoppedOutLong := true
    else
        stoppedOutLong  := false

else if(shortEntry)
    strategy.entry("SHORT", strategy.short, when = sellSignall)
    strategy.close("SHORT", when = buySignall)
    if not long
        stoppedOutShort := true
    else
        stoppedOutShort := false
    

//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment="Long TP/SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment="Short TP/SL Trigger")

else if(tp>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, comment="Long TP Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, comment="Short TP Trigger")
        
else if(sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG",  stop=longStopPrice, comment="Long SL Trigger")

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT",  stop=shortStopPrice, comment="Short SL Trigger")