
La stratégie de rupture RSI bidirectionnelle est une stratégie de négociation algorithmique qui utilise l’indicateur RSI pour identifier les points de retournement des prix. Elle compare l’indicateur RSI aux valeurs de hausse et de baisse définies pour déterminer si le marché est en sur-achat et en sur-vente et envoie un signal de négociation.
La stratégie repose principalement sur le RSI pour juger de la situation. L’indicateur RSI est calculé sur la base de la variation du cours de clôture sur un certain laps de temps, ce qui reflète la tendance des actions à acheter. Lorsque le RSI dépasse la valeur de la hausse définie (défault 75), cela indique que les actions entrent dans la zone de survente.
Les règles du jugement stratégique:
Sa logique de négociation est simple et claire, ses paramètres de référence sont réglés de manière raisonnable, son espace de configuration est grand et il est adapté pour capturer les grandes tendances du marché.
Cette stratégie présente les avantages suivants:
Dans l’ensemble, la stratégie a des paramètres de référence raisonnables, une mise en œuvre simple, un retour de cours efficace grâce à l’indicateur RSI, une stratégie de quantification facile à maîtriser et adaptée à la capture des grandes tendances de la marque.
Bien que cette stratégie soit simple et fiable, nous ne pouvons pas ignorer les risques potentiels:
Pour maîtriser les risques, nous devons être attentifs aux points suivants:
Étant donné que la stratégie est principalement exposée à des risques d’erreurs de jugement inversées et de pertes en cas de choc, nous pouvons l’optimiser dans les domaines suivants:
La stratégie de rupture RSI bidirectionnelle est généralement une stratégie de quantification simple et pratique. Elle permet un suivi de la tendance simple en jugeant le renversement des prix à l’aide de l’indicateur RSI. Bien qu’il existe un certain risque d’erreur de jugement, elle peut être optimisée par un ajustement des paramètres et un filtrage du signal.
/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("RSI Algo", overlay=true)
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")
//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0
london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)
time_cond = true
myPeriod = input(defval=14, type=input.integer, title="Period")
myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold")
myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold")
myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim")
myLineToggle = input(defval=true, type=input.bool, title="Show Lines")
myLabelToggle = input(defval=true, type=input.bool, title="Show Labels")
myRSI=rsi(close, myPeriod)
buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond
sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond
myPosition = 0
myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0
trendColor = buy ? color.red : sell ? color.green : na
plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false)
plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false)
plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false)
strategy.initial_capital = 50000
//Calculate the size of the next trade
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit //floating profit/loss
risk = input(2,type=input.float,title="Risk %")/100 //risk % per trade
isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...")
stop = input(250, title="stop loss pips")
tp = input(2500, title="take profit pips")
if(isTwoDigit)
stop := stop/100
temp01 = balance * risk //Risk in USD
temp02 = temp01/stop //Risk in lots
temp03 = temp02*100000 //Convert to contracts
size = 1
strategy.entry("long",1,size,when=buy and myPosition[1]==1 )
strategy.entry("short",0,size,when=sell and myPosition[1]==0)
strategy.exit("exit_long","long",loss=stop, profit=tp) //Long exit (stop loss)
strategy.exit("exit_short","short",loss=stop, profit=tp) //Short exit (stop loss)
//strategy.close_all(when= not time_cond)