
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.
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.
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.
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.
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.
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.
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.
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.
Si la situation se retourne en V, le paramètre de stop loss peut être trop radical et entraîner des pertes inutiles.
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.
Il est possible de tester plus de paramètres de longueur RSI pour trouver la combinaison optimale.
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.
Le paramètre optimal du stop-loss ratio peut être trouvé par la rétro-mesure.
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.
/*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")